コード例 #1
0
        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++;
                }
            }
        }
コード例 #2
0
        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;
            }
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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;
            }
        }
コード例 #5
0
        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;
            }
        }
コード例 #6
0
        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));
                }
            }
        }
コード例 #7
0
        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));
        }
コード例 #8
0
        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));
        }
コード例 #9
0
 public Task SendMicroBusRequests()
 {
     return(_microBus.QueryAsync(new PingRequest()));
 }