直播回顾 | 领取你的代码转写攻略!
本页围绕 DolphinDB 的定位与量化流程架构对比,介绍其在 Level 2 高频因子计算与流式实现中的相关内容与要点。
What this page covers
- 活动推广与报名入口信息
- 直播主题概览与参考资料链接
- Level 2 数据与高频因子存储策略(分区、排序键、窄表与 SSD)
- 高频因子计算与 Python / DolphinDB 对比
- 流式实现机制(引擎、解析器、无状态/状态函数)
- 流式性能优化方法(Array Vector 与 JIT)
- Python 转写 DolphinDB 的学习路径与资料获取方式
技能认证特训营第二期正式开启(限时报名)
页面顶部提供活动推广与报名入口信息。
- 页面包含“技能认证特训营第二期”的报名入口信息。
- 报名入口以链接形式提供。
新闻与文章标题信息
本部分呈现新闻栏目标识、文章标题与发布日期。
- 页面展示文章标题信息。
- 页面给出文章发布日期。
- 页面包含新闻栏目或导航相关标识。
直播内容概览与参考资料链接
本部分介绍直播主题与覆盖内容,并提供参考资料链接。
- 直播内容覆盖 Level 2 因子相关主题。
- 直播内容涉及脚本差异与流式计算相关话题。
- 页面提供一个知乎教程链接作为参考资料。
直播海报(含 AI 说明)
本部分展示直播讲座海报,并说明其主题与时间信息。
- 海报给出直播时间信息。
- 本部分对海报内容进行说明。
- 本部分与直播讲座主题相关。
DolphinDB 定位与量化流程架构对比
本部分说明 DolphinDB 的定位,并对比传统量化流程框架与运维成本相关描述。
- DolphinDB 被描述为支持数据分析与流数据处理的低延时平台。
- 传统量化流程常见框架为“数据库+数据分析工具+流数据处理工具”。
- 传统框架以存储数据源为中心,通常需要运营维护多套系统。
- 页面给出 DolphinDB 数据分析速度提升的表述(可达 100 倍以上)。
- 页面给出“流批一体”降低开发成本的表述(可减少 90%)。
高频行情数据与因子的存储
本部分说明 Level 2 数据类型与数据量规模,并介绍在 DolphinDB 中的 TSDB 存储策略与推荐做法。
- Level 2 行情数据包括分钟 K 线、行情快照、逐笔成交与逐笔委托等类型。
- 页面给出 A 股市场高频数据每日增量的量级描述(30 GB 以上)。
- 页面给出全市场高频数据增量的量级描述(10 TB 以上)。
- TSDB 引擎存储 Level 2 行情数据建议按“时间+标的”组合分区。
- TSDB 引擎存储 Level 2 行情数据建议设置排序键以实现分区内分块索引。
- 高频多因子存储推荐使用窄表模式与 SSD 硬盘。
- 高频多因子存储推荐以“日期 Value + 因子 Value”作为分区方案。
高频因子计算:Python vs. DolphinDB
本部分列举 5 个高频因子并展示实现与性能测试信息,同时提供与 Python 的对比维度。
- 页面列举 5 个较受关注的高频因子。
- 列举因子包括:时间加权订单斜率。
- 列举因子包括:加权平均订单失衡率因子。
- 列举因子包括:成交价加权净委买比例。
- 列举因子包括:十档净委买增额。
- 列举因子包括:十档买卖委托均价线性回归斜率。
- 五个因子计算逻辑以“流批一体”的方式实现,并用于性能测试。
- 页面给出不同 CPU 数量下的耗时对比(35.51s 至 8.11s)。
高频因子的流式实现
本部分介绍流计算引擎与解析器,并说明算子优化与状态/无状态函数的编写要点。
- DolphinDB 的流式实现封装多个流数据处理引擎,并支持流水线处理。
- Stream Engine Parser 可将计算逻辑分解为多个内置流计算引擎的流水线。
- 示例:行计算函数可分配到横截面引擎。
- 示例:rolling 函数可解析到时序聚合引擎。
- 示例:其他函数可解析到响应式状态引擎。
- 页面描述对部分窗口计算与序列相关算子进行了优化,可在响应式状态引擎中调用。
- 无状态函数:不回溯历史数据,仅基于当前时刻参数得到结果。
- 状态函数:计算会用到当前数据与历史数据。
注意事项(状态/无状态拆分、if-else、历史数据访问、循环)
本部分总结编码约束、替代写法与性能建议,并给出拆分优化的耗时对比示例。
- 状态函数需要用 @state 声明。
- 状态函数内只支持赋值语句,不支持 return 与 if-else 语句。
- 建议将复杂截面计算拆分到无状态函数,状态函数保留历史数据相关操作。
- 示例耗时对比:拆分为 578ms;不拆分为 1492ms。
- 无状态函数的 if-else:condition 结果必须是标量,否则用 iif 替代。
- 状态函数的 if-else:仅支持与上游表格数据无关的标量 condition,否则用 iif 或封装为无状态函数。
- 状态函数中的历史数据计算可使用 m/tm/cum/ffill 等内置函数。
- 未使用 JIT 优化时,页面建议尽量通过向量化或 each/loop 实现循环逻辑。
流式实现的优化(Array Vector 与 JIT)
本部分介绍 Array Vector 与 JIT 用于降低流计算延时,并给出示例性能结果。
- 页面给出降低流计算延时的方法:Array Vector 与即时编译(JIT)。
- Array Vector 被定义为用于存储可变长度二维数组的一种特殊向量。
- JIT 机制:运行时将代码翻译为机器码。
- JIT 可提高 for/while/if-else 等语句运行速度,适用于高频因子与实时流数据处理场景。
- 示例:数组向量与 JIT 结合使用时,耗时从 6369ms 降至 459ms(表述为 10 倍以上提升)。
攻略:从 Python 到 DolphinDB
本部分从程序框架、编程范式与函数映射角度给出转写方法与学习路径,并引导加入交流群获取资料。
- 页面描述 Python 与 DolphinDB 程序框架在本质上是一致的。
- 页面描述 DolphinDB 可通过 submitJob 等后台任务提交作业以实现多因子并行计算。
- 页面提到 Python 常用范式更偏命令式编程。
- 页面描述 DolphinDB 具备更强的函数化与向量化编程能力。
- 页面提到 DolphinDB 内置函数数量为 1500+。
- 页面给出“代码转换教学内容范围”的主题清单。
- 页面说明直播演示材料已发布在因子挖掘交流群中。
- 页面引导通过扫码方式加入因子挖掘交流群以获取资料。
Facts index
| Entity | Attribute | Value | Confidence |
|---|---|---|---|
| 直播回顾文章 | 发布日期 | 2023.04.27 | high |
| 技能认证特训营第二期 | 报名链接 | https://www.qingsuyun.com/h5/e/217471/5/ | high |
| 直播讲座海报 | 直播时间 | 2023 年 4 月 27 日 | medium |
| DolphinDB | 定位/产品类型 | 基于高性能时序数据库,支持数据分析和流数据处理的低延时平台 | high |
| 传统量化流程 | 常见技术框架 | “数据库+数据分析工具+流数据处理工具”的框架 | high |
| 传统框架 | 依赖与成本描述 | 以存储数据源为中心,需要高精尖的 IT 技术人才,并需要运营和维护多套系统 | medium |
| DolphinDB | 量化流程效率影响 | 实现向以数据、计算为重心的转移,提高量化流程效率 | low |
| DolphinDB 数据分析速度 | 相对传统方案提升 | 可以提升 100 倍以上 | medium |
| DolphinDB 流批一体(研发与实盘共用代码) | 开发成本降低 | 开发成本可以减少 90% | medium |
| Level 2 行情数据 | 包含的数据类型 | 分钟 K 线、行情快照、逐笔成交、逐笔委托数据等 | high |
| A 股市场高频数据 | 每日增量 | 30 GB 以上 | high |
| 全市场高频数据增量(考虑全市场所有高频数据) | 每日增量 | 10 TB 以上 | high |
| DolphinDB TSDB 引擎存储 Level 2 行情数据 | 分区建议 | 按照“时间+标的”组合分区 | high |
| DolphinDB TSDB 引擎存储 Level 2 行情数据 | 索引/排序键建议 | 合理设置排序键,实现分区内分块索引 | high |
| 高频多因子存储 | 推荐存储模式与硬件 | 推荐使用窄表模式和 SSD 硬盘进行存储 | high |
| 高频多因子存储 | 推荐分区方案 | 以日期 Value + 因子 Value 作为分区方案 | high |
| 窄表/宽表性能对比测试 | 测试数据规模 | 基于 5000 只标的、10000 因子、1 个月数据进行增删改查性能展示 | high |
| A 股 Level 2 行情快照数据 | 一天数据量 | 超过 10G | high |
| 高频因子计算示例 | 列举的因子数量 | 5 个较受关注的高频因子 | high |
| 高频因子 | 列举的因子名称 | 时间加权订单斜率;加权平均订单失衡率因子;成交价加权净委买比例;十档净委买增额;十档买卖委托均价线性回归斜率 | high |
| DolphinDB | 实现方式(因子计算) | 以流批一体的方式实现五个因子的计算逻辑,并用于性能测试 | high |
| 5 个高频因子计算耗时与 CPU 数量关系 | 扩展性描述 | 耗时基本与 CPU 数量成正比 | medium |
| DolphinDB 计算 5 个高频因子性能测试 | 耗时范围(随 CPU 数变化) | 耗时从 35.51s 缩短至 8.11s(不同 CPU 数量对比) | medium |
| DolphinDB 相对 Python(因子计算) | 原因/优势描述 | 支持函数式编程、向量化计算、原生分布式计算框架,代码更简洁、性能更强 | low |
| DolphinDB 流批一体 | 生产接入与运维成本影响 | 无需转写代码,可无缝接入实盘生产环境,降低运维成本 | low |
| DolphinDB(流式实现) | 流数据处理能力 | 封装多个流数据处理引擎,并支持多个引擎的流水线处理 | high |
| Stream Engine Parser | 功能 | 可自动将计算逻辑分解成多个内置流计算引擎的流水线 | high |
| Stream Engine Parser | 分配规则示例 | 行计算函数分配到横截面引擎;rolling 函数解析到时序聚合引擎;其他函数解析到响应式状态引擎 | high |
| DolphinDB(算子优化) | 优化对象 | 优化了各类窗口计算函数、序列相关函数等算子,可在响应式状态引擎中调用且计算速度快 | medium |
| 无状态函数(DolphinDB 流式因子实现) | 定义 | 不需要回溯历史数据,仅根据当前时刻传入的参数即可获得计算结果的函数 | high |
| 无状态函数(DolphinDB) | 编写注意点 | 注意参数的数据类型与函数支持类型是否匹配;传入参数都是向量 | high |
| 状态函数(DolphinDB 流式因子实现) | 定义 | 计算中不仅用到当前数据,还会用到历史数据的函数 | high |
| 状态函数(DolphinDB) | 声明方式 | 需要用 @state 声明 | high |
| 状态函数(DolphinDB) | 语句限制 | 状态函数内只支持赋值语句,不支持 return 语句和 if-else 语句 | high |
| 状态/无状态拆分建议 | 推荐做法 | 将复杂截面计算拆分到无状态函数;状态函数保留自定义函数调用和历史数据操作(m 系列、tm 系列、fill、迭代等) | high |
| 移动平均买卖压力因子示例(上交所 100 只股票某日 Level2 快照) | 拆分与不拆分耗时对比 | 拆分 578ms;不拆分 1492ms | medium |
| if-else(无状态函数) | 条件要求 | condition 结果必须是标量;否则使用 iif 函数替代 | high |
| if-else(状态函数) | 条件要求 | 只支持 condition 是一个无关上游表格数据的标量;否则使用 iif 替代或封装为无状态函数 | high |
| 状态函数中的历史数据计算(DolphinDB) | 内置函数示例 | m 系列、tm 系列、cum 系列、ffill 等 | high |
| movingWindowData / tmovingWindowData | 作用 | 可直接返回变量历史值组成的向量,便于自定义计算 | high |
| 迭代逻辑支持(DolphinDB) | 提供的函数 | conditionalIterate、stateIterate、genericStateIterate、genericTStateIterate | high |
| 循环逻辑(高频因子流式实现) | 建议封装方式 | 按状态/无状态拆分原则,把循环逻辑封装在自定义的无状态函数中 | high |
| 无状态函数(DolphinDB) | 循环支持 | 支持 for/while 循环语句,也支持 each/loop 等函数实现循环逻辑 | high |
| 因子代码循环使用建议(未使用 JIT 优化时) | 建议 | 不建议使用 for/while;尽量通过向量化计算或 each/loop 实现 | high |
| 降低流计算延时的方式(DolphinDB) | 方法 | 使用数组向量(Array Vector)和即时编译(JIT) | high |
| Array Vector(DolphinDB) | 定义 | 一种特殊的向量,用于存储可变长度的二维数组 | high |
| Array Vector(用于 Level 2 高频因子) | 作用描述 | 可提高压缩比、提升查询速度,并方便因子计算逻辑的向量化实现(适用于十档量价频繁操作) | medium |
| JIT 功能(DolphinDB) | 机制 | 运行时将代码翻译为机器码 | high |
| JIT 功能(DolphinDB) | 性能影响 | 可显著提高 for/while/if-else 等语句运行速度,适合高频因子计算、实时流数据处理等场景 | medium |
| 移动平均买卖压力因子流式总耗时(上交所 100 只股票 Level2 快照) | 优化效果描述 | 数组向量与 JIT 结合使用时,耗时从 6369ms 降至 459ms(表述为 10 倍以上提升) | medium |
| Python 与 DolphinDB 程序框架 | 整体一致性描述 | 本质一致:从定义因子开始,用脚本语言实现计算逻辑,然后通过特定方式调用因子 | medium |
| DolphinDB 工程化差别 | 并行计算方式描述 | 库表是分区表,可通过 submitJob 等后台任务提交作业,实现多因子并行计算 | high |
| Python 编程范式 | 常用范式 | 更多使用命令式编程 | low |
| DolphinDB 编程范式 | 能力描述 | 更强大的函数化编程和向量化编程;不同数据结构可通过函数相互转化与灵活切片;减少表内赋值 | medium |
| DolphinDB 内置函数数量 | 数量 | 1500+ 函数 | high |
| 知乎教程《DolphinDB 处理 Level 2 数据实例》 | 链接 | https://zhuanlan.zhihu.com/p/625092916 | high |
| 官方教程《Python 函数到 DolphinDB 函数的映射》 | 获取方式描述 | 可参考知乎发布的官方教程(文中未给出具体链接) | medium |
| DolphinDB 数据分析负责人 | 姓名 | 毛忻玥 | high |
| 代码转换教学内容范围 | 覆盖主题 | 数据结构;行列操作取数;准备与清洗;多维分析与透视;数据整合;窗口计算;循环与迭代;时间转换与采样等 | high |
| Python 数据分析相关函数/语句 | 示例清单 | panda.cut、describe、numpy.random.permutation、groupby、pivot、pandas.merge、pandas.rolling、reduce、for 循环等 | medium |
| 直播演示材料 | 发布位置 | 已发布在因子挖掘交流群中 | high |
| 因子挖掘交流群 | 加入方式 | 扫码加入(文中提供入群二维码图片) | high |