public void MatchMarketOrderForOpen(Order order, Func <MatchedOrderCollection, bool> matchedFunc) { using (_contextFactory.GetWriteSyncContext($"{nameof(MarketMakerMatchingEngine)}.{nameof(MatchMarketOrderForOpen)}")) { var orderBookTypeToMatch = order.GetOrderType().GetOrderTypeToMatchInOrderBook(); var matchedOrders = _orderBooks.Match(order, orderBookTypeToMatch, Math.Abs(order.Volume)); if (matchedFunc(matchedOrders)) { _orderBooks.Update(order, orderBookTypeToMatch, matchedOrders); ProduceBestPrice(order.Instrument); } } }
public Task <MatchedOrderCollection> MatchOrderAsync(Order order, bool shouldOpenNewPosition, OrderModality modality = OrderModality.Regular) { using (_contextFactory.GetWriteSyncContext( $"{nameof(MarketMakerMatchingEngine)}.{nameof(MatchOrderAsync)}")) { var orderBookTypeToMatch = order.Direction.GetOrderDirectionToMatchInOrderBook(); //TODO: validate opposite direction if will open new position var matchedOrders = _orderBooks.Match(order.AssetPairId, orderBookTypeToMatch, Math.Abs(order.Volume)); _orderBooks.Update(order.AssetPairId, orderBookTypeToMatch, matchedOrders); ProduceBestPrice(order.AssetPairId); return(Task.FromResult(matchedOrders)); } }