Esempio n. 1
0
        /// <summary>
        /// Builds a container for Backtesting.
        /// </summary>
        /// <param name="config">The algorithm configuration to use.</param>
        /// <typeparam name="T">The algorithm type.</typeparam>
        /// <returns>ExchangeProviderContainer.</returns>
        public ExchangeProvidersContainer BuildBacktestingContainer <T>(AlgorithmConfiguration config)
            where T : IBaseAlgorithm
        {
            var backtestTimer         = new BacktestTimerProvider(_loggerFactory, Configuration.Instance.BacktestSettings);
            var dataImplementation    = new BacktestDataProvider(_loggerFactory, _databaseContext, backtestTimer);
            var tradingImplementation = new BacktestTradingProvider(_loggerFactory, backtestTimer, dataImplementation);

            var dataProvider    = new DataProvider(_loggerFactory, dataImplementation, config);
            var tradingProvider = new TradingProvider(_loggerFactory, tradingImplementation, dataProvider, _allocationManager);

            // Doubly linked inheritance for backtesting edge case
            dataImplementation.ParentImplementation    = dataProvider;
            tradingImplementation.ParentImplementation = tradingProvider;

            return(new ExchangeProvidersContainer(_loggerFactory, dataProvider, backtestTimer, tradingProvider, typeof(T)));
        }
Esempio n. 2
0
        /// <summary>
        /// Run timer provider until finished.
        /// </summary>
        /// <param name="backtestTimer">Active timer of the backtest.</param>
        /// <returns>Whether the backtest is finished.</returns>
        private ResponseObject WaitTillBacktestFinished(BacktestTimerProvider backtestTimer)
        {
            while (!backtestTimer.Finished)
            {
                Thread.Sleep(10);
            }

            (bool hasErrored, var error) = backtestTimer.ErrorRegister;
            if (hasErrored)
            {
                backtestTimer.LogOutput();
                _logger.LogError(error, "Exception during backtesting");
                return(new ResponseObject(ResponseCode.Error, error.ToString()));
            }

            return(new ResponseObject(ResponseCode.Success));
        }