Implement processing of market-to-limit orders in matching engine #2354
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Pull Request
process_market_to_limit_order
inOrderMatchingEngine
and testedPartiallyFilled
variant inOrderEventAny
Sequence of emmited events
OrderUpdated
- order was updated to new limit price where market order stopped fillingOrderFilled
- market order which was filled emits filled eventOrderAccepted
- remaining quantity of market order is accepted as limit order in the bookTo account for this scenarios, two new order state transitions were aded:
(Self::Submitted, OrderEventAny::Updated(_)) => Self::Submitted
order is submitted and we are first updating new limit price, order state after this event staysSubmitted
(we didnt fill it or accept it in the orderbook)(Self::PartiallyFilled, OrderEventAny::Accepted(_)) => Self::Accepted
- partially filling the order, after market fill, we are leaving it in the book and accepting it