public void TestStartCalc()
        {
            var runner = new StrategyRunner <MyStrategy>();

            Assert.False(runner.Strategy.StartCalcCalled);
            runner.StartCalc();
            Assert.True(runner.Strategy.StartCalcCalled);
        }
Exemple #2
0
        /// <summary>
        /// Subscribes to the given chart and starts trading.
        /// </summary>
        /// <param name="bars">The chart to subscribe to.</param>
        public void Start(IEnumerable <IMonitoredInstrument> bars)
        {
            if (Runner is object)
            {
                throw new InvalidOperationException("AutoTrader is already running.");
            }

            Manager.OrderValidated += OnOrderValidated;
            Manager.OrderCanceled  += OnOrderCanceled;

            Bars   = new List <IMonitoredInstrument>(bars);
            Runner = new StrategyRunner <T>(Bars, OrderCreator, Output, StrategyInfo);
            Runner.Create();
            Runner.StartCalc();

            // We only send orders based on the primary chart. The secondary charts are
            // used for reference within the strategy.
            PrimaryChart.Updated += OnBarsUpdated;
        }