-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
some comments as I attempt to understand what's going on #1
base: master
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Large diffs are not rendered by default.
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -3,6 +3,12 @@ | |
|
||
namespace tagt::xchg::agent { | ||
|
||
/** | ||
* Prints out XCHG=> followed by whatever string data is associated with agent ID (uint_16) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think this comment is one of those comments that talks too much about implementation rather than purpose. Right now this is temporary behavior and in the future agent::reply is going to send a message to the agent over TCP, so I think the documentation should reflect that. Something like:
|
||
* and the response | ||
* @param agent something to do with the ID of the agent | ||
* @param response something about a packet struct | ||
*/ | ||
void reply(Id agent, const packet::Packet& response) { | ||
std::cout << "[XCHG=>" << agent << "]: " << response.serialize() << std::endl; | ||
} | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -6,6 +6,11 @@ template<order::Direction> | |
inline std::shared_ptr<const order::Order> best | ||
(std::shared_ptr<const order::Order> a, std::shared_ptr<const order::Order> b); | ||
|
||
/** | ||
* @param a shared ptr to an order | ||
* @param b shared ptr to another order | ||
* @return shared ptr to order with lowest price we can buy something | ||
*/ | ||
template<> | ||
inline std::shared_ptr<const order::Order> best<order::Direction::BUY> | ||
(std::shared_ptr<const order::Order> a, std::shared_ptr<const order::Order> b) { | ||
|
@@ -16,6 +21,13 @@ inline std::shared_ptr<const order::Order> best<order::Direction::BUY> | |
} | ||
} | ||
|
||
/** | ||
* Returns shart ptr to the order that has the highest range.upper value for | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
||
* the highest value we can sell something | ||
* @param a shared ptr to an order | ||
* @param b shared ptr to another order | ||
* @return shared ptr to order that has the highest range.upper val for selling | ||
*/ | ||
template<> | ||
inline std::shared_ptr<const order::Order> best<order::Direction::SELL> | ||
(std::shared_ptr<const order::Order> a, std::shared_ptr<const order::Order> b) { | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -24,8 +24,8 @@ namespace tagt::xchg::book { | |
struct Book { | ||
size_t next_order_id { 0 }; | ||
std::vector<order::Id> order_ids; | ||
std::unordered_map<order::Id, std::shared_ptr<order::Order>> orders; | ||
std::unordered_map<order::Ticker, order::Price> last_price; | ||
std::unordered_map<order::Id, std::shared_ptr<order::Order>> orders;/**maps Id to shared_ptr*/ | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Probably more useful that this is mapping to the |
||
std::unordered_map<order::Ticker, order::Price> last_price;/**maps Ticker to Price */ | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Also, don't mean to get repetitive but I feel like this is one of those comments that doesn't really tell you anything new other than looking at the code. I'd like to explain the why here rather than the what. I.e. why am I tracking the last price? How does the code take care of that? Why are we using these data structures? etc. |
||
|
||
template <class OrderType> | ||
auto match(OrderType& incoming) -> | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -3,21 +3,34 @@ | |
|
||
namespace tagt::xchg::order { | ||
|
||
/** | ||
* @return whether this range's lower is actually lower than upper bound | ||
*/ | ||
bool Range::is_valid() const { | ||
return this->lower <= this->upper; | ||
} | ||
|
||
/** | ||
* @param other pointer to another Range object | ||
* @return a Range object with the highest of the .lower and smallest of the .upper | ||
*/ | ||
Range Range::overlap(const Range& other) const { | ||
return { | ||
.lower = std::max(this->lower, other.lower), | ||
.upper = std::min(this->upper, other.upper) | ||
}; | ||
} | ||
|
||
/** | ||
* @return constant Range with the smallest possible price and largest possible price | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Q: Why does it have that behavior? |
||
*/ | ||
Range Market::range() const { | ||
return { .lower = PRICE_MIN, .upper = PRICE_MAX }; | ||
} | ||
|
||
/** | ||
* @return a constant range with this order's price as the upper bound for a buy or lowerbound for a sell | ||
*/ | ||
Range Limit::range() const { | ||
switch (this->direction) { | ||
case Direction::BUY: | ||
|
@@ -28,6 +41,9 @@ Range Limit::range() const { | |
} | ||
} | ||
|
||
/** | ||
* @return a constant range with this order's price as the lower bound for a buy or upper bound for a sell | ||
*/ | ||
Range StopLoss::range() const { | ||
switch (this->direction) { | ||
case Direction::BUY: | ||
|
@@ -38,6 +54,9 @@ Range StopLoss::range() const { | |
} | ||
} | ||
|
||
/** | ||
* @return a constant range with buy:[stop_price, limit_price] or sell[limit,stop] | ||
*/ | ||
Range StopLimit::range() const { | ||
switch (this->direction) { | ||
case Direction::BUY: | ||
|
@@ -48,6 +67,10 @@ Range StopLimit::range() const { | |
} | ||
} | ||
|
||
/** | ||
* @param other pointer to another order | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Again, what is the point of this method? A: Check to see whether two orders "match", i.e. can they trade against each other? |
||
* @return true if tickers match, directions are different, range overlaps valid, (no AON flag or this size smaller than other) | ||
*/ | ||
bool Order::match(const Order& other) const { | ||
switch (this->direction) { | ||
case Direction::BUY: | ||
|
@@ -64,6 +87,10 @@ bool Order::match(const Order& other) const { | |
} | ||
} | ||
|
||
/** | ||
* @param other pointer to another order | ||
* @return Price of lower of overlap if buy, upper of overlap if sell | ||
*/ | ||
Price Order::get_match_price(const Order& other) const { | ||
auto my_range = this->range(); | ||
auto their_range = other.range(); | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
obv discussion we had about this before, but i'll enumerate here so it's in writing on the repo:
C++17 makes some stuff not possible rn, i.e. we can't do struct initialization like
{.x = 5}
. Easy fix, we can just use constructors until this gets added in C++20. Might be useful to make a quick PR to get that & we can merge that before this PR just so we don't get warnings when we merge this. Happy to take care of that myself