Пример #1
0
        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);
        }
Пример #2
0
 public async Task AddOrderBookTraderAsync(OrderBookTraderSettings orderBookTraderSettings)
 {
     await SynchronizeAsync(async() =>
     {
         await _orderBookTraderService.AddOrderBookTraderAsync(orderBookTraderSettings);
         var trader = await _orderBookTraderService.GetTraderByAssetPairIdAsync(orderBookTraderSettings.AssetPairId);
         var orders = trader.CreateOrders();
         await ApplyOrdersAsync(trader.AssetPairId, orders, trader.CountInMarket);
         await _limitOrderService.AddOrUpdateBatchAsync(orders);
     });
 }
        public async Task AddOrderBookTraderAsync([NotNull] OrderBookTraderSettings orderBookSettings)
        {
            if (orderBookSettings == null)
            {
                throw new ArgumentNullException(nameof(orderBookSettings));
            }

            var orderBook = new OrderBookTrader(orderBookSettings);

            await _orderBookTraderRepository.AddAsync(orderBook);

            _orderBookTraders.Add(orderBook.AssetPairId, orderBook);
        }
        public async Task UpdateOrderBookTraderSettingsAsync([NotNull] OrderBookTraderSettings orderBookSettings)
        {
            if (orderBookSettings == null)
            {
                throw new ArgumentNullException(nameof(orderBookSettings));
            }

            if (!_orderBookTraders.ContainsKey(orderBookSettings.AssetPairId))
            {
                _log.Warning("Unable to update settings of non-existing OrderBookTrader", context: orderBookSettings.AssetPairId);
                return;
            }

            var    trader            = _orderBookTraders[orderBookSettings.AssetPairId];
            string traderStateBefore = trader.ToJson();

            trader.UpdateSettings(orderBookSettings);

            await PersistOrderBookTraderAsync(trader);

            _log.Info("Updating OrderBookTrader settings", context: $"before: {traderStateBefore}, after: {trader.ToJson()}");
        }
Пример #5
0
        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);
        }