zipline扩展,为python编程语言提供从norgate数据到zipline算法交易库的数据包
zipline-norgatedata的Python项目详细描述
将Norgate Data提供的金融市场数据与Pithonic算法交易库Zipline集成。
主要功能
- 创建简单的捆绑包
- 无偏倚生存捆绑
- 将历史指数成员和股息率等时间序列数据纳入Zipline的管道机制中
目前正在测试阶段。
安装
pip install zipline-norgatedata
升级
接收升级/更新(强烈建议,尤其是在进行alpha测试时):
pip install zipline-norgatedata --upgrade
要求
- python 3.5(注意:只有zipline支持此功能时,才支持3.6和3.7)
- 拉链1.3
- Microsoft Windows
- 主动订阅
- 名为.norgatedata的可写本地用户文件夹(或在环境变量norgatedata\u root中定义)-默认值为C:\users\your username\.norgatedata
假设
- 股票会自动设置最后一个报价日期的自动关闭日期
- 期货自动将自动平仓日期设置为以下较早者:最后交易日(对于现金结算期货,以及仅允许在最后交易日后交割的实物交割期货),或者对于具有第一通知日的期货,在第一通知日之前的一个交易日。在最后一个交易日之前。
捆绑包创建
在extension.py文件的顶部添加以下行(通常位于c:\ users\<;username>;\.zipline)
frompandasimportTimestampfromnorgatedataimportStockPriceAdjustmentTypefromzipline_norgatedataimportregister_norgatedata_equities_bundle,register_norgatedata_futures_bundle
然后在extension.py文件中创建任意数量的bundle定义。这些捆绑包将使用Norgate数据安装中的一个或多个观察列表。
下面是一些示例:
bundlename='norgatedata-sp500-backtest'watchlists=['S&P 500 Current & Past']stock_price_adjustment_setting=StockPriceAdjustmentType.TOTALRETURNstart_session=Timestamp("1990-01-01",tz='utc')end_session=Timestamp.now(tz='utc')calendar_name='NYSE'register_norgatedata_equities_bundle(bundlename,stock_price_adjustment_setting,watchlists,start_session,end_session,calendar_name)bundlename='norgatedata-russell3000-backtest'watchlists=['Russell 3000 Current & Past','Russell 3000 indexes']stock_price_adjustment_setting=StockPriceAdjustmentType.TOTALRETURNstart_session=Timestamp("1990-01-01",tz='utc')end_session=Timestamp.now(tz='utc')calendar_name='NYSE'register_norgatedata_equities_bundle(bundlename,stock_price_adjustment_setting,watchlists,start_session,end_session,calendar_name)bundlename='norgatedata-cme-futures'watchlists=['CME Futures']start_session=Timestamp("2000-01-01",tz='utc')# Start date of data ingestion - NOTE: zipline cannot handle dates prior to 2000 for futuresend_session=Timestamp.now(tz='utc')calendar_name='us_futures'register_norgatedata_futures_bundle(bundlename,watchlists,start_session,end_session,calendar_name)
注意:您需要创建自己的监视列表,以便与期货一起使用,因为期货没有默认的监视列表。这是在Norgate Data Updater应用程序中完成的。
在上面的例子中,我们还有一个名为russell 3000的静态观察列表,其中包含$rua和$ruatr。这对于交易系统非常有用,您需要查看整体指数而不仅仅是组成部分。
摄取捆绑包:
zipline ingest -b <bundlename>
管道-访问TimeSeries数据
TimeSeries数据已公开到Zipline的管道接口中。在回溯测试期间,将根据捆绑包中的所有证券计算管道。
以下过滤器(即布尔值)管道可用:
- norgatedataindexconsistent
- norgatedatamajorexchangelected
- norgatedatacapitalevent
- norgatedatapaddingstatus
以下因素(即浮子)管道可用:
- NorgateDataUnadjustedClose
- norgatedatadividendyield
要将这些内容纳入您的交易模式,您需要导入相关的包/方法:
fromzipline.pipelineimportPipelinefromzipline_norgatedata.pipelinesimportNorgateDataIndexConstituent,NorgateDataDividendYield
建议您将管道构造放在自己的函数中:
defmake_pipeline():idx=NorgateDataIndexConstituent('S&P 1500')divyield=NorgateDataDividendYield()returnPipeline({'NorgateDataIndexConstituent':idx,'NorgateDividendYield':divyield})
合并这个i通过将其附加到您的初始化方法将其添加到您的交易系统中。注意,为了提高效率,请使用chunks=9999或您可能需要的任何数量的条。
这将节省对Norgate数据数据库的不必要访问。
definitialize(context):attach_pipeline(make_pipeline(),'norgatedata_pipeline',chunks=9999,eager=True)# ...
现在,您可以使用zipline的pipline输出方法访问before_trading_start中的管道内容和/或处理数据:
defbefore_trading_start(context,data):context.pipeline_data=pipeline_output('norgatedata_pipeline')# ...defhandle_data(context,data):context.pipeline_data=pipeline_output('norgatedata_pipeline')# ...
1994年对标准普尔1500种成分进行回溯测试的示例
为了访问历史索引组成部分,您应该创建一个引用相关"当前和过去"观察列表的捆绑包。如果您还想访问其他工具,例如索引,建议您将其创建为静态监视列表,并将其添加到捆绑包中。
例如,对标准普尔1500指数的回溯测试有一个基本趋势过滤器,将使用两个观察列表。S&P 1500当前和过去,以及您创建的仅包含$SP1500的静态观察列表。假设您仅将此称为标准普尔1500指数。
在extensions.py中创建一个bundle定义,如下所示。
pip install zipline-norgatedata0
现在,将该包摄取到zipline中:
pip install zipline-norgatedata1
在您的交易系统文件中,您可以合并以下代码片段:
pip install zipline-norgatedata2
元数据
元数据数据框中提供了以下字段:开始日期、结束日期、AC日期、符号、资产名称、交换、交换已满、资产类型、Norgate数据、Norgate数据。
拉链限制/怪癖
- 拉链可能很难安装。我们推荐一个新的Python3.5环境。在安装其他设备之前,请先安装拉链。另请参见下面的"zipline安装疑难解答"部分。
- Zipline只能处理1990年以后的股票数据。
- zipline只能处理2000年以后的未来数据。
- zipline将符号限制为2个字符,从而使期货合约变得不必要地复杂。这不是一个传统的交换。我们希望他们看到光,并允许可变期货根符号长度(最多5个字符)。
- zipline不定义所有期货市场,也不提供此领域的任何扩展性-如果未定义,则需要将它们添加到site packages\zipline\finance\constants.py中。请确保备份此文件,因为在您更新zipline时它将被覆盖。
- zipline假设每天的交易都有酒吧。如果某个证券在某一天内没有交易(例如,它被暂停/暂停,或者根本没有人想交易它),它将被OHLC字段中重复的前一个收盘价填充,并将成交量设置为零。考虑这可能会如何影响您的交易计算。
- 无法摄取索引卷,因为zipline试图将大卷转换为超出uint32界限的uint。索引卷将除以1000。
- 任何调整后的体积超过uint32界限的股票将被设置为uint32的最大值(4294967295)。这只适用于SPLI和/或非常特殊的DSITribution较多的股票。
- 令人惊讶的是,zipline基准无法从你的包中吸收的证券中工作。相反,基准测试使用硬编码逻辑,试图从iex api(现在已经失效)下载security spy。请参阅下面的"zipline 1.3.0基准补丁"以解决/绕过此问题。
- 自v1.3.0(2018年7月)以来,zipline一直没有正式发布。由于未知的原因,即使对源代码执行了许多修复和更改,也没有发布。如果要获取最新版本的zipline,请使用conda install-c quantopian/label/ci zipline
zipline安装疑难解答
我们发现尝试使用Conda v4.7有问题(截至2019年8月),降级到Conda v4.6.11允许继续安装。
首先,在您的"基础"环境中启动一个终端(单击环境,选择基础,单击播放按钮,然后选择打开终端)
在终端中,使用这些命令降级conda:
pip install zipline-norgatedata3
验证Conda v4.6.11是否正在使用:
pip install zipline-norgatedata4
如果显示Conda 4.6.11,请返回Python 3.5环境(如果尚未创建,请创建它),然后继续进行zipline安装:
pip install zipline-norgatedata5
zipline 1.3.0基准修补程序可解决回测失败问题
奇怪的是,在默认情况下,zipline试图从iex获取symbol spy的基准数据(即使您将另一个符号定义为基准)。IEX API在2019年6月退役,因此导致所有回测失败。解决方法是简单地返回一个没有返回的基准,如图所示:
在zipline/data/benchmarks.py中:
pip install zipline-norgatedata6
在zipline/data/loader.py中,搜索确保基准数据的方法,并注释掉以下两行,如图所示:
pip install zipline-norgatedata7
感谢Andreas Clenow提供了此解决方案,请访问:https://github.com/quantopian/zipline/issues/2480
支架
请在单独的电子邮件中单独列出问题,这样可以确保每个问题都有单独的标记和跟踪。
谢谢
感谢Andreas Clenow在其最新著作《交易演变:任何人都可以用Python构建杀手级的交易策略》中,开创性地记录了Zipline捆绑包。我们使用了书中描述的许多技术来构建我们的捆绑包代码。