开源量化平台zipline之Data Bundles

Zipline中Data Bundles是指一组包含价格、调整(如分红送股,拆分合并等)及资产信息的数据集合。使用bundles我们可以将数据预先加载进zipline中,从而在以后的回测中可以直接使用。


data bundles

发现可用Bundles

Zipline有几个默认的bundles,同时你也可以注册建立自定义的bundles。
使用zipline bundles命令可以查看可用的bundles。

~$ zipline bundles
csvdir <no ingestions>
quandl 2018-07-29 14:12:49.799438
quantopian-quandl <no ingestions>

bundle名称后的时间戳信息表示数据注入的时间。

数据注入

在使用bundles的数据前,我们需要先行进行数据注入。Zipline默认bundle的存储路径在$ZIPLINE_ROOT/data/<bundle>,注入过程可能会花费你一定时间,如果你使用默认的Quandlbundle,你需要去Quandl注册获取一个API_KEY。
使用zipline ingest命令进行注入。

$ QUANDL_API_KEY=<yourkey> zipline ingest -b  quandl

清理老数据

因为数据源可能不断在更新,多次注入后可能存在多份不同时间点的数据($ZIPLINE_ROOT/data/<bundle>路径下,时间戳目录),可以使用zipline clean命令清理。

# 清理date前所有数据
$ zipline clean [-b <bundle>] --before <date>

# 清零date后所有数据
$ zipline clean [-b <bundle>] --after <date>

# 清理after~before的数据
$ zipline clean [-b <bundle>] --before <before> --after <after>

# 只保留最近num次的注入数据
$ zipline clean [-b <bundle>] --keep-last <num>

使用bundles进行回测

在执行回测时zipline run,可以使用--bundle参数指定bundles,
存在多个时间戳数据时,使用--bundle-timestamp指定

$ zipline run --bundle <bundle> --bundle-timestamp --algofile algo.py ...

自建Data Bundle

Zipline使用Data Bundles方式组织数据,使得我们可以轻松得整合不同数据源。自定义一个Data Bundle只需要实现一个ingest方法。
ingest方法负责将数据加载到内存,并传给各种writer来写入zipline,数据源可以来自quandl这种在线api,也可以来自本地的文件、数据库等。
zipline内部保证了注入过程的事务性,如果存在失败情况,不会导致数据最终的不一致性。

ingest方法签名如下:

ingest(environ,
       asset_db_writer,
       minute_bar_writer,
       daily_bar_writer,
       adjustment_writer,
       calendar,
       start_session,
       end_session,
       cache,
       show_progress,
       output_dir)

对于各个参数的简要说明

  • environ
    environ是一个表示环境变量的map,这里传入了注入过程需要使用的环境变量,如在quandl注入时,就需要传入api_key的参数。
  • asset_db_writer
    asset_db_writer用于写入金融资产的元数据(存在时间区间,证券代码与zipline内部sid的映射),通常也包含名称、交易所及其他一些数据。将相关数据写入Dataframe后,调用write()方法写入。
  • minute_bar_writer
    minute_bar_writer可以将数据转换为zipline内部使用的bcolz格式文件。如果有分钟行情数据,需要循环调用将(sid,dataframe)的数据写入。show_progress参数会传入write方法。
  • daily_bar_writer
    daily_bar_writer用来写入每日收盘行情数据,与minute_bar_writer类似。
  • adjustment_writer
    adjustment_writer用来写入分拆合并、分红、送股等信息。
  • calendar
    canlendar表示交易日期,会影响某些日期计算。
  • start_session
    start_session 表示需要注入数据的起始时间。
  • end_session
    end_session 表示需要注入数据的结束时间。
  • cache
    防止注入失败后重复加载数据,重试时优先从cache中取。
  • show_progress
    表示是否需要给用户反馈进度
  • output_dir
    指定注入路径,为$ZIPLINE_ROOT下相对路径。

从csv文件导入数据

Zipline提供了一个名为csvdir的bundle,允许用户直接使用csv格式的文件导入数据。csv文件需要满足OHLCV(Open,High,Low, Close, Volumn)格式,同时也需要包含日期、分红及分拆信息,zipline/tests/resources/csvdir_samples路径提供了csv模板示例。

date,open,high,low,close,volume,dividend,split
2012-01-03,58.485714,58.92857,58.42857,58.747143,75555200,0.0,1.0
2012-01-04,58.57143,59.240002,58.468571,59.062859,65005500,0.0,1.0
2012-01-05,59.278572,59.792858,58.952858,59.718571,67817400,0.0,1.0
2012-01-06,59.967144,60.392857,59.888573,60.342857,79573200,0.0,1.0
2012-01-09,60.785713,61.107143,60.192856,60.247143,98506100,0.0,1.0
2012-01-10,60.844284,60.857143,60.214287,60.462856,64549100,0.0,1.0
2012-01-11,60.382858,60.407143,59.901428,60.364285,53771200,0.0,1.0

有了正确格式的csv文件后,需要修改~/.zipline/extension.py,同时需要引入csvdir与pandas。

import pandas as pd

from zipline.data.bundles import register
from zipline.data.bundles.csvdir import csvdir_equities

使用pandas指定起始结束时间

start_session = pd.Timestamp('2016-1-1', tz='utc')
end_session = pd.Timestamp('2018-1-1', tz='utc')

使用register()注册该bundle

register(
    'custom-csvdir-bundle',
    csvdir_equities(
        ['daily'],
        '/path/to/your/csvs',
    ),
    calendar_name='NYSE', # US equities
    start_session=start_session,
    end_session=end_session
)

下面就可以注入该csv数据文件。

$ zipline ingest -b custom-csvdir-bundle
Loading custom pricing data:   [############------------------------]   33% | FAKE: sid 0
Loading custom pricing data:   [########################------------]   66% | FAKE1: sid 1
Loading custom pricing data:   [####################################]  100% | FAKE2: sid 2
Loading custom pricing data:   [####################################]  100%
Merging daily equity files:  [####################################]

# 也可以通过环境变量传入路径
$ CSVDIR=/path/to/your/csvs zipline ingest -b custom-csvdir-bundle

本文就到这里,感谢阅读,欢迎订阅:)


quant

量化交易
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,137评论 6 511
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,824评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,465评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,131评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,140评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,895评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,535评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,435评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,952评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,081评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,210评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,896评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,552评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,089评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,198评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,531评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,209评论 2 357

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,675评论 18 139
  • pyspark.sql模块 模块上下文 Spark SQL和DataFrames的重要类: pyspark.sql...
    mpro阅读 9,458评论 0 13
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,832评论 6 342
  • 时光很长,一天接一天地流转,地点与地点的循环往复,冬天与春天的交接,海风与阴雨的辩论,我们走在其中,浑然不觉。有一...
    木云方方阅读 714评论 1 1
  • 十二星座的光芒从不停歇,它们穿梭过你的生命,你永远在它们的共同辉映下。原本你以为自己属于其中之一,其实这一生,你都...
    倩倩不是120阅读 365评论 0 0