Zipline是一个 Python 算法交易框架。它是一个事件驱动的回测系统。 Quantopian 是一个免费的、以社区为中心的策略编写运行平台。 Zipline 当前作为 Quantopian 的回测和实时交易引擎,正在其生产环境中运行。
- 易用: Zipline 不带来额外学习负担以确保您专注于算法开发。请查看下面的代码示例。
- 类库强大: 包含常见的指标和统计工具,如移动平均和线性回归,可以在策略中很方便地调用。
- 与 PyData 集成: 不管是输入的价格数据,还是输出的策略评估,都是基于 Pandas 库的 DataFrames ,这很容易和 PyData 生态系统相结合。
- 统计和机器学习库: 可以使用 matplotlib 、 scipy 、 statsmodels 、 sklearn 这些库来进行开发、分析和可视化。
假设您已经满足所有 Python 之外的依赖(见下文),您可以通过使用 pip
来安装 Zipline:
$ pip install zipline
注意: 使用 pip
安装 Zipline 比一般的包要复杂一些。如果您从未安装过 Python
科学计算相关的包,直接运行 pip install zipline
有很大可能会失败。
复杂的原因有两个:
1. Zipline 提供了几个需要调用 CPython C API 的 C 扩展。为了构建这些 C 扩展,
pip
需要访问 CPython 头文件来完成安装。
2. Zipline 依赖于 numpy, 它是 Python 数值计算的核心库。而 Numpy 又依赖于 LAPACK 线性代数库。
LAPACK 和 CPython 是二进制依赖关系,因此安装方法因平台而异。在 Linux 平台,用户一般通过
apt
、 yum
、 pacman
这类包管理器来解决依赖问题。在 macOS
上,Homebrew 是更好的选择。
获取二进制依赖关系的更多信息,请参阅完整的 Zipline 安装文档 。
另一种安装 Zipline 的方法是使用 conda
包管理器,它是
Anaconda 的一部分,您可以通过运行
pip install conda
来安装 conda 。
conda 安装好之后,就可以指定 Quantopian
频道来安装 Zipline:
$ conda install -c Quantopian zipline
目前当前支持的平台有:
- GNU/Linux 64-bit
- macOS 64-bit
- Windows 64-bit
Note
在 Windows 32-bit 下也许可以工作,但是没有对它进行持续集成测试。
另请参阅 入门教程.
以下代码实现了一个双移动平均的策略。
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 命令行来运行这个策略,在运行之前需要申请 Quandl 的 API key 来获取默认数据。获得 key 之后,运行下面的命令:
$ QUANDL_API_KEY=<yourkey> zipline ingest -b quandl
$ zipline run -f dual_moving_average.py --start 2014-1-1 --end 2018-1-1 -o dma.pickle
这将从 quandl 下载价格数据,并对命令中指定的时间段进行回测。 结果会保存在 dma.pickle 文件中,您可以用 Python 加载分析。
在 zipline/examples
目录还可以找到其他例子。
如果您发现了 bug ,请打开 Github issue 向我们提交。
欢迎提交bug 报告、bug 修复、文档改进、功能增强和任何想法。 有关如何设置开发环境的详细信息,请参阅我们的 开发指南 。
如果您打算开始使用 Zipline 代码库,可以参考 GitHub issues 选项卡中的问题。 有 面向新手 这类标签, 也有 求助 这样的标签。