Unofficial alternative launcher for QuantConnect's LEAN allowing for parallel execution and looping/batching with customizable parameters and ranges.
LEAN Batch Launcher is an unofficial, alternative launcher for QuantConnect's LEAN Engine enabling batching/looping of algorithms in parallel with different start/end dates, securities, Alphas, data resolutions and (most importantly) parameters.
Prerequisites are the same as for LEAN.
The software has only been tested on Windows but may work fine on Linux and Mac.
LeanBatchLauncher.sln
in Visual Studio and add necessary references to your pre-existing LEAN project.
Algorithm
, Launcher
and Instance
projects to LEAN's DLL files until you can compile successfully. You will need (at least) Common
, Configuration
, Lean.Engine
, Logging
, Messaging
and Queues
. To build the sample algorithm, you will also need Algorithm
and Algorithm.Framework
. The existing references (included without a HintPath
) should be a guide to what's needed.Instance/Program.cs
lines 75 and 76 to set the correct path to and name of the algorithm to be batched. By default, the BasicTemplateFrameworkAlgorithm
is referenced. Whatever DLL you choose here must be referenced in Launcher
and thus compiled at runtime.Launcher/data-start-date-by-symbol.json
is filled in appropriately. Each Symbol to be used in the Launcher must have its earliest start date specified.Launcher/batch.config.json
and follow the reference guide below to configure it properly.Algorithm/BasicTemplateFrameworkAlgorithm.cs
for an example algorithm that makes use of some of the Launcher's functionality. For more examples, see Usage in algorithm sections below.Instance
project as the Startup Project and build it (F6
) once.Launcher
project as the Startup Project and build it (F6
) once to ensure files are copied appropriately.Done! You can now run the Launcher
as you please.
batch.config.json
The various options are described below. Non-optional parameters are marked as such.
Parameter | Description and usage |
---|---|
LibraryPath |
Path to the root folder of the LEAN project, i.e. where the Launcher and Data folders reside. Non-optional.Example: "LibraryPath": "C:\\Users\\John\\Algorithm\\Lib\\Lean" Remember to use double backslashes ( \\ ) to separate folders. |
ApiJobUserId |
Your API job user ID. Same as in LEAN's config.json . Non-optional.Example: "ApiJobUserId": "32476" |
ApiAccessToken |
Your API access token. Same as in LEAN's config.json . Non-optional.Example: "ApiAccessToken": "O8dLVxwKhXpl4JiIfHWP25eIkgs8LY3r" |
ParallelProcesses |
How many processes your computer can handle in parallel. Must be less than or equal to the number of virtual CPU cores available. Non-optional. Example: "ParallelProcesses": 7 |
StartDate |
The starting date of the first instance, expressed as "dd mmm yyyy" (or any other format that DateTime can parse). Non-optional.Example: "StartDate": "01 Jan 2018" Usage in algorithm: SetStartDate( DateTime.Parse( Config.Get( "LBL-start-date" ) ) ); |
Duration |
The length of each backtest (in months). Only integers allowed. Non-optional. Example: "Duration": 12 |
AlphaModelNames |
An array of strings corresponding to the Name property of each Alpha you intend to run. Each Alpha you specify here must already have been created in your algorithm's main file. Example: "AlphaModelNames": [ "Alpha1(A=3,B=2)", "Alpha1(A=1,B=4)", "Alpha2(D=6)" ] Usage in algorithm: the Alphas intended for use must first be initialised in an IAlphaModel[] array. Then the Alpha can be selected by invoking SetAlpha( arrayOfAlphas.Where( x => x.GetModelName() == Config.Get( "LBL-alpha-model-name" ) ).Single() ); |
MinuteResolutions |
An array of integers corresponding to different minute resolutions to pass to the algorithm, one at a time. Example: "MinuteResolutions": [ 30, 60, 120 ] Usage in algorithm: int minuteResolution = Config.GetInt( "LBL-minute-resolution" ); . You could then pass this into e.g. a consolidator. |
Symbols |
An array of symbol strings to pass to the algorithm, one at a time. Example: "Symbols": [ "EURUSD", "CORNUSD", "USDHKD" ] Usage in algorithm: SetUniverseSelection( new ManualUniverseSelectionModel( QuantConnect.Symbol.Create( Config.Get( "LBL-symbol" ), SecurityType.Equity, Market.USA ) ) ); |
Parameters |
Allows you to pass in either a step or factor range: Step range: Will step through a parameter from Start to End in fixed increments of Step . Example: "Parameters": { "LBL-band-width": { "Start": 2, "End": 5, "Step": 0.5 } } Will yield LBL-band-width of 2, 2.5, 3, 3.5, 4, 4.5 and 5. Usage in algorithm: var bandWidth = Config.GetDouble( "band-width" ); . Factor range: Will step through a parameter from Start to End in factors of Factor . Example: "Parameters": { "LBL-lookback-period": { "Start": 4, "End": 64, "Factor": 2 } } Will yield LBL-lookback-period of 4, 8, 16, 32 and 64. Usage in algorithm: var bandWidth = Config.GetInt( "lookback-period" ); . |
Feel free to submit Issues and/or Pull Requests with new functionality, fixes or other enhancements.
See also the list of contributors who participated in this project.
This project is licensed under the MIT License - see the LICENSE
file for details