Exemple #1
0
        public async Task Handle(InvestmentCandleDataRequestedIntegrationEvent @event)
        {
            try
            {
                var runningTraces = await _traceRepository.GetByStatus(TraceStatus.Started);

                foreach (var trace in runningTraces)
                {
                    var market = new Market(@event.ExchangeId, @event.BaseCurrency.ToUpper(), @event.QuoteCurrency.ToUpper());
                    if (trace.Market.ExchangeId == @event.ExchangeId &&
                        trace.Market.BaseCurrency == @event.BaseCurrency &&
                        trace.Market.QuoteCurrency == @event.QuoteCurrency)
                    {
                        foreach (var strategy in trace.TradeStrategies)
                        {
                            if (strategy.GetIdealPeriod().Name == @event.CandlePeriod)
                            {
                                var      minAmounts            = strategy.Strategy.MinimumAmountOfCandles;
                                var      period                = strategy.GetIdealPeriod();
                                DateTime fromWithWarmingPeriod = (DateTime)trace.DateStarted;
                                var      oneCandleMinutes      = CandlePeriodService.GetOneCandleMinutesByPeriod(period);
                                var      currentTime           = new RealTimeService().GetCurrentDateTime();
                                var      to = currentTime.AddMinutes(-oneCandleMinutes);
                                fromWithWarmingPeriod = fromWithWarmingPeriod.AddMinutes(-oneCandleMinutes * (minAmounts + 1));

                                await this._trendAnalysisIntegrationEventService
                                .PublishThroughEventBusAsync(new TraceDataRequestedIntegrationEvent(
                                                                 trace.TraceId,
                                                                 strategy.StrategyId,
                                                                 trace.Market.ExchangeId,
                                                                 trace.Market.BaseCurrency,
                                                                 trace.Market.QuoteCurrency,
                                                                 strategy.GetIdealPeriod().Name,
                                                                 fromWithWarmingPeriod,
                                                                 to
                                                                 ));
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Handle Integration Event: CandleChartUpdatedIntegrationEvent.");
                Console.WriteLine("Result: Failure.");
                Console.WriteLine("Error Message: " + ex.Message);
            }
        }