private void LaunchLean() { Config.Set ("environment", "desktop"); string algorithm = "EMATest"; Config.Set("algorithm-type-name", algorithm); _jobQueue = new JobQueue (); _notify = new Messaging (); _api = new Api(); _resultshandler = new DesktopResultHandler (); _dataFeed = new FileSystemDataFeed (); _setup = new ConsoleSetupHandler (); _realTime = new BacktestingRealTimeHandler (); _historyProvider = new SubscriptionDataReaderHistoryProvider (); _transactions = new BacktestingTransactionHandler (); var systemHandlers = new LeanEngineSystemHandlers (_jobQueue, _api, _notify); systemHandlers.Initialize (); var algorithmHandlers = new LeanEngineAlgorithmHandlers (_resultshandler, _setup, _dataFeed, _transactions, _realTime, _historyProvider); var _engine = new Engine (systemHandlers, algorithmHandlers, Config.GetBool ("live-mode")); string algorithmPath; var job = systemHandlers.JobQueue.NextJob(out algorithmPath); _engine.Run(job, algorithmPath); }
public void TestsFileSystemDataFeedSpeed() { var job = new BacktestNodePacket(); var resultHandler = new BacktestingResultHandler(); var mapFileProvider = new LocalDiskMapFileProvider(); var factorFileProvider = new LocalDiskFactorFileProvider(mapFileProvider); var dataFileProvider = new DefaultDataFileProvider(); var algorithm = new BenchmarkTest(); var feed = new FileSystemDataFeed(); feed.Initialize(algorithm, job, resultHandler, mapFileProvider, factorFileProvider, dataFileProvider); algorithm.Initialize(); var feedThreadStarted = new ManualResetEvent(false); Task.Factory.StartNew(() => { feedThreadStarted.Set(); feed.Run(); }); feedThreadStarted.WaitOne(); var stopwatch = Stopwatch.StartNew(); var lastMonth = -1; var count = 0; foreach (var timeSlice in feed) { if (timeSlice.Time.Month != lastMonth) { Console.WriteLine(DateTime.Now + " - Time: " + timeSlice.Time); lastMonth = timeSlice.Time.Month; } count++; } Console.WriteLine("Count: " + count); stopwatch.Stop(); Console.WriteLine("Elapsed time: " + stopwatch.Elapsed); }
/// <summary> /// Get an instance of the data feed handler we're requesting for this work. /// </summary> /// <param name="algorithm">User algorithm to scan for securities</param> /// <param name="job">Algorithm Node Packet</param> /// <returns>Class matching IDataFeed Interface</returns> private static IDataFeed GetDataFeedHandler(IAlgorithm algorithm, AlgorithmNodePacket job) { var df = default(IDataFeed); switch (job.DataEndpoint) { //default: ////Backtesting: case DataFeedEndpoint.Backtesting: df = new BacktestingDataFeed(algorithm, (BacktestNodePacket)job); Log.Trace("Engine.GetDataFeedHandler(): Selected Backtesting Datafeed"); break; case DataFeedEndpoint.Database: df = new DatabaseDataFeed(algorithm, (BacktestNodePacket)job); Log.Trace("Engine.GetDataFeedHandler(): Selected Database Datafeed"); break; //Operation from local files: case DataFeedEndpoint.FileSystem: df = new FileSystemDataFeed(algorithm, (BacktestNodePacket)job); Log.Trace("Engine.GetDataFeedHandler(): Selected FileSystem Datafeed"); break; //Live Trading Data Source: case DataFeedEndpoint.LiveTrading: var ds = Composer.Instance.GetExportedValueByTypeName<IDataQueueHandler>(Config.Get("data-queue-handler", "LiveDataQueue")); df = new LiveTradingDataFeed(algorithm, (LiveNodePacket)job, ds); Log.Trace("Engine.GetDataFeedHandler(): Selected LiveTrading Datafeed"); break; } return df; }
/// <summary> /// Get an instance of the data feed handler we're requesting for this work. /// </summary> /// <param name="algorithm">User algorithm to scan for securities</param> /// <param name="job">Algorithm Node Packet</param> /// <returns>Class matching IDataFeed Interface</returns> private static IDataFeed GetDataFeedHandler(IAlgorithm algorithm, AlgorithmNodePacket job) { var df = default(IDataFeed); switch (job.DataEndpoint) { //default: ////Backtesting: case DataFeedEndpoint.Backtesting: df = new BacktestingDataFeed(algorithm, (BacktestNodePacket)job); Log.Trace("Engine.GetDataFeedHandler(): Selected Backtesting Datafeed"); break; //Operation from local files: case DataFeedEndpoint.FileSystem: df = new FileSystemDataFeed(algorithm, (BacktestNodePacket)job); Log.Trace("Engine.GetDataFeedHandler(): Selected FileSystem Datafeed"); break; //Live Trading Data Source: case DataFeedEndpoint.LiveTrading: df = new PaperTradingDataFeed(algorithm, (LiveNodePacket)job); Log.Trace("Engine.GetDataFeedHandler(): Selected LiveTrading Datafeed"); break; case DataFeedEndpoint.Test: var feed = new TestLiveTradingDataFeed(algorithm, (LiveNodePacket)job); df = feed; Log.Trace("Engine.GetDataFeedHandler(): Selected Test Datafeed at " + feed.FastForward + "x"); break; } return df; }
/// <summary> /// Launches a Lean Engine using a parameter /// </summary> /// <param name="val">The paramater to use when launching lean. </param> private void LaunchLean(string val) { Config.Set("environment", "backtesting"); string algorithm = val; // Set the algorithm in Config. Here is where you can customize Config settings Config.Set("algorithm-type-name", algorithm); _jobQueue = new JobQueue(); _notify = new Messaging(); _api = new Api(); /************ Comment one of the two following lines to select which ResultHandler to use ***********/ _resultshandler = new OptimizationResultHandler(); //_resultshandler = new ConsoleResultHandler(); _dataFeed = new FileSystemDataFeed(); _setup = new ConsoleSetupHandler(); _realTime = new BacktestingRealTimeHandler(); _historyProvider = new SubscriptionDataReaderHistoryProvider(); _transactions = new BacktestingTransactionHandler(); // Set the Log.LogHandler to only write to the log.txt file. // This setting avoids writing Log messages to the console. Log.LogHandler = (ILogHandler)new FileLogHandler(); Log.DebuggingEnabled = false; // Set this property to true for lots of messages Log.DebuggingLevel = 1; // A reminder that the default level for Log.Debug message is 1 var systemHandlers = new LeanEngineSystemHandlers(_jobQueue, _api, _notify); systemHandlers.Initialize(); var algorithmHandlers = new LeanEngineAlgorithmHandlers(_resultshandler, _setup, _dataFeed, _transactions, _realTime, _historyProvider); string algorithmPath; AlgorithmNodePacket job = systemHandlers.JobQueue.NextJob(out algorithmPath); try { var _engine = new Engine(systemHandlers, algorithmHandlers, Config.GetBool("live-mode")); _engine.Run(job, algorithmPath); } finally { /* The JobQueue.AcknowledgeJob only asks for any key to close the window. * We do not want that behavior, so we comment out this line so that multiple Leans will run * * The alternative is to comment out Console.Read(); the line in JobQueue class. */ //systemHandlers.JobQueue.AcknowledgeJob(job); Log.Trace("Engine.Main(): Packet removed from queue: " + job.AlgorithmId); // clean up resources systemHandlers.Dispose(); algorithmHandlers.Dispose(); Log.LogHandler.Dispose(); } }
private void LaunchLean() { Config.Set("environment", "backtesting"); string algorithm = "EMATest"; Config.Set("algorithm-type-name", algorithm); //string datapath = Config.Get("data-folder"); _jobQueue = new JobQueue(); _notify = new Messaging(); _api = new Api(); _resultshandler = new OptimizationResultHandler(); //_resultshandler = new ConsoleResultHandler(); _dataFeed = new FileSystemDataFeed(); _setup = new ConsoleSetupHandler(); _realTime = new BacktestingRealTimeHandler(); _historyProvider = new SubscriptionDataReaderHistoryProvider(); _transactions = new BacktestingTransactionHandler(); Log.LogHandler = (ILogHandler)new FileLogHandler(); Log.DebuggingEnabled = false; Log.DebuggingLevel = 1; var systemHandlers = new LeanEngineSystemHandlers(_jobQueue, _api, _notify); systemHandlers.Initialize(); var algorithmHandlers = new LeanEngineAlgorithmHandlers(_resultshandler, _setup, _dataFeed, _transactions, _realTime, _historyProvider); string algorithmPath; AlgorithmNodePacket job = systemHandlers.JobQueue.NextJob(out algorithmPath); try { var _engine = new Engine(systemHandlers, algorithmHandlers, Config.GetBool("live-mode")); _engine.Run(job, algorithmPath); } finally { //Delete the message from the job queue: //systemHandlers.JobQueue.AcknowledgeJob(job); Log.Trace("Engine.Main(): Packet removed from queue: " + job.AlgorithmId); // clean up resources systemHandlers.Dispose(); algorithmHandlers.Dispose(); Log.LogHandler.Dispose(); } }
private void LaunchLean() { Config.Set ("environment", "backtesting"); string algorithm = "EMATest"; Config.Set("algorithm-type-name", algorithm); _jobQueue = new JobQueue (); _notify = new Messaging (); _api = new Api(); _resultshandler = new DesktopResultHandler (); _dataFeed = new FileSystemDataFeed (); _setup = new ConsoleSetupHandler (); _realTime = new BacktestingRealTimeHandler (); _historyProvider = new SubscriptionDataReaderHistoryProvider (); _transactions = new BacktestingTransactionHandler (); var systemHandlers = new LeanEngineSystemHandlers (_jobQueue, _api, _notify); systemHandlers.Initialize (); // var algorithmHandlers = new LeanEngineAlgorithmHandlers (_resultshandler, _setup, _dataFeed, _transactions, _realTime, _historyProvider); Log.LogHandler = Composer.Instance.GetExportedValueByTypeName<ILogHandler>(Config.Get("log-handler", "CompositeLogHandler")); LeanEngineAlgorithmHandlers leanEngineAlgorithmHandlers; try { leanEngineAlgorithmHandlers = LeanEngineAlgorithmHandlers.FromConfiguration(Composer.Instance); _resultshandler = leanEngineAlgorithmHandlers.Results; } catch (CompositionException compositionException) { Log.Error("Engine.Main(): Failed to load library: " + compositionException); throw; } string algorithmPath; AlgorithmNodePacket job = systemHandlers.JobQueue.NextJob(out algorithmPath); try { var _engine = new Engine(systemHandlers, leanEngineAlgorithmHandlers, Config.GetBool("live-mode")); _engine.Run(job, algorithmPath); } finally { //Delete the message from the job queue: //systemHandlers.JobQueue.AcknowledgeJob(job); Log.Trace("Engine.Main(): Packet removed from queue: " + job.AlgorithmId); // clean up resources systemHandlers.Dispose(); leanEngineAlgorithmHandlers.Dispose(); Log.LogHandler.Dispose(); } }