* OptionChain and OptionContract improvements - QCAlgorithm.AddUniverse will return the added Universe instance. - Adding new OptionChainedUniverseSelectionModel will monitor a Universe changes and will spwan new OptionChainUniverse from it's selections. Adding regression test Py/C#. - Adding new OptionContractUniverse that will own option contracts and their underlying symbol. Adding regression test - Fix double notification for security changes, bug seen in updated UniverseSelectionRegressionAlgorithm - Remove UniverseSelection special handling for Option and Future chains - Fix DataManager not removing SubscriptionDataConfigs for Subscriptions which finished before being removed from the universe - Refactor detection of user added Universe so that they do not get removed after calling the UniverseSelectionModel * Add check for option underlying price is set * Address reviews - Adding python regression algorithm for `AddOptionContractFromUniverseRegressionAlgorithm` and `AddOptionContractExpiresRegressionAlgorithm` - Rename QCAlgorithm new api method to `AddChainedOptionUniverse` * Fix universe refresh bug - Fix bug where a universe selection refresh would cause option or future chain universes from being removed. Adding regression algorithm reproducing the issue. * Rename new option universe Algorithm API method - Rename new option universe Algorith API method from AddChainedOptionUniverse to AddUniverseOptions - Rebase and update regression test order hash because of option expiration message changed
QuantConnect Python Algorithm Project:
Before we enable python support, follow the installation instructions to get LEAN running C# algorithms in your machine.
Install Python 3.6:
Windows
- Use the Windows x86-64 MSI Python 3.6.8 installer from python.org or Anaconda for Windows installer. "Anaconda 5.2" installs 3.5.2 by default, after installation of Anaconda you will need to upgrade python to make it work as expected:
conda install -y python=3.6.8 - When asked to select the features to be installed, make sure you select "Add python.exe to Path"
[Optional]CreatePYTHONHOMEsystem variables which value must be the location of your python installation (e.g.C:\Python36amd64orC:\Anaconda3):- Right mouse button on My Computer. Click Properties.
- Click Advanced System Settings -> Environment Variables -> System Variables
- Click New.
- Name of the variable:
PYTHONHOME. - Value of the variable: python installation path.
- Name of the variable:
- Install pandas=0.25.3 and its dependencies.
- Install wrapt=1.11.2 module.
- Reboot computer to ensure changes are propogated.
macOS
- Use the macOS x86-64 package installer from Anaconda and follow "Installing on macOS" instructions from Anaconda documentation page.
- Install pandas=0.25.3 and its dependencies.
- Install wrapt=1.11.2 module.
Note: If you encounter the "System.DllNotFoundException: python3.6m" runtime error when running Python algorithms on macOS:
- Find
libpython3.6m.dylibin your Python installation folder. If you installed Python with Anaconda, it may be find at
/Users/{your_user_name}/anaconda3/lib/libpython3.6m.dylib
- Open
Lean/Launcher/bin/Debug/Python.Runtime.dll.config, add the following text and save:
<configuration>
<dllmap dll="python3.6m" target="{the path in step 1 including libpython3.6m.dylib}" os="!windows"/>
</configuration>
Note: Specify the install of v3.6.8 exactly, i.e. if with conda conda install python=3.6.8 as this is a known compatible version and other versions may have issues as of this writing.
Linux
By default, miniconda is installed in the users home directory ($HOME):
export PATH="$HOME/miniconda3/bin:$PATH"
wget https://cdn.quantconnect.com/miniconda/Miniconda3-4.5.12-Linux-x86_64.sh
bash Miniconda3-4.5.12-Linux-x86_64.sh -b
rm -rf Miniconda3-4.5.12-Linux-x86_64.sh
sudo ln -s $HOME/miniconda3/lib/libpython3.6m.so /usr/lib/libpython3.6m.so
conda update -y python conda pip
conda install -y cython=0.29.11
conda install -y pandas=0.25.3
conda install -y wrapt=1.11.2
Note: There is a known issue with python 3.6.5 that prevents pythonnet installation, please upgrade python to version 3.6.8:
conda install -y python=3.6.8
Run python algorithm
- Update the config to run the python algorithm:
"algorithm-type-name": "BasicTemplateAlgorithm",
"algorithm-language": "Python",
"algorithm-location": "../../../Algorithm.Python/BasicTemplateAlgorithm.py",
- Rebuild LEAN.
- Run LEAN. You should see the same result of the C# algorithm you tested earlier.
Python.Runtime.dll compilation
LEAN users do not need to compile Python.Runtime.dll. The information below is targeted to developers who wish to improve it.
Download QuantConnect/pythonnet github clone or downloading the zip. If downloading the zip - unzip to a local pathway.
Note: QuantConnect's version of pythonnet is an enhanced version of pythonnet with added support for System.Decimal and System.DateTime.
Below we can find the compilation flags that create a suitable Python.Runtime.dll for each operating system.
Windows
msbuild pythonnet.sln /nologo /v:quiet /t:Clean;Rebuild /p:Platform=x64 /p:PythonInteropFile="interop36.cs" /p:Configuration=ReleaseWin /p:DefineConstants="PYTHON36,PYTHON3,UCS2"
macOS
msbuild pythonnet.sln /nologo /v:quiet /t:Clean;Rebuild /p:Platform=x64 /p:PythonInteropFile="interop36m.cs" /p:Configuration=ReleaseMono /p:DefineConstants="PYTHON36,PYTHON3,UCS4,MONO_OSX,PYTHON_WITH_PYMALLOC"
Linux
msbuild pythonnet.sln /nologo /v:quiet /t:Clean;Rebuild /p:Platform=x64 /p:PythonInteropFile="interop36m.cs" /p:Configuration=ReleaseMono /p:DefineConstants="PYTHON36,PYTHON3,UCS4,MONO_LINUX,PYTHON_WITH_PYMALLOC"