示例#1
0
        public void HandleAddLimitOrder(ILimitOrder limitOrder)
        {
            string symbol = limitOrder.Symbol;

            if (!OrderBooks.ContainsKey(symbol))
            {
                var bookMatchingLimitAlgo = new LimitOrderMatchingAlgorithm(dateService);
                bookMatchingLimitAlgo.AddExecutionsHandler(outgoingQueue.EnqueueClientExecution);

                var bookMatchingMarketAlgo = new MarketOrderMatchingAlgorithm(dateService);
                bookMatchingMarketAlgo.AddExecutionsHandler(outgoingQueue.EnqueueClientExecution);

                var level1 = new OrderBookBestBidAsk(symbol);
                level1.RegisterUpdateHandler(outgoingQueue.EnqueueLevel1Update);

                var book = new OrderBook(symbol, bookMatchingLimitAlgo, bookMatchingMarketAlgo, level1);
                OrderBooks.Add(symbol, book);
            }

            outgoingQueue.EnqueueAddedLimitOrder(limitOrder);
            limitOrder.RegisterDeleteNotificationHandler(OrderBooks[symbol].RemoveLimitOrder);
            limitOrder.RegisterFilledNotification(OrderBooks[symbol].RemoveLimitOrder);
            limitOrder.RegisterModifyNotificationHandler(OrderBooks[symbol].HandleLimitOrderModify);

            OrderBooks[symbol].AddLimitOrder(limitOrder);
        }
示例#2
0
        public void PublisherShouldReceiveOrderAddedData()
        {
            var limitOrder = new LimitOrder("ABC", 21, 20d, WayEnum.Buy, 90);

            outgoingQueue.EnqueueAddedLimitOrder(limitOrder);

            Thread.Sleep(100);
            messagePublisherMock.Verify(a => a.OnEvent(It.Is <ServerToClientMessage>(b =>
                                                                                     b.MessageType == ServerToClientMessageTypeEnum.LimitOrderAccepted &&
                                                                                     b.LimitOrder.ClientId == 90 &&
                                                                                     b.LimitOrder.Price == 20d &&
                                                                                     b.LimitOrder.Quantity == 21 &&
                                                                                     b.LimitOrder.Symbol == "ABC" &&
                                                                                     b.LimitOrder.Way == WayEnum.Buy),
                                                       It.IsAny <long>(),
                                                       It.IsAny <bool>()), Times.Once);
        }
示例#3
0
        public void PublisherShouldReceiveOrderAddedData()
        {
            var limitOrder = new LimitOrder("ABC", 21, 20d, WayEnum.Buy, 90);

            outgoingQueue.EnqueueAddedLimitOrder(limitOrder);

            Thread.Sleep(100);
            messagePublisherMock.AssertWasCalled(a => a.OnNext(Arg <ServerToClientMessage> .Matches(b =>
                                                                                                    b.MessageType == ServerToClientMessageTypeEnum.LimitOrderAccepted &&
                                                                                                    b.LimitOrder.ClientId == 90 &&
                                                                                                    b.LimitOrder.Price == 20d &&
                                                                                                    b.LimitOrder.Quantity == 21 &&
                                                                                                    b.LimitOrder.Symbol == "ABC" &&
                                                                                                    b.LimitOrder.Way == WayEnum.Buy),
                                                               Arg <long> .Is.Anything,
                                                               Arg <bool> .Is.Anything), options => options.Repeat.Once());
        }