예제 #1
0
        public IResponse MarketBuy(User user, Stock stock, int quantity)
        {
            var fills = GetOrderFills(OrderType.Market, OrderDirection.Buy, stock, quantity);

            if (fills.Any())
            {
                var account = _bankingProvider.GetAccount(user);
                var cost    = fills.Sum(x => x.Price * x.Quantity);
                if (account.Balance < cost)
                {
                    return new BuyOrderFailedResponse
                           {
                               Reason = BuyOrderFailedResponse.FailureReason.InsufficientFunds
                           }
                }
                ;

                ExecuteBuy(user, fills);
            }

            var unfilled = quantity - fills.Sum(x => x.Quantity);

            if (unfilled > 0)
            {
                _ordersProvider.AddBuyOrder(user, stock, unfilled);
            }

            return(new BuyOrderResponse
            {
                Filled = fills,
                Unfilled = unfilled
            });
        }
예제 #2
0
        public void GetSellOrdersTest_CorrectDirection()
        {
            _provider.AddSellOrder(_user, _stock, 1);
            _provider.AddBuyOrder(_user, _stock, 1);

            var actual = _provider.GetSellOrders(_stock);

            Assert.IsTrue(actual.All(x => x.Direction == OrderDirection.Sell));
        }