public async Task Handle(NewTradesCheckEvent @event) { var lastChecked = await _bus.QueryAsync(new LastCheckedQuery(Constants.Bittrex)); var orderHistory = await _bittrexService.GetOrderHistory(lastChecked.LastChecked); var newTradesResponse = await _bus.QueryAsync(new FindNewTradeQuery(orderHistory)); await _bus.SendAsync(new AddLastCheckedCommand(Constants.Bittrex)); if (@event.BittrexTradeNotifcations) { var i = 0; foreach (var newTrade in newTradesResponse.NewTrades) { if (@event.IsStartup && i > 4) { break; } await _bus.SendAsync(new TradeNotificationCommand(newTrade)); i++; } } }
public async Task Handle(NewTradesCheckEvent @event) { try { var lastChecked = await _bus.QueryAsync(new LastCheckedQuery(Constants.Poloniex)); var orderHistory = await _poloService.GetOrderHistory(lastChecked.LastChecked); var newTradesResponse = await _bus.QueryAsync(new FindNewTradeQuery(orderHistory)); await _bus.SendAsync(new AddLastCheckedCommand(Constants.Poloniex)); if (@event.PoloniexTradeNotification) { var i = 0; foreach (var newTrade in newTradesResponse.NewTrades) { if (@event.IsStartup && i > 4) { break; } await _bus.SendAsync(new TradeNotificationCommand(newTrade)); i++; } } } catch (Exception ex) { _log.LogError("Error in getting new orders from poloniex\n" + ex.Message); throw; } }
public async Task Handle(NewTradesCheckEvent @event) { var lastChecked = await _bus.QueryAsync(new LastCheckedQuery(Constants.Bittrex)); var orderHistory = await _bittrexService.GetOrderHistory(lastChecked.LastChecked); var newTradesResponse = await _bus.QueryAsync(new FindNewTradeQuery(orderHistory)); await _bus.SendAsync(new AddLastCheckedCommand(Constants.Bittrex)); await SendAndCheckNotifications(newTradesResponse); await SendOpenOrdersNotifications(lastChecked.LastChecked); }
public async Task Handle(NewTradesCheckEvent @event) { try { var lastChecked = await _bus.QueryAsync(new LastCheckedQuery(Constants.Binance)); var orderHistory = await _exchangeService.GetOrderHistory(lastChecked.LastChecked - TimeSpan.FromDays(2)); var newTradesResponse = await _bus.QueryAsync(new FindNewTradeQuery(orderHistory)); await _bus.SendAsync(new AddLastCheckedCommand(Constants.Binance)); await SendAndCheckNotifications(newTradesResponse); await SendOpenOrdersNotifications(lastChecked.LastChecked); } catch (Exception ex) { _log.LogError("Error in getting new orders from Binance\n" + ex.Message); throw; } }
public async Task Handle(NewTradesCheckEvent @event) { try { var lastChecked = await _bus.QueryAsync(new LastCheckedQuery(Constants.Poloniex)); var orderHistory = await _poloService.GetOrderHistory(lastChecked.LastChecked); var newTradesResponse = await _bus.QueryAsync(new FindNewTradeQuery(orderHistory)); await _bus.SendAsync(new AddLastCheckedCommand(Constants.Poloniex)); if (newTradesResponse.NewTrades.Count() > 10) { await _bus.SendAsync( new SendMessageCommand("There are more than 10 trades to send. Not going to send them to avoid spamming you")); return; } foreach (var newTrade in newTradesResponse.NewTrades) { if (newTrade.Side == TradeSide.Sell && _config.SellNotifications) { await _bus.SendAsync(new TradeNotificationCommand(newTrade)); } if (newTrade.Side == TradeSide.Buy && _config.BuyNotifications) { await _bus.SendAsync(new TradeNotificationCommand(newTrade)); } } } catch (Exception ex) { _log.LogError("Error in getting new orders from poloniex\n" + ex.Message); throw; } }
public async Task Handle(NewTradesCheckEvent @event) { var lastChecked = await _bus.QueryAsync(new LastCheckedQuery(Constants.Bittrex)); var orderHistory = await _bittrexService.GetOrderHistory(lastChecked.LastChecked); var newTradesResponse = await _bus.QueryAsync(new FindNewTradeQuery(orderHistory)); await _bus.SendAsync(new AddLastCheckedCommand(Constants.Bittrex)); var i = 0; if (!_config.BuyNotifications && !_config.SellNotifications) { return; } if (newTradesResponse.NewTrades.Count() > 10) { await _bus.SendAsync( new SendMessageCommand("There are more than 10 trades to send. Not going to send them to avoid spamming you")); return; } foreach (var newTrade in newTradesResponse.NewTrades) { if (newTrade.Side == TradeSide.Sell && _config.SellNotifications) { await _bus.SendAsync(new TradeNotificationCommand(newTrade)); } if (newTrade.Side == TradeSide.Buy && _config.BuyNotifications) { await _bus.SendAsync(new TradeNotificationCommand(newTrade)); } } }
public async Task Handle(TradeNotificationCommand command) { var newTrade = command.NewTrade; decimal? profitPercentage = null; decimal? btcProfit = null; decimal? reportingProfit = null; string reportingCurrency = null; DateTime?lastBought = DateTime.MinValue; ; if (newTrade.Side == TradeSide.Sell) { var tradesProfitResponse = await _bus.QueryAsync(new TradeProfitQuery(newTrade.Cost, newTrade.QuantityOfTrade, newTrade.Base, newTrade.Terms, newTrade.Exchange)); profitPercentage = tradesProfitResponse.ProfitPercentage; btcProfit = tradesProfitResponse.BtcProfit; reportingProfit = tradesProfitResponse.ReportingProfit; reportingCurrency = tradesProfitResponse.ReportingCurrency; lastBought = tradesProfitResponse.LastBoughtTime; } var sb = new StringBuffer(); sb.Append(string.Format("{0}\n", (newTrade.Timestamp + TimeSpan.FromHours(_config.TimeOffset)).ToString("g"))); sb.Append(string.Format("New {0} order\n", newTrade.Exchange)); sb.Append(string.Format("{3}{0} {1}-{2}{4}\n", newTrade.Side.ToString(), newTrade.Base, newTrade.Terms, StringContants.StrongOpen, StringContants.StrongClose)); sb.Append(string.Format("Quantity: {0}\n", newTrade.QuantityOfTrade.ToString("##0.###########"))); sb.Append(string.Format("Rate: {0} {1}\n", newTrade.Limit.ToString("##0.##############"), newTrade.Base)); sb.Append(string.Format("Total: {0} {1}\n", newTrade.Cost.ToString("##0.###########"), newTrade.Base)); if (profitPercentage.HasValue && btcProfit.HasValue && reportingProfit.HasValue && reportingCurrency != null) { sb.Append(string.Format("Profit: {0} {1} ({2})\n", btcProfit.Value.ToString("##0.########"), newTrade.Base, Helpers.Helpers.FormatCurrencyAmount(reportingProfit.Value, reportingCurrency))); sb.Append(string.Format("Bought on: {0}\n", (lastBought.Value + TimeSpan.FromHours(_config.TimeOffset)).ToString("g"))); sb.Append(string.Format("{1}Percentage: {0}%{2}\n", profitPercentage.Value, StringContants.StrongOpen, StringContants.StrongClose)); } await _bus.SendAsync(new SendMessageCommand(sb)); }
public async Task Handle(TradeNotificationCommand command) { var newTrade = command.NewTrade; decimal? profitPercentage = null; decimal? btcProfit = null; decimal? dollarProfit = null; DateTime?lastBought = DateTime.MinValue; ; if (newTrade.Side == TradeSide.Sell) { var tradesProfitResponse = await _bus.QueryAsync(new TradeProfitQuery(newTrade.Cost, newTrade.QuantityOfTrade, newTrade.Base, newTrade.Terms, newTrade.Exchange)); profitPercentage = tradesProfitResponse.ProfitPercentage; btcProfit = tradesProfitResponse.BtcProfit; dollarProfit = tradesProfitResponse.DollarProfit; lastBought = tradesProfitResponse.LastBoughtTime + TimeSpan.FromHours(_config.TimeOffset); } var message = $"{newTrade.TimeStamp + TimeSpan.FromHours(_config.TimeOffset):g}\n" + $"New {newTrade.Exchange} order\n" + $"<strong>{newTrade.Side} {newTrade.Base}-{newTrade.Terms}</strong>\n" + $"Quantity: {newTrade.QuantityOfTrade}\n" + $"Rate: {newTrade.Limit:##0.##############} {newTrade.Base}\n" + $"Total: {newTrade.Cost:##0.###########} {newTrade.Base}"; if (profitPercentage.HasValue && btcProfit.HasValue && dollarProfit.HasValue) { message = message + $"\nProfit: {btcProfit.Value:##0.########} {newTrade.Base} (${dollarProfit.Value:###0.##})\n" + $"Bought on: {lastBought:g}\n" + $"<strong>Percentage: {profitPercentage.Value}%</strong>"; } await _bus.SendAsync(new SendMessageCommand(message)); }
public Task SendMicroBusRequests() { return(_microBus.QueryAsync(new PingRequest())); }