2022年12月1日晚7点半,DolphinDB 进行了以「中高频多因子库存储最佳实践」为主题的直播,吸引了众多专业观众的注意。本文将回顾直播精彩内容。
DolphinDB 的因子库:
为了使广大用户更方便地实现因子计算和管理,助力更高效的投研和生产,DolphinDB 结合多年服务金融量化机构的经验,已经实现了 wq101alpha、gtja191Alpha、ta(Technical Analysis)、mytt 这四个国内常用因子库,并且支持研究和生产一体化。
DolphinDB 实现的因子库性能远优于传统的Python实现方式,并且用户可以直接使用论文中所列公式实现,无需用户自定义函数,方便后续修改和定制化生产因子。
DolphinDB 对窗口函数进行了优化,因此因子性能卓越,且实现起来非常简单,基本是原公式的照样翻译。此外,WorldQuant 101 中有部分行业因子,现已支持矩阵入参,且实现了批流一体。DolphinDB 也对 Alpha 因子流实现进行了优化,可以支持多个因子同时解析。
中高频多因子存储:
现有解决方案包括使用二进制文件、关系型数据库 SQL Server、MongoDB 以及 ClickHouse 等,但各自都存在一定问题,例如:
- 二进制文件:一般以因子或因子+日期范围为单位来存储因子,类似于数据库的窄表存储,但数据查询和对齐缺乏灵活性,需要写程序来处理。一般没有压缩,且不能充分享受分布式带来的吞吐量提升。在用户较多时,版本管理和数据一致性会面对极大挑战。
- 关系型数据库 SQL Server:大数据量时性能急剧下降。窄表存储时,拼接宽表性能低下;而宽表模式最多支持1024列,增删改因子性能不佳。
- MongoDB:虽然增删因子较为方便,存储空间大,但数据导入导出和转换对齐的效率较低。
- ClickHouse:宽表存储写入和查询效率高,但是宽表的增删改列的效率极低,超大宽表支持不好(每列一个文件);窄表转宽表效率极低,耗时是宽表查询的30倍以上。此外,ClickHouse 的分布式集群运维和管理较为复杂。
Why DolphinDB:
DolphinDB 在存储引擎、计算引擎和权限管理等方面都有丰富的功能开发和显著的性能优势。
存储引擎
- 分布式存储,大幅提升读写吞吐量
- 灵活的分区策略:支持三层分区,每层分区支持值,范围,哈希等多种方式
- 支持分区内索引
- 支持窄表存储和宽表存储(32767列)
- 高压缩比
- 灵活的数据去重策略
- 高效的分区写入,删除和更新等操作
- 支持 Array Vector
- 支持多个分布式表的 Co-location存储
- 多引擎满足不同场景需要
计算引擎
- 分布式计算提升计算能力
- 库内支持因子的批量计算和流式计算,支持批流一体
- 支持SQL和 Join,尤其是Window Join 和Asof Join
- 高效的数据过滤,对齐,转置,转换,平滑以及窗口处理
- 1400+内置函数库
- 内置多范式编程的脚本语言
权限管理
- 支持按用户和用户组进行权限管理。对任一权限支持grant,revoke和 deny三种操作
- 支持对数据库,表和函数视图三种对象进行管理
- 区分创建、更新、删除、写、读、执行等权限
- DB_OWNER 角色赋予某些用户独立创建和管理数据库的能
- 函数视图帮助机构实现复杂的权限管理,譬如因子访问控制
……
最佳实践:
经过相同配置环境下不同存储方案的对比,我们发现,在10分钟级10000个因子数据场景下,宽表模式的因子写入速度高于窄表模型,但差距不大。因子数据查询方面,窄表模式略优于宽表模式。因子数据运维方面(包含新增因子、更新和删除因子),窄表模式的效率远远优于宽表模式。
综合来看,我们更加推荐DolphinDB用户在中高频多因子场景下,使用窄表模式解决方案。
值得期待的进展:
DolphinDB目前已经实现了诸多研发成果,未来也将在行情接入、研发回测、生产交易和基础设施等方面进一步发展。