public async Task TraderWithNoTrades_Should_CreateFirstTrade() { CoinTrader.Initialize(Market); await CoinTrader.StartAsync(); CoinTrader.Trades.Count.Should().Be(1); }
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(); }
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); }
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(); }
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"); }
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); }
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); }