コード例 #1
0
        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);
        }
コード例 #2
0
        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);
            }
        }