zipline扩展,为python编程语言提供从norgate数据到zipline算法交易库的数据包

zipline-norgatedata的Python项目详细描述


alt textalt text

将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的管道接口中。在回溯测试期间,将根据捆绑包中的所有证券计算管道。

以下过滤器(即布尔值)管道可用:

以下因素(即浮子)管道可用:

要将这些内容纳入您的交易模式,您需要导入相关的包/方法:

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-norgatedata
0

现在,将该包摄取到zipline中:

pip install zipline-norgatedata
1

在您的交易系统文件中,您可以合并以下代码片段:

pip install zipline-norgatedata
2

元数据

元数据数据框中提供了以下字段:开始日期、结束日期、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-norgatedata
3

验证Conda v4.6.11是否正在使用:

pip install zipline-norgatedata
4

如果显示Conda 4.6.11,请返回Python 3.5环境(如果尚未创建,请创建它),然后继续进行zipline安装:

pip install zipline-norgatedata
5

zipline 1.3.0基准修补程序可解决回测失败问题

奇怪的是,在默认情况下,zipline试图从iex获取symbol spy的基准数据(即使您将另一个符号定义为基准)。IEX API在2019年6月退役,因此导致所有回测失败。解决方法是简单地返回一个没有返回的基准,如图所示:

在zipline/data/benchmarks.py中:

pip install zipline-norgatedata
6

在zipline/data/loader.py中,搜索确保基准数据的方法,并注释掉以下两行,如图所示:

pip install zipline-norgatedata
7

感谢Andreas Clenow提供了此解决方案,请访问:https://github.com/quantopian/zipline/issues/2480

支架

Norgate数据支持

请在单独的电子邮件中单独列出问题,这样可以确保每个问题都有单独的标记和跟踪。

谢谢

感谢Andreas Clenow在其最新著作《交易演变:任何人都可以用Python构建杀手级的交易策略》中,开创性地记录了Zipline捆绑包。我们使用了书中描述的许多技术来构建我们的捆绑包代码。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何将字符串转换为自定义对象   java如何从socket方法获取数据?   Java中的soap读取回车和新行   java在单击时替换图像   java推荐的使用RXJava执行异步任务的方法   java MySql连接器JDBC驱动程序不支持连接池吗?   java将活动堆栈清理到顶部   java计数用户输入的数量   java从webservice下载大文件导致应用程序性能问题   JavaLocalDate。EPOCH不可用   java如何在使用Selenium等待一定时间后,在页面无法加载(get(url))时自动刷新页面   java Calendar setLenient方法不允许检查年份字段的健全性   java Eclipse和intelliJ 安卓 SDK问题   java为什么我可以在没有super关键字的情况下调用父方法?   java iText的PDF格式不好