コード例 #1
0
ファイル: MatcherTest.cs プロジェクト: majicl/trading-engine
        public async Task Order_Ask_Trades_Creation_Is_Based_On_Best_Price()
        {
            //arrange
            var bid  = NewBid(units: 5, price: 109.01m);
            var bid2 = NewBid(units: 10, price: 109.00m);
            var ask  = NewAsk(units: 10, price: 109.00m);

            //act
            _matcher.Tell(bid2);
            _matcher.Tell(bid);
            _matcher.Tell(ask);
            var message = new GetTrades()
            {
                StockId = StockId
            };
            var result = await _matcher.Ask <GetTradesResult>(message);

            //assert
            Assert.NotEmpty(result.Orders);
            Assert.Equal(4, result.Orders.Count);
            Assert.Equal(ask.Order, result.Orders.First());
            Assert.Equal(bid.Order, result.Orders[1]);
            Assert.Equal(ask.Order, result.Orders[2]);
            Assert.Equal(bid2.Order, result.Orders.Last());
        }
コード例 #2
0
ファイル: MatcherTest.cs プロジェクト: majicl/trading-engine
        public async Task Orders_History_Should_Be_Available_After_Matching()
        {
            //arrange
            var ask  = NewAsk(units: 10, price: 99.99m);
            var bid  = NewBid(units: 4, price: 99.99m);
            var bid2 = NewBid(units: 3, price: 99.99m);

            //act
            _matcher.Tell(ask);
            _matcher.Tell(bid);
            _matcher.Tell(bid2);
            var message = new GetTrades()
            {
                StockId = StockId
            };
            var result = await _matcher.Ask <GetTradesResult>(message);

            //assert
            Assert.Equal(4, result.Orders.Count);
            Assert.Equal(10, ask.Order.Units);
            Assert.Equal(4, bid.Order.Units);
            Assert.Equal(3, bid2.Order.Units);

            Assert.Equal(10, result.Orders.First().Units);
            Assert.Equal(4, result.Orders[1].Units);
            Assert.Equal(10, result.Orders[2].Units);
            Assert.Equal(3, result.Orders.Last().Units);
        }
コード例 #3
0
ファイル: MatcherTest.cs プロジェクト: majicl/trading-engine
        public async Task Set_Of_Settled_Orders_Does_NOT_Return_ExpectedData()
        {
            //arrange
            var bid = NewBid(units: 10, price: 110.00m);
            var ask = NewAsk(units: 10, price: 110.00m);

            //act
            _matcher.Tell(bid);
            _matcher.Tell(ask);
            var message = new GetTrades()
            {
                StockId = "WrongOne"
            };
            var result = await _matcher.Ask <GetTradesResult>(message);

            //assert
            Assert.Null(result.Orders);
            Assert.Equal("StockId doesn't match", result.Reason);
        }
コード例 #4
0
ファイル: MatcherTest.cs プロジェクト: majicl/trading-engine
        public async Task Set_Of_Settled_Orders_Returns_ExpectedData()
        {
            //arrange
            var bid = NewBid(units: 10, price: 110.00m);
            var ask = NewAsk(units: 10, price: 110.00m);

            //act
            _matcher.Tell(bid);
            _matcher.Tell(ask);
            var message = new GetTrades()
            {
                StockId = StockId
            };
            var result = await _matcher.Ask <GetTradesResult>(message);

            //assert
            Assert.NotEmpty(result.Orders);
            Assert.Equal(ask.Order, result.Orders.First());
            Assert.Equal(bid.Order, result.Orders.Last());
        }
コード例 #5
0
ファイル: Matcher.cs プロジェクト: majicl/trading-engine
        private void HandleGetTrades(GetTrades query)
        {
            if (query.StockId != _stockId)
            {
                Sender.Tell(new GetTradesResult
                {
                    Reason = "StockId doesn't match"
                });
                return;
            }

            Sender.Tell(new GetTradesResult()
            {
                Success = true,
                Orders  = _tradeSettled.SelectMany(ts => new List <Order>()
                {
                    _orderStore.Single(_ => _.OrderId == ts.AskOrderId).Order,
                    _orderStore.Single(_ => _.OrderId == ts.BidOrderId).Order,
                }).ToList()
            });
        }
コード例 #6
0
ファイル: MatcherTest.cs プロジェクト: majicl/trading-engine
        public async Task Settle_Bid_Order_Should_NOT_Add_Trade()
        {
            //arrange
            var ask  = NewAsk(units: 10, price: 99.99m);
            var ask2 = NewAsk(units: 10, price: 99.99m);
            var bid  = NewBid(units: 10, price: 99.99m);

            //act
            _matcher.Tell(ask);
            _matcher.Tell(ask2);
            _matcher.Tell(bid);
            var message = new GetTrades()
            {
                StockId = StockId
            };
            var result = await _matcher.Ask <GetTradesResult>(message);

            //assert
            Assert.Equal(2, result.Orders.Count);
            Assert.Equal(ask.Order, result.Orders.First());
            Assert.Equal(bid.Order, result.Orders.Last());
        }