public void ThreadSafety()
        {
            var realTimeHandler = new LiveTradingRealTimeHandler();
            var algo            = new AlgorithmStub();

            algo.SubscriptionManager.SetDataManager(new DataManagerStub(algo));

            realTimeHandler.Setup(algo,
                                  new AlgorithmNodePacket(PacketType.AlgorithmNode),
                                  new BacktestingResultHandler(),
                                  null,
                                  new TestTimeLimitManager());

            // wait for the internal thread to start
            Thread.Sleep(500);
            var scheduledEvent  = new ScheduledEvent("1", new [] { Time.EndOfTime }, (_, _) => { });
            var scheduledEvent2 = new ScheduledEvent("2", new [] { Time.EndOfTime }, (_, _) => { });

            Assert.DoesNotThrow(() =>
            {
                for (var i = 0; i < 100000; i++)
                {
                    realTimeHandler.Add(scheduledEvent);
                    realTimeHandler.Add(scheduledEvent2);
                    realTimeHandler.Add(scheduledEvent);
                    realTimeHandler.Remove(scheduledEvent);
                    realTimeHandler.Remove(scheduledEvent2);
                    realTimeHandler.Remove(scheduledEvent);
                }
            });

            realTimeHandler.Exit();
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Select the realtime event handler set in the job.
        /// </summary>
        private static IRealTimeHandler GetRealTimeHandler(IAlgorithm algorithm, IBrokerage brokerage, IDataFeed feed, IResultHandler results, AlgorithmNodePacket job)
        {
            var rth = default(IRealTimeHandler);

            switch (job.RealTimeEndpoint)
            {
            //Don't fire based on system time but virtualized backtesting time.
            case RealTimeEndpoint.Backtesting:
                Log.Trace("Engine.GetRealTimeHandler(): Selected Backtesting RealTimeEvent Handler");
                rth = new BacktestingRealTimeHandler(algorithm, job);
                break;

            // Fire events based on real system clock time.
            case RealTimeEndpoint.LiveTrading:
                Log.Trace("Engine.GetRealTimeHandler(): Selected LiveTrading RealTimeEvent Handler");
                rth = new LiveTradingRealTimeHandler(algorithm, feed, results, brokerage, job);
                break;
            }
            return(rth);
        }