private static IDataFeed RunLiveDataFeed(
            IAlgorithm algorithm,
            DateTime startDate,
            IEnumerable <Symbol> symbols,
            ITimeProvider timeProvider,
            DataManager dataManager,
            FuncDataQueueHandler funcDataQueueHandler = null)
        {
            var feed = new TestableLiveTradingDataFeed(funcDataQueueHandler ?? new FuncDataQueueHandler(x => Enumerable.Empty <BaseData>()),
                                                       timeProvider);

            var mapFileProvider = new LocalDiskMapFileProvider();

            feed.Initialize(algorithm, new LiveNodePacket(), new BacktestingResultHandler(),
                            mapFileProvider, new LocalDiskFactorFileProvider(mapFileProvider), new DefaultDataProvider(), dataManager);

            foreach (var symbol in symbols)
            {
                var config  = algorithm.Securities[symbol].SubscriptionDataConfig;
                var request = new SubscriptionRequest(false, null, algorithm.Securities[symbol], config, startDate, Time.EndOfTime);
                feed.AddSubscription(request);
            }

            var feedThreadStarted = new ManualResetEvent(false);

            Task.Factory.StartNew(() =>
            {
                feedThreadStarted.Set();
                feed.Run();
            });

            feedThreadStarted.WaitOne();

            return(feed);
        }