public async Task <bool> Handle(AddStrategiesCommand request, CancellationToken cancellationToken) { //Add strategies. var createdTrace = await _traceRepository.GetByTraceIdAsync(request.TraceId); var strategies = new List <Strategy>(); foreach (var strategyName in request.Strategies) { var strategy = Strategy.GetStrategy(strategyName); if (strategy == null) { throw new KeyNotFoundException($"Strategy not found: {strategyName}"); } strategies.Add(strategy); } var timeService = new BacktestingTimeService(); timeService.SetCurrentDateTime(DateTime.UtcNow); foreach (var strategy in strategies) { createdTrace.AddStrategy(strategy, timeService); } _traceRepository.Update(createdTrace); try { await _traceRepository.UnitOfWork .SaveEntitiesAsync(); return(true); } catch (Exception ex) { Console.WriteLine("Adding strategies to trace failed. Error occured when adding strategies to a trace. \n" + "Error Message: " + ex.Message); } return(false); }
public async Task Handle(PaperTradeDataCreatedIntegrationEvent @event) { try { var trace = await this._traceRepository.GetByTraceIdAsync(@event.TraceId); if (trace == null) { return; } var candles = new List <Candle>(); foreach (var candle in @event.Candles) { candles.Add(new Candle( candle.Timestamp, candle.High, candle.Low, candle.Open, candle.Close, candle.Volume)); } trace.CandleUpdated(candles, CandlePeriod.FromName(@event.CandlePeriod), new RealTimeService(), new IndicatorService(), @event.StrategyId); _traceRepository.Update(trace); await _traceRepository.UnitOfWork .SaveEntitiesAsync(); } catch (Exception ex) { Console.WriteLine("Handle Integraion Event: PaperTradeDataCreatedIntegrationEvent \n" + "Result: Failure. \n" + "Error Message: " + ex.Message); } }