예제 #1
0
        public IResponse MarketSell(User user, Stock stock, int quantity)
        {
            var holdings = _holdingsProvider.GetHolding(user, stock);

            if (holdings < quantity)
            {
                return new SellOrderFailedResponse
                       {
                           Reason = SellOrderFailedResponse.FailureReason.InsufficientHoldings
                       }
            }
            ;

            var fills = GetOrderFills(OrderType.Market, OrderDirection.Sell, stock, quantity);

            if (fills.Any())
            {
                ExecuteSell(user, fills);
            }

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

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

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

            var actual = _provider.GetSellOrders(_stock);

            Assert.AreEqual(2, actual.Count());
        }