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); } }