原创文章第180篇,专注“个人成长与财富自由、世界运作的逻辑,AI量化投资"。 今天的任务之一,要完成hdf5的增量更新。 01 HDF5的子集操作 大家如果熟悉我们之前的思路,知道我们后端使用mongo来存储金融数据。其实很多小私募投资公司就是这么做的。日频的数据,其实用mysql都行,而mongo的门槛最低。 有了mongo为何还需要hdf5? mongo用于数据持久化,而hdf5用于支撑回测。尤其是针对全市场的海量选股,选基的场景,需要把全市场数据下载到本地,然后再进行因子计算,需要消耗无谓的时间。因此把数据在hdf5里做好预计算,就像机器学习的数据集一样,不需要频繁的更新。可以把因子计算好后,载入内存,以供回测或者模型训练之用。 hdf5单次写入dataframe特别简单,还要解决“增量更新”,“meta信息”两个点。 hdf5是美国超算中心开发的用于存储科学数据的自描述文件格式,与简单的二进制格式文件存储的最大区别是hdf5带有meta数据,这些元数据给出了数据的特征信息。hdf5有广泛的应用,matlab的.mat文件就是以hdf5作为保存文件的默认格式。另外hdf5支持子集分片和部分IO,就是说可以像数据库一样进行查询,返回部分数据,不需要像csv一样,把数据整体读到内存才能访问。 hdf5写入的时间,需要指定format=table,默认是fix,fix只能整体读写,优点是快,而table格式是可以支持查询子集,更加灵活。 df.to_hdf('test.h5', 'test', format='table') 全市场hdf5的数据集用table格式,可以增量更新,而合成一个all大数据集后,使用fix提升加载速度。 当然从回测的角度而言,日频数据的重建代价也不算特别大,就算每天更新一次,交给定时任务也能很好的完成。 02 基于jquery的table 我们计算好每天的因子指标,需要使用一个表格把它结构化地呈现出来。需要支持按某几个维度进行排序,同时还能支持检索,分页等等。 一个简单的交易如下,这个适合于可转债列表,ETF列表,股票列表,指数列表等等,多因子多维度排序,呈现数据。
@api.get('bonds') 前端代码如下: <script src="{% static 'DataTables-1.13.1/js/jquery.dataTables.min.js' %}"></script> |
|