回测您的交易策略
Zipline 是一个用于回测的 Pythonic 事件驱动系统,由众包投资基金 Quantopian开发和使用,作为回测和实时交易引擎。自 2020 年底关闭以来,托管这些文档的域名已过期。该库在Stefan Jansen所著的《机器学习算法交易》一书中被广泛使用,他正努力保持该库的更新,并使其对读者和更广泛的 Python 算法交易社区可用。
功能
- 易用性: Zipline 试图不干扰您,以便您可以专注于算法开发。下面是一个代码示例。
- 即用型: 许多常见的统计数据,如移动平均和线性回归,可以直接从用户编写的算法中访问。
- PyData 集成: 历史数据的输入和性能统计的输出基于 Pandas DataFrames,以便与现有的 PyData 生态系统良好集成。
- 统计和机器学习库: 您可以使用 matplotlib、scipy、statsmodels 和 scikit-learn 等库来支持开发、分析和可视化最先进的交易系统。
注意: 版本 3.0 更新了 Zipline 以使用pandas >= 2.0 和SQLAlchemy > 2.0。这些是重大版本更新,可能会破坏现有代码;请查看链接的文档。
注意: 版本 2.4 更新了 Zipline 以使用exchange_calendars >= 4.2。这是一个重大版本更新,可能会破坏现有代码(我们已尽力避免,但不能保证)。请在此处查看更改:
github.com/gerrymanoim/exchange_calendars/issues/61
。
安装
Zipline 支持 Python >= 3.8,并与当前版本的NumFOCUS相关库兼容,包括pandas和scikit-learn。
使用pip
如果您的系统满足安装说明中描述的先决条件,您可以使用pip
通过运行以下命令来安装 Zipline:
pip install zipline-reloaded
使用conda
如果您使用的是Anaconda或miniconda发行版,您可以从conda-forge
频道这样安装zipline-reloaded
:
conda install -c conda-forge zipline-reloaded
您还可以通过在.condarc
中列出它来启用 conda-forge
。
如果您在安装zipline-reloaded
时与其他包一起安装并遇到冲突错误,请考虑使用mamba代替。
如需更详细的安装说明,请参阅文档的安装部分,以及相应的conda-forge 网站。
快速入门
请参阅我们的入门教程。
以下代码实现了一个简单的双移动平均算法。
from zipline.api import order_target, record, symbol def initialize(context): context.i = 0 context.asset = symbol('AAPL') def handle_data(context, data): # Skip first 300 days to get full windows context.i += 1 if context.i < 300: return # Compute averages # data.history() has to be called with the same params # from above and returns a pandas dataframe. short_mavg = data.history(context.asset, 'price', bar_count=100, frequency="1d").mean() long_mavg = data.history(context.asset, 'price', bar_count=300, frequency="1d").mean() # Trading logic if short_mavg > long_mavg: # order_target orders as many shares as needed to # achieve the desired number of shares. order_target(context.asset, 100) elif short_mavg < long_mavg: order_target(context.asset, 0) # Save values for later inspection record(AAPL=data.current(context.asset, 'price'), short_mavg=short_mavg, long_mavg=long_mavg)
您可以使用 Zipline CLI 运行此算法。但首先,您需要下载一些包含历史价格和交易量的市场数据:
$ zipline ingest -b quandl $ zipline run -f dual_moving_average.py --start 2014-1-1 --end 2018-1-1 -o dma.pickle --no-benchmark
这将下载来自Quandl(自收购后由 NASDAQ 托管)的资产定价数据,并在指定的时间范围内通过算法流式传输。然后,将生成的性能 DataFrame 保存为dma.pickle
,您可以从 Python 加载并分析它。
您可以在zipline/examples目录中找到其他示例。
有问题、建议或发现错误?
如果您发现错误或对库有其他问题,请随时打开一个问题并填写模板。
- 安装
- 教程
- 数据
- 日历
- 指标
- 开发
- API
- 版本
功能
- **易用性:**Zipline 试图不干扰您,以便您可以专注于算法开发。请参见下面的代码示例。
- **内置功能:**许多常见统计方法,如移动平均和线性回归,都可以在用户编写的算法中直接访问。
- **PyData 集成:**历史数据的输入和性能统计的输出基于 Pandas DataFrames,以便与现有的 PyData 生态系统很好地集成。
- **统计和机器学习库:**您可以使用 matplotlib、scipy、statsmodels 和 scikit-learn 等库来支持开发、分析和可视化最先进的交易系统。
**注意:**版本 3.0 更新了 Zipline 以使用pandas >= 2.0 和SQLAlchemy > 2.0。这些都是重大版本更新,可能会破坏现有代码;请查看链接的文档。
注意: 2.4 版本更新了 Zipline,使其使用 exchange_calendars >= 4.2。这是一个重大版本更新,可能会破坏现有代码(我们已尽力避免,但不能保证)。请在此处查看更改内容:这里。
安装
Zipline 支持 Python >= 3.8,并与当前版本的NumFOCUS相关库兼容,包括pandas和scikit-learn。
使用pip
如果您的系统满足安装说明中描述的先决条件,您可以通过运行以下命令使用pip
安装 Zipline:
pip install zipline-reloaded
使用conda
如果您使用的是Anaconda或miniconda发行版,您可以从conda-forge
频道这样安装zipline-reloaded
:
conda install -c conda-forge zipline-reloaded
您还可以通过在您的.condarc
中列出它来启用 conda-forge
。
如果您在安装zipline-reloaded
时与其他包一起安装并遇到冲突错误,请考虑改用mamba。
请参阅文档的安装部分,了解更详细的说明以及相应的conda-forge 站点。
使用pip
如果您的系统满足安装说明中描述的先决条件,您可以通过运行以下命令使用pip
安装 Zipline:
pip install zipline-reloaded
使用conda
如果您使用的是Anaconda或miniconda发行版,您可以从conda-forge
频道这样安装zipline-reloaded
:
conda install -c conda-forge zipline-reloaded
您还可以通过在您的.condarc
中列出它来启用 conda-forge
。
如果您在安装zipline-reloaded
时与其他包一起安装并遇到冲突错误,请考虑改用mamba。
请参阅文档的安装部分,了解更详细的说明以及相应的conda-forge 站点。
快速入门
请参阅我们的入门教程。
以下代码实现了一个简单的双移动平均算法。
from zipline.api import order_target, record, symbol def initialize(context): context.i = 0 context.asset = symbol('AAPL') def handle_data(context, data): # Skip first 300 days to get full windows context.i += 1 if context.i < 300: return # Compute averages # data.history() has to be called with the same params # from above and returns a pandas dataframe. short_mavg = data.history(context.asset, 'price', bar_count=100, frequency="1d").mean() long_mavg = data.history(context.asset, 'price', bar_count=300, frequency="1d").mean() # Trading logic if short_mavg > long_mavg: # order_target orders as many shares as needed to # achieve the desired number of shares. order_target(context.asset, 100) elif short_mavg < long_mavg: order_target(context.asset, 0) # Save values for later inspection record(AAPL=data.current(context.asset, 'price'), short_mavg=short_mavg, long_mavg=long_mavg)
然后,您可以使用 Zipline CLI 运行此算法。但首先,您需要下载一些具有历史价格和交易量的市场数据:
$ zipline ingest -b quandl $ zipline run -f dual_moving_average.py --start 2014-1-1 --end 2018-1-1 -o dma.pickle --no-benchmark
这将下载来自Quandl(自收购后由纳斯达克托管)的资产定价数据,并在指定的时间范围内通过算法流式传输。然后,将生成的性能 DataFrame 保存为dma.pickle
,您可以从 Python 加载并分析它。
您可以在zipline/examples目录中找到其他示例。
有问题、建议、错误吗?
如果您发现错误或有关于库的其他问题,请随时打开一个问题并填写模板。
- 安装
- 教程
- 数据
- 日历
- 指标
- 开发
- API
- 发布
安装
您可以使用pip,Python 包安装程序,或conda,跨 Windows、macOS 和 Linux 的包和环境管理系统来安装 Zipline。如果您在安装 zipline-reloaded 的同时安装其他包并遇到冲突错误,请考虑使用mamba代替。
Zipline 支持 Python 3.8、3.9、3.10 和 3.11。要安装和并行使用不同版本的 Python 以及创建虚拟环境,您可能希望使用pyenv。
使用pip
安装
通过pip
安装 Zipline 比一般的 Python 包稍微复杂一些。
增加复杂性的原因有两个:
- Zipline 提供了几个需要访问 CPython C API 的 C 扩展。为了构建这些 C 扩展,
pip
需要访问您的 Python 安装的 CPython 头文件。 - Zipline 依赖于NumPy,这是 Python 中用于数值数组计算的核心库。而 NumPy 又依赖于LAPACK线性代数例程。
由于 LAPACK 和 CPython 头文件是非 Python 依赖项,因此安装它们的方法因平台而异。如果您更愿意使用单一工具来安装 Python 和非 Python 依赖项,或者如果您已经在使用Anaconda作为您的 Python 发行版,您可以直接跳到:ref: conda 部分。
一旦您安装了必要的额外依赖项(请参阅下面针对您特定平台的说明),您应该能够简单地运行(最好在激活的虚拟环境中):
$ pip install zipline-reloaded
如果您使用 Python 进行除 Zipline 之外的任何操作,我们强烈建议您在virtualenv中安装。《Python 编程指南》提供了一个关于 virtualenv 的优秀教程。
GNU/Linux
依赖项
在Debian 衍生的 Linux 发行版上,您可以通过运行以下命令从apt
获取所有必要的二进制依赖项:
$ sudo apt install libatlas-base-dev python-dev gfortran pkg-config libfreetype6-dev hdf5-tools
在最近的RHEL 衍生Linux 发行版(例如 Fedora)上,以下步骤应该足以获取必要的额外依赖项:
$ sudo dnf install atlas-devel gcc-c++ gcc-gfortran libgfortran python-devel redhat-rpm-config hdf5
在Arch Linux上,您可以通过pacman
获取额外的依赖项:
$ pacman -S lapack gcc gcc-fortran pkg-config hdf5
还有适用于安装ta-lib的 AUR 包。Python 3 也可以通过以下方式安装:
$ pacman -S python3
编译 TA-Lib
你还需要编译TA-Lib库以进行技术分析,以便其头文件可用。
你可以按照以下步骤进行操作:
$ wget http://prdownloads.sourceforge.net/ta-lib/ta-lib-0.4.0-src.tar.gz $ tar -xzf ta-lib-0.4.0-src.tar.gz $ cd ta-lib/ $ sudo ./configure $ sudo make $ sudo make install
这将允许你使用pip
安装 Python 包装器,正如二进制轮子所预期的那样。
macOS
macOS 随附的 Python 版本通常已过时,并且由于操作系统直接使用它而存在一些怪癖。出于这些原因,许多开发人员选择安装并使用单独的 Python 安装。
Python 搭车指南提供了关于在 macOS 上安装 Python的优秀指南,该指南解释了如何使用Homebrew管理器安装 Python。或者,你也可以使用pyenv。
假设你已经使用brew
安装了 Python,那么你可能还需要以下包:
$ brew install freetype pkg-config gcc openssl hdf5 ta-lib
Windows
对于 Windows,安装 Zipline 最简单且最支持的方法是使用conda
。
使用conda
安装
另一种安装 Zipline 的方法是通过conda
包管理器,它是Anaconda发行版的一部分。或者,你可以使用相关但更轻量级的Miniconda或Miniforge安装程序。
使用 Conda 而不是pip
的主要优点是,conda
原生理解像numpy
和scipy
这样的包的复杂二进制依赖关系。这意味着conda
可以安装 Zipline 及其依赖项,而不需要使用第二个工具来获取 Zipline 的非 Python 依赖项。
有关如何安装conda
的说明,请参阅Conda 安装文档。
一旦设置了conda
,你就可以从conda-forge
频道安装 Zipline。
请参阅此处了解最新的安装详细信息。
管理conda
环境
建议在隔离的conda
环境中安装 Zipline。在conda
环境中安装 Zipline 不会干扰你的默认 Python 部署或 site-packages,这将防止与你的全局库发生任何可能的冲突。有关conda
环境的更多信息,请参阅Conda 用户指南。
假设已经设置了conda
,你可以创建一个conda
环境:
$ conda create -n env_zipline python=3.10
现在你已经设置了一个名为env_zipline
的隔离环境,这是一个类似沙盒的结构,用于安装 Zipline。然后你应该使用以下命令激活 conda 环境:
$ conda activate env_zipline
你可以通过运行以下命令来安装 Zipline:
(env_zipline) $ conda install -c ml4t zipline-reloaded
要停用conda
环境:
(env_zipline) $ conda deactivate
注意
conda activate
和 conda deactivate
仅适用于 conda 4.6 及更高版本。对于 conda 4.6 之前的版本,请运行:
- Windows:
activate
或deactivate
- Linux 和 macOS:
source activate
或source deactivate
使用 pip
安装
通过 pip
安装 Zipline 比一般的 Python 包稍微复杂一些。
增加复杂性的原因有两个:
- Zipline 提供了多个需要访问 CPython C API 的 C 扩展。为了构建这些 C 扩展,
pip
需要访问您 Python 安装的 CPython 头文件。 - Zipline 依赖于 NumPy,这是 Python 中用于数值数组计算的核心库。NumPy 反过来又依赖于 LAPACK 线性代数例程。
由于 LAPACK 和 CPython 头文件是非 Python 依赖项,因此安装它们的方法因平台而异。如果您更愿意使用单个工具来安装 Python 和非 Python 依赖项,或者如果您已经在使用 Anaconda 作为您的 Python 发行版,则可以跳至 :ref: conda 部分。
一旦您安装了必要的额外依赖项(请参阅下面的特定平台),您应该能够简单地运行(最好在激活的虚拟环境中):
$ pip install zipline-reloaded
如果您使用 Python 进行除 Zipline 之外的任何操作,我们强烈建议您在 virtualenv 中安装。《Python 漫游者指南》提供了一个关于 virtualenv 的优秀教程。
GNU/Linux
依赖项
在 Debian 派生的 Linux 发行版上,您可以通过运行以下命令从 apt
获取所有必要的二进制依赖项:
$ sudo apt install libatlas-base-dev python-dev gfortran pkg-config libfreetype6-dev hdf5-tools
在最近的 RHEL 派生的 Linux 发行版(例如 Fedora)上,以下内容应该足以获取必要的额外依赖项:
$ sudo dnf install atlas-devel gcc-c++ gcc-gfortran libgfortran python-devel redhat-rpm-config hdf5
在 Arch Linux 上,您可以通过 pacman
获取额外的依赖项:
$ pacman -S lapack gcc gcc-fortran pkg-config hdf5
也有 AUR 包可用于安装 ta-lib。Python 3 也可以通过以下方式安装:
$ pacman -S python3
编译 TA-Lib
您还需要编译 TA-Lib 库以进行技术分析,以便其头文件可用。
您可以按照以下步骤操作:
$ wget http://prdownloads.sourceforge.net/ta-lib/ta-lib-0.4.0-src.tar.gz $ tar -xzf ta-lib-0.4.0-src.tar.gz $ cd ta-lib/ $ sudo ./configure $ sudo make $ sudo make install
这将允许您按照二进制轮子的预期使用 pip
安装 Python 包装器。
macOS
macOS 随附的 Python 版本通常已过时,并且由于操作系统直接使用它而存在一些特殊情况。出于这些原因,许多开发者选择安装并使用单独的 Python 安装。
Python 漫游指南提供了在 macOS 上安装 Python的优秀指南,解释了如何使用Homebrew管理器安装 Python。或者,您可以使用pyenv。
假设您已经使用brew
安装了 Python,您可能还需要以下包:
$ brew install freetype pkg-config gcc openssl hdf5 ta-lib
Windows
对于 Windows,安装 Zipline 最简单且最支持的方法是使用conda
。
GNU/Linux
依赖项
在Debian 衍生的 Linux 发行版上,您可以通过运行以下命令从apt
获取所有必要的二进制依赖项:
$ sudo apt install libatlas-base-dev python-dev gfortran pkg-config libfreetype6-dev hdf5-tools
在最近的RHEL 衍生的 Linux 发行版(例如 Fedora)上,以下步骤应该足以获取必要的额外依赖项:
$ sudo dnf install atlas-devel gcc-c++ gcc-gfortran libgfortran python-devel redhat-rpm-config hdf5
在Arch Linux上,您可以通过pacman
获取额外的依赖项:
$ pacman -S lapack gcc gcc-fortran pkg-config hdf5
也有 AUR 包可用于安装ta-lib。Python 3 也可以通过以下方式安装:
$ pacman -S python3
编译 TA-Lib
您还需要编译TA-Lib技术分析库,以便其头文件可用。
您可以按照以下步骤操作:
$ wget http://prdownloads.sourceforge.net/ta-lib/ta-lib-0.4.0-src.tar.gz $ tar -xzf ta-lib-0.4.0-src.tar.gz $ cd ta-lib/ $ sudo ./configure $ sudo make $ sudo make install
这将允许您按照二进制轮子的预期使用pip
安装 Python 包装器。
Zipline 3.0 中文文档(一)(2)https://developer.aliyun.com/article/1523876