Exemple #1
0
        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));
            }
        }