金融算法的回测工具。
项目描述
Zipline是一个Python算法交易库。它是一个事件驱动的回测系统。Zipline目前作为回测和实时交易引擎在生产中使用,为Quantopian提供支持——这是一个免费、以社区为中心、托管的平台,用于构建和执行交易策略。Quantopian还为专业人士提供包括Zipline、Alphalens、Pyfolio、FactSet数据和更多内容的完全托管服务。
特性
易用性: Zipline试图让路,以便您能专注于算法开发。请参阅下面的代码示例。
“内置电池”:许多常用统计信息,如移动平均和线性回归,可以从用户编写的算法中直接访问。
PyData集成:历史数据的输入和性能统计数据的输出基于Pandas DataFrames,以便很好地集成到现有的PyData生态系统中。
统计和机器学习库:您可以使用matplotlib、scipy、statsmodels和sklearn等库来支持最先进交易系统的开发、分析和可视化。
安装
当前Zipline支持Python 2.7、3.5和3.6版本,可以通过pip或conda进行安装。
注意:安装Zipline比安装普通的Python包稍微复杂一些。请参阅完整的Zipline安装文档以获取详细说明。
对于开发安装(用于开发Zipline本身),创建并激活一个虚拟环境,然后运行etc/dev-install脚本。
快速入门
查看我们的入门教程。
以下代码实现了一个简单的双移动平均算法。
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
$ 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目录中找到其他示例。
有问题?
如果您发现了一个bug,请随时打开一个issue并填写issue模板。
贡献
所有贡献,包括bug报告、bug修复、文档改进、增强和想法都欢迎。有关如何设置开发环境的详细信息,请参阅我们的开发指南。
如果您想开始使用Zipline代码库,请转到GitHub issues标签,并开始查看有趣的issue。有时会有标记为入门友好或帮助所需的issue。