Redian新闻
>
干货 | 高频多因子存储的最佳实践

干货 | 高频多因子存储的最佳实践

公众号新闻


量化投资与机器学习微信公众号,是业内垂直于量化投资、对冲基金、Fintech、人工智能、大数据领域的主流自媒体公众号拥有来自公募、私募、券商、期货、银行、保险、高校等行业30W+关注者,荣获2021年度AMMA优秀品牌力、优秀洞察力大奖,连续2年被腾讯云+社区评选为“年度最佳作者”。

因子挖掘是量化交易的基础。随着历史交易数据日益增多,交易市场量化竞赛的不断升级和进化,量化投研团队开始面对数据频率高、因子数量多的场景,以10分钟线10000个因子5000个股票为例,一年的因子数据约为 2.3T 左右,1分钟线的数据量达到23T,3秒线的数据量将达到460T。如此量级的数据就对因子存储方案提出了很高的要求。

高频多因子存储有哪些挑战?

在数据高频次和因子高数量的双重叠加之下,会很容易将数据量推到 T 级,那么高频多因子的存储方案就必须同时面对以下问题:
庞大的数据量
因子计算通常有3个维度,股票、因子和时间。我们做一个简单的计算,国内股票总个数按5000来算;因子个数一般机构大约为1000起,多的甚至有10000;时间频率最高的是每3秒钟生成一次数据,频率低的也有10分钟一次——也就是说,一只股票一个因子一天会生成24到4800条 tick 数据。面对如此庞大的数据量,如何保证高效的数据写入是因子库存储的一大挑战,如果不能支持并充分发挥多块磁盘的 IO,写入耗时将达数小时以上。
最适合金融计算的输出方式
金融行业的数据分析通常需要以面板模式进行。对于读取随机标的(A股市场目前约5000 股票)、随机多个因子(10000个因子中随机取1000个因子)的场景,要能从海量的因子数据中尽可能高速并精准读取数据,减少无效 IO ,并以需要的方式(通常是因子面板模式)将数据读取出来,这对数据库的性能提出了高要求。
灵活变化的因子库
因子库经常会发生变化,往往需要新增因子、修改因子定义,或加入新的股票等。面对 T 级的因子数据,单个因子的新增、修改、删除耗时应该保证在秒级才能确保整体量化投研的效率。
对于以上的每个问题,高频多因子的存储方案除了尽可能每一方面都有良好的表现,更重要的是不能有明显短板,否则在数据操作量级大幅上升后,会大幅度降低因子量化的生产效率。总体来看,高频多因子场景对解决方案提出了以下几点要求:
  • 保证写入高效性;
  • 支持高效、灵活的读取方式,且以最适合金融计算的方式输出;
  • 支持高效的因子库运维(新增因子及因子数据的修改、删除)。
为了使广大用户更方便地实现因子计算和管理,助力更高效的投研和生产,DolphinDB 结合多年服务金融量化机构的经验,已经实现了部分国内常用因子库,并且支持研究和生产一体化。
下文中,将基于高频多因子存储场景,为大家介绍一个基于 DolphinDB 实现的因子库和因子存储方案,对比不同存储模式下的性能。
这里也给大家推荐一下,12月1日(周四)晚7点半,DolphinDB CEO 周小华博士和 DolphinDB 数据分析负责人毛忻玥将在线上开讲,围绕因子库性能对比、高频多因子存储解决方案的优劣势分析展开讨论,并结合实际案例展示高频多因子存储的最佳实践。干货满满!快来报名吧~
长按下方海报识别二维码即可报名参与活

国泰君安 191 Alpha 因子库

国泰君安 191 Alpha 因子库来源于国泰君安2017年6月份公布的研报《基于短周期价量特征的多因子选股体系——数量化专题之九十三》,属于短周期价量因子。为了方便用户计算因子,DolphinDB 实现了所有 191 个因子的函数,并封装在模块 gtja191Alpha 中。
除此之外,DolphinDB 还为大家实现了其他市面常用的因子库,包括 WorldQuant 101 Alpha、TA-Lib、MyTT 等,用户可以直接调用模块,实现因子高效计算。

10分钟级10000个因子存储方案对比

本案例使用9块HDD硬盘进行测试。
因子数据在实际存储时通常会有宽表和单值模型两种选择。
宽表模式数据如下表所示,宽表模式的面板数据通常是计算所需要的,这个模式存储的数据,可以直接供给量化程序计算,但是宽表模式的数据存储在因子新增和因子数据修改场景会耗时比较高。
单值模型一般有4列:时间戳、股票代码、因子编号以及因子值,如下图所示;单值模型的数据在需要面板数据的场景,需要将数据转换成面板模式。
针对以上两种模式的存储,我们设计以下两种存储方案,两种方式均采用 TSDB 引擎进行存储:
方案1-单值模式
按 月 Value 分区 + 因子名 Value 分区 , SortColumn: SecurityID + TradeTime
方案2-宽表模式
按 月 Value 分区 + 股票 Value 分区 , SortColumn: SecurityID + TradeTime
这里我们进行一个月的因子数据的写入、查询、修改、删除来比较这两种高频因子存储模式。
因子写入
宽表模式在数据写入速度上优于单值模式,存储空间上略优于单值模式。需要注意的是,由于此处因子值用的是随机浮点数,几乎没有重复,所以压缩比很低。
因子查询
查询 21 天全市场 5000 只标的的 1000 个因子数据,窄表的查询会将数据转换成与宽表一样的面板数据输出。在机械硬盘情况下宽表模式对一万个因子随机查询1000个因子的初次查询速度慢一些;查询前1000个因子则速度较快。即使比对宽表模式最快情况,窄表模式下经过pivot by转为面板数据后的查询速度也更快一些。
数据运维
因子数据的运维包括新增因子、更新因子、删除因子。
1、新增因子:在新增因子的场景,窄表模式只需要进行 Insert 操作,将新增因子数据写入;而宽表模式需要先进行addColumn 操作,然后更新新增因子列数据,DolphinDB 目前的更新机制是重写。而宽表模式在当前设计下,如果要更新一列因子数据,需要把所有的分区数据全部重写,所以耗时非常长。
2、更新因子:量化投研中,重新计算因子数据是常见的场景。根据窄表模式下的分区规则,对指定因子数据更新时,可以精确定位到因子所在分区,并进行修改,所以耗时在秒级;而宽表模式的更新方式如上节所述原因,耗时非常长。
3、删除因子:删除因子虽然不是必须的,但可以释放存储空间,以及提供其他便利。当前窄表模型的分区方案在删除指定因子时耗时在秒级 , TSDB 引擎下的宽表模式目前不支持删除因子列。
通过一个月的数据对比,我们发现:
  • 十分钟级一万个因子数据场景下,宽表模式的因子写入速度高于单值模型。
  • 因子数据查询方面,单值模式优于宽表模式。
  • 因子数据运维方面(包含新增因子、更新和删除因子),单值模式的效率远远优于宽表模式。
综合考虑,在高频多因子的场景下,合理设计存储方案的单值模式是最好的解决方案。
直播中,我们将进一步为大家介绍更丰富的因子库,并使用更贴近实际用户生产环境的硬件配置和数据量来进行测试,以提供可以参考的性能基准。
长按识别二维码,或点击阅读原文,均可报名参与活动!

微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
Kubernetes上千规模Pod最佳实践Java对象拷贝原理剖析及最佳实践主人六年帮狗子存下几万现金,十分自豪:这是它的养老金!阿里云块存储团队软件工程实践你不知道,美联储的利率有多复杂!​长大后还“跟妈亲”的孩子,大多因妈妈做对了3件事C++ 类设计和实现的十大最佳实践京东位列2022新型实体企业100强第二,创造供应链数实融合最佳实践BP三星/英特尔存储2T SSD 749元;UT长江存储2T SSD 999元毕业十年后参加同学会,才明白人与人的差距,多因为这几点直播预告:动力电池的冰与火之歌,最佳实践方向在哪里?我的诗与远方70%选民不想要拜登竞选连任 大多因为同一个理由AI 应用的全流程存储加速方案技术解析和实践分享EB级大规模存储的数据面设计与思考为业务场景打造技术矩阵,网易智企畅谈融合通信与 AI 商业化最佳实践 | Q推荐急寻!“黑五”南加州高速路,华女重大车祸死亡,2岁娃重伤!知情者请通知她国内家人!这款车子存隐患...哈德森河边的一群中国老人阿拉斯加九月游Python 项目工程化最佳实践指南2022金字招牌最佳实践典范美联储的十字路口美联储前主席伯南克:美联储的过去和未来妹子存钱买房 房契无“1毛没出”切糕渣老公名字被大骂 软饭王还有理了?长大后还“跟妈亲”的孩子,大多因妈妈做对了3件事Kubernetes是如何实现数据持久化存储的?设计模式最佳实践探索—策略模式在美国242.友爱的左邻右舍及变迁拒加班遭开除者吐槽再罚万元/ 清华连续五年亚洲第一/ 首个可编程光学量子存储器问世...今日更多新鲜事在此一文学会 ByteHouse 搭建数仓最佳实践日本野人字节跳动基于Iceberg的海量特征存储实践马云不再担任蚂蚁集团实控人,暴雪已准备好电子存档,罗永浩回应投资人,特斯拉降价后出现激烈维权,这就是今天的其他大新闻!45分钟豪掷450亿美元,沙特王储的投资游戏绿研院日报 | 新奥股份获“ESG年度最佳实践上市公司”
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。