200倍速!基于 HDF5 的证券数据存储方案

本文详细介绍了为何个人交易者需要构建本地存储,特别是使用HDF5进行大规模数据存储的优点。HDF5在处理大量数据时表现出色,同时讨论了其局限性和可能的优化策略,如并行版本和使用PyArrow/Parquet。

R50

去年 15 日的笔记挖了个坑,给出了量化数据和因子的存储方案技术导图。这一篇笔记就开始填坑。

即使我们购买了在线数据服务,比如 tushare, 聚宽的账号,我们仍然要构建自己的本地存储,为什么?

原因如下:

  1. 在线数据服务一般都有 quota 限制(比如聚宽)。如果我们要频繁地进行回测,很容易用尽 quota。
  2. 如果我们在回测时,使用的数据要从远程服务器上获取,网络延时会大大影响到回测速度。
  3. 即使在线数据服务提供了因子库(比如 Alpha 101, Alpha 191 因子库),但是,真正能战胜市场的因子,必然来自于你自己的独特研究,所以, 我们也要解决自己提取的因子如何存储的问题,这也决定了我们仍然要构建自己的本地存储。

这一篇笔我们介绍 HDF5,这是最适合个人交易者的入门方案。HDF5 可以处理相当大容量的数据。

L50

根据 Kesheng Wu 等人的研究,他们分析 2007 年到 2012 年 7 月间的期货交易数据,以构建 VPIN 因子时,处理的交易数据达 30 亿条,CSV 文件的大小达到了 140GB。当使用这么多数据进行 VPIN 计算时,使用 CSV 文件的时间是 142 秒;将其转换成 HDF5 格式后,同样的计算则只花了 0.4 秒,HDF5快了200多倍!

HDF(Hierarchical Data Format)是一种为存储和处理大容量科学数据设计的文件格式及相应库文件。最早由 NCSA (美国国家超级计算应用中心) 研究开发,现由非盈利组织 HDF Group 维护。最新的格式是第 5 版,因此就被称为 HDF5。HDF 最初提供了多种数据类型,比如光栅图像和注解等,而在第 5 版中,简化到只支持科学数据集(即同质多维数组)和群组两种类型。

HDF5 官方版本是基于 C/C++ 的,但也像 MATLAB、Java、Python、R 和 Julia 这些语言也有自己版本的 HDF5 API。


作为量化人,我们使用最多的是 h5py。


h5py 的 logo

HDF5 的基本概念

HDF5 使用文件来存储数据。它包含两种对象,即数据集(这是一种类似于数组的数据集合)和群组(类似于文件夹,其下可包含数据集 datasets 和其它群组)。我们可以这样来理解 h5py 中的基本对象:

群组象字典一样工作,而数据集则像 Numpy 数组一样工作。

h5py 的 API 比较基础,用法并不复杂。但作为行情和因子数据库,我们需要自己构建一些功能。下面的代码,将演示我们如何存储行情数据,并实现每日更新:


codes = ["000001.XSHE", "600000.XSHG"]
h5file = "/tmp/bars.h5"
h5 = h5py.File(h5file, "a")

for name in ("1m", "5m", "10m", "30m", "1d"):
    if name not in h5.keys():
        h5.create_group(f"/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

量化风云

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值