Пример #1
0
        public async Task TraderWithNoTrades_Should_CreateFirstTrade()
        {
            CoinTrader.Initialize(Market);
            await CoinTrader.StartAsync();

            CoinTrader.Trades.Count.Should().Be(1);
        }
Пример #2
0
        public async Task StartAsync(CancellationToken cancellationToken)
        {
            _cancellationTokenSource = new CancellationTokenSource();

            _cryptoApi.IsInTestMode = _options.Value.TestMode;
            if (_options.Value.TestMode)
            {
                var market = "BTC-ETC";
                try
                {
                    await _cryptoApi.GetCandlesAsync(market, TickInterval.OneMinute);
                }
                catch (Exception e)
                {
                    Console.WriteLine(e);
                }
                var coinTrader = new CoinTrader(_cryptoApi, _clusterClient, _hubNotifier, _pushManager);
                coinTrader.Initialize(market);
                coinTrader.IsInTestMode = true;
                await coinTrader.StartAsync();

                await Task.Run(() => _cryptoApi.SendMarketUpdates(market), cancellationToken);

                return;
            }

            await StartTrading();
        }
Пример #3
0
        private async Task <CoinTrader> RunHistoryData()
        {
            var fakeBittrexApi = new FakeBittrexApi(null);
            await fakeBittrexApi.GetCandlesAsync(Market, TickInterval.OneHour);

            CoinTrader = new CoinTrader(fakeBittrexApi, OrleansClientMock.Object, HubNotifierMock.Object,
                                        PushManagerMock.Object)
            {
                IsInTestMode = true
            };
            fakeBittrexApi.IsInTestMode = true;
            CoinTrader.Initialize(Market);
            CoinTrader.Strategy = new HoldUntilPriceDropsStrategy
            {
                Settings = TraderSettings.Default
            };
            await CoinTrader.StartAsync();

            CoinTrader.Strategy.Settings.BuyLowerPercentage     = 0;
            CoinTrader.Strategy.Settings.TradingBudget          = 0.0012M;
            CoinTrader.Strategy.Settings.MinimumTakeProfit      = 0M;
            CoinTrader.Strategy.Settings.HighStopLossPercentage = -0.001M;
            CoinTrader.Strategy.Settings.StopLoss       = -15;
            CoinTrader.Strategy.Settings.BuyTrigger     = -43M;
            CoinTrader.Strategy.Settings.ExpirationTime = TimeSpan.FromHours(2);
            await fakeBittrexApi.SendMarketUpdates(Market);

            Console.WriteLine($"Profit: {CoinTrader.Budget.Profit}%");
            return(CoinTrader);
        }
Пример #4
0
 protected async Task InitializeTrader(TradeAction tradeAction)
 {
     CryptoApiMock.MockSellingTrade(new CryptoOrder());
     Strategy.SetupGet(strategy => strategy.Settings).Returns(new TraderSettings {
         TradingBudget = 1000
     });
     Strategy.SetTradeAction(tradeAction);
     CoinTrader.Initialize(Market);
     CoinTrader.Strategy = Strategy.Object;
     await CoinTrader.StartAsync();
 }
Пример #5
0
        public async Task StartTrading()
        {
            await _pushManager.TriggerPush(PushMessage.FromMessage("Started trading"));

            var traderStates = await _tradersManager.GetAllTraders();

            foreach (var market in traderStates.Select(t => t.Market))
            {
                var coinTrader = new CoinTrader(_cryptoApi, _clusterClient, _hubNotifier, _pushManager);
                coinTrader.Initialize(market);
                await coinTrader.StartAsync();
            }

            Console.WriteLine("Finished loading");
        }
Пример #6
0
        public async Task PriceUpdate_Should_UpdateTraderProfit()
        {
            CryptoApiMock.MockBuyingTrade(new CryptoOrder());
            await CoinTrader.StartAsync();

            var trade = new Trade();

            trade.BuyOrder.PricePerUnit = 100;
            CoinTrader.Trades           = new List <Trade> {
                trade
            };
            trade.Status        = TradeStatus.Bought;
            CoinTrader.Strategy = new HoldUntilPriceDropsStrategy();
            await CoinTrader.UpdatePrice(_newPriceTicker);

            CoinTrader.Trades[0].Profit.Should().Be(19.4M);
        }
Пример #7
0
        public async Task BoughtOrder_Should_UpdateTraderStatus()
        {
            var trade = new Trade();
            await CoinTrader.StartAsync();

            CoinTrader.Trades = new List <Trade> {
                trade
            };
            trade.BuyOrder.Uuid = "B";
            var buyOrder = new CryptoOrder
            {
                Uuid      = "B",
                OrderType = CryptoOrderType.LimitBuy
            };

            await CoinTrader.UpdateOrder(buyOrder);

            CoinTrader.Trades[0].Status.Should().Be(TradeStatus.Bought);
        }