예제 #1
0
        public TradingStrategyEvaluator(
            int numberOfAccounts,
            int accountId,
            ICapitalManager capitalManager,
            ITradingStrategy strategy,
            IDictionary <ParameterAttribute, object> strategyParameters,
            ITradingDataProvider provider,
            StockBlockRelationshipManager relationshipManager,
            TradingSettings settings,
            ILogger logger,
            StreamWriter dumpDataWriter)
        {
            if (numberOfAccounts <= 0 || accountId < 0 || accountId >= numberOfAccounts)
            {
                throw new ArgumentOutOfRangeException();
            }

            if (strategy == null || provider == null || settings == null)
            {
                throw new ArgumentNullException();
            }

            _numberOfAccounts        = numberOfAccounts;
            _accountId               = accountId;
            _strategy                = strategy;
            _strategyParameterValues = strategyParameters;

            _provider = provider;

            _settings = settings;

            _equityManager  = new EquityManager(capitalManager, _settings.PositionFrozenDays);
            _context        = new StandardEvaluationContext(_provider, _equityManager, logger, settings, dumpDataWriter, relationshipManager);
            _tradingTracker = new TradingTracker(capitalManager.InitialCapital);
        }
        public TradeMetricsCalculator(
            //StockNameTable nameTable,
            TradingTracker tracker,
            ITradingDataProvider provider,
            TradingSettings settings)
        {
            if (tracker == null)
            {
                throw new ArgumentNullException("history");
            }

            if (provider == null)
            {
                throw new ArgumentNullException("provider");
            }

            if (settings == null)
            {
                throw new ArgumentNullException("settings");
            }

            var startDate = provider.GetFirstNonWarmupDataPeriods().Min();

            var periods = provider.GetAllPeriodsOrdered().Where(d => d >= startDate).ToArray();

            var endDate = periods.Last();

            if (endDate.Date < endDate)
            {
                endDate.AddDays(1);
            }

            if (tracker.MinTransactionTime < startDate)
            {
                throw new ArgumentOutOfRangeException("the minimum transaction time in trading history is smaller than the start date of provider's data");
            }

            if (tracker.MaxTransactionTime > endDate)
            {
                throw new ArgumentOutOfRangeException("the maximum transaction time in trading history is larger than the end date of provider's data");
            }

            //_nameTable = nameTable;
            _dataProvider = provider;
            _settings     = settings;

            _startDate = startDate;
            _endDate   = endDate;

            _initialCapital     = tracker.InitialCapital;
            _transactionHistory = tracker.TransactionHistory.ToArray();

            _completedTransactionHistory = tracker.CompletedTransactionHistory.ToArray();

            _periods = periods;
        }
        public BlockTradingDetailSummarizer(TradingTracker tracker, ITradingDataProvider provider)
        {
            if (tracker == null)
            {
                throw new ArgumentNullException("history");
            }

            if (provider == null)
            {
                throw new ArgumentNullException("provider");
            }

            _dataProvider = provider;

            _transactionHistory = tracker.TransactionHistory.ToArray();

            _periods = _dataProvider.GetAllPeriodsOrdered();
        }