public void HandlePartialTrade_RemainingVolumeLessThenMinimal_OneAddedOneRemoved()
        {
            var settings = new OrderBookTraderSettings
            {
                AssetPairId  = "BTCAUD",
                Count        = 5,
                Delta        = 0.1m,
                InitialPrice = 5,
                IsEnabled    = true,
                Volume       = 10
            };

            var minVolume = 3m;

            var trader = new OrderBookTrader(settings);

            var orders = trader.CreateOrders();

            var(addedOrders, removedOrders) = trader.HandleTrades(new[]
            {
                new Trade
                {
                    AssetPairId = "BTCAUD",
                    Type        = TradeType.Sell,
                    Price       = 5.2m,
                    Volume      = 8
                }
            }, minVolume);

            Assert.Equal(1, removedOrders.Count);
            Assert.Equal(1, addedOrders.Count);
        }
        public void InventoryUpdate()
        {
            var settings = new OrderBookTraderSettings
            {
                AssetPairId   = "BTCJPY",
                Count         = 10,
                Delta         = 1000m,
                InitialPrice  = 100000,
                IsEnabled     = true,
                Volume        = 0.1m,
                CountInMarket = 8
            };

            var minVolume = 0m;

            var trader = new OrderBookTrader(settings);

            var orders = trader.CreateOrders();

            var trades = new List <Trade>()
            {
                new Trade
                {
                    Type   = TradeType.Sell,
                    Volume = 0.1m,
                    Price  = 103000m
                },
                new Trade
                {
                    Type   = TradeType.Sell,
                    Volume = 0.1m,
                    Price  = 102000m
                },
                new Trade
                {
                    Type   = TradeType.Sell,
                    Volume = 0.1m,
                    Price  = 101000m
                },
                new Trade
                {
                    Type   = TradeType.Buy,
                    Volume = 0.1m,
                    Price  = 99000m
                },
                new Trade
                {
                    Type   = TradeType.Buy,
                    Volume = 0.1m,
                    Price  = 98000m
                },
                new Trade
                {
                    Type   = TradeType.Buy,
                    Volume = 0.1m,
                    Price  = 97000m
                },
                new Trade
                {
                    Type   = TradeType.Buy,
                    Volume = 0.1m,
                    Price  = 97000m
                },
                new Trade
                {
                    Type   = TradeType.Buy,
                    Volume = 0.1m,
                    Price  = 97000m
                },
                new Trade
                {
                    Type   = TradeType.Buy,
                    Volume = 0.1m,
                    Price  = 97000m
                },
                new Trade
                {
                    Type   = TradeType.Sell,
                    Volume = 0.1m,
                    Price  = 98000m
                },
                new Trade
                {
                    Type   = TradeType.Sell,
                    Volume = 0.1m,
                    Price  = 99000m
                },
                new Trade
                {
                    Type   = TradeType.Sell,
                    Volume = 0.1m,
                    Price  = 100000m
                }
            };

            trader.HandleTrades(trades, minVolume);

            Assert.Equal(trader.Inventory, 0m);
            Assert.Equal(trader.OppositeInventory, 1800m);
        }