DolphinDB 在深度学习中的应用:股票实时波动率预测

本文介绍量化金融中深度学习落地的常见难点,并给出以 DolphinDB、AI DataLoader 与 Libtorch 插件串联的端到端流程示例,覆盖因子存储与计算、Python 侧训练、DolphinDB 侧实时推理等环节。

Source: https://dolphindb.cn/blogs/161

What this page covers

技能认证特训营第二期正式开启(限时报名) navigation

页面顶部包含限时报名的推广信息,并提供注册入口与权益提示。

DolphinDB 在深度学习中的应用:股票实时波动率预测 hero

文章头部展示标题、作者信息与发布日期。

背景与挑战、DolphinDB 方案概览 value_proposition

该部分讨论深度学习在量化金融的工程落地难点,并将 DolphinDB 与 AI DataLoader、Libtorch 插件组合描述为一体化实现路径,同时说明教程范围与示例代码/环境注意事项。

1. 概述 product_overview

该部分从算法交易工作流阶段出发,提出需要对比常见技术栈与 DolphinDB 一站式方法的动机。

1.1 现有解决方案的优缺点 comparison

该部分介绍研究与实时因子常见方案,并指出在并行性、扩展性、高可用、开发与运维成本等方面的限制。

1.2 DolphinDB 解决方案 how_it_works

该部分给出三阶段端到端流程:历史数据存储与离线因子计算、Python 侧训练数据加载与训练、以及在 DolphinDB 内结合流计算与 Libtorch 插件进行实时推理,并支持下游订阅。

2. 特征因子计算与存储 how_it_works

该部分说明特征工程设置:基于 Level 2 快照数据构建 10 分钟频率的衍生特征(共 676 列),并持久化以支持模型训练,同时描述数据规模与样例数据范围。

2.1 特征因子计算 feature_list

该部分描述因子构建:使用 10 档盘口量价信息,并将 10 分钟窗口切分为多段进行聚合,得到 676 维特征;同时给出基于 DolphinDB 元编程的因子生成方式与性能对比表述。

2.2 特征因子存储 how_it_works

该部分推荐因子库采用窄表存储,并给出 TSDB 引擎下的分区与排序策略示例。

3. 模型开发与训练 how_it_works

该部分描述在 Python 中用 AI DataLoader 从 DolphinDB 加载因子并训练 PyTorch 模型,以预测未来 10 分钟波动率,并给出目标变量名称。

3.1 AI Dataloader 加载训练数据 how_it_works

该部分说明 Python 依赖安装、数据预处理与训练/测试拆分,并展示 DDBDataLoader 的窗口化参数配置以生成时序张量。

3.2 模型搭建 how_it_works

该部分给出用于波动率时序预测的 LSTM 模型选择与相关结构定义。

3.3 模型训练 how_it_works

该部分展示使用 AI DataLoader 输出进行训练,并将模型以 TorchScript 格式保存以便服务端推理使用。

3.4 训练性能 trust_signal

该部分给出训练实验设置与耗时等信息,包括数据规模、特征维度、模型结构示例与训练设备说明。

4. 实时计算与预测 how_it_works

该部分描述将批处理逻辑迁移到流处理:将快照数据回放注入流表、实时计算因子、实时推理,并记录输出结果。

4.1 流式实时因子计算 how_it_works

该部分说明流批一体实现:复用同一套因子函数,在历史计算中走 SQL 引擎,在流式计算中走聚合引擎,并用时序聚合引擎持续产出 10 分钟因子。

4.2 使用 Libtorch 插件进行实时模型推理 how_it_works

该部分讲解在 DolphinDB 中加载 Libtorch 插件并进行实时推理:选择 CPU/GPU 插件、加载 TorchScript 模型、设置设备、从实时因子流取数并完成预处理与推理、将预测写入结果流表,并说明列顺序一致性、历史窗口与预热等注意点。

4.3 通过 PythonAPI 实时订阅预测结果 how_it_works

该部分展示通过 DolphinDB Python API 订阅实时预测结果流表,并对到达的数据进行处理的示例方式。

4.4 实时预测性能 trust_signal

该部分通过时间戳埋点拆分因子计算与模型推理延迟,并给出 100 倍速回放条件下的统计结果与脚本。

5. 总结 misc

该部分总结 DolphinDB 可支撑从因子计算到训练与实时推理的端到端流程,并强调该流程可根据需求调整扩展。

附录 legal

附录列出开发环境规格,并提供相关脚本与样例数据文件链接。

Facts index

Entity Attribute Value Confidence
文章发布日期2025-03-20high
DolphinDB定位/类型分布式计算、存储及实时流计算一体化的高性能时序数据库medium
本文示例场景案例主题股票实时波动率预测high
深度学习在量化金融落地难点列举的难点大规模因子存储和计算;因子实时流式计算;因子数据与深度学习模型集成工程化high
DolphinDB与深度学习框架的结合方式推出 AI DataLoader 和 Libtorch 插件等工具,以便与 PyTorch、TensorFlow 等深度学习框架紧密结合medium
本文内容范围包含的解决方案环节高频因子存储与计算;在 Python 中使用 AI DataLoader 加载因子完成训练;在 DolphinDB 中使用 Libtorch 插件完成实时推理high
本文预测模型与结果适用性声明重点在操作流程介绍,不提供最佳模型;模型与结果仅供参考high
本文代码运行环境CPU/GPU 兼容性说明示例使用 GPU 版本的 DolphinDB 与 GPU 版 LibTorch 插件,但也可用 CPU 版本运行本文代码high
算法研究阶段常用方案技术栈示例NAS 文件存储 + HDFS 大数据存储集群 + Pythonhigh
Python (GIL)并行计算限制受 Global Interpreter Lock 限制,无法进行并行计算medium
NAS/HDFS + Python 方案在高频数据存取下的不足容量可扩展性、性能和高可用逐渐难以满足不断增长的数据量与计算需求,且需要大量二次开发与持续运维成本medium
python 实时计算增量计算能力仅支持全量计算,不支持增量计算,难以满足实时计算性能要求medium
研究代码用 C++ 复现的生产方案代价需要维护两套代码,开发成本(时间和人力)大幅增加,并需精力确保结果一致high
DolphinDB 一站式解决方案阶段1:历史数据与离线计算在 DolphinDB 分布式数据库中存储海量历史行情数据并进行大批量因子计算high
DolphinDB 一站式解决方案阶段2:训练数据加载与训练在 Python 中使用 AI DataLoader 读取因子并转换为深度学习框架可识别的 Tensor,用于模型训练high
DolphinDB 一站式解决方案阶段3:实时推理与流计算训练得到的模型可被 Libtorch 插件识别,在 DolphinDB 中完成推理;结合流数据表和流计算引擎得到实时因子表与实时预测结果表high
实时预测结果表下游对接方式可被 Python 等策略程序订阅进行信号加工等后续操作high
特征构建输入数据数据来源与采样间隔使用股票 Level 2 快照数据,每幅快照间隔时间为 3 秒high
衍生特征频率10 分钟high
衍生特征计算特征列数676 列衍生特征high
快照测试数据(已导入数据库)数据量约 17 亿条(2021 年某交易所所有股票快照测试数据)medium
附录提供的样例快照数据范围一支股票一个月的快照数据(Snapshot 文件)high
附录数据与训练数据差异说明模型训练使用全年数据;附录因大小限制仅提供一个月数据high
因子计算使用的盘口档位数据基于 Level 2 快照行情数据中的 10 档买卖单量价数据high
特征时间窗口切分切分段将 10 分钟特征切分为 0-600s、150-600s、300-600s、450-600s 四段high
特征维度聚合特征维度676 维聚合特征high
因子生成方式代码量676 个因子由元编程动态生成,代码量不超过 70 行high
性能对比(因子计算)性能提升倍数与多个 Python Pandas 进程并行计算相比,相同并行度的 DolphinDB 分布式计算约 30 倍性能提升medium
因子存储模式推荐推荐使用窄表存储因子库(相对宽表更高效地添加/更新/删除因子)medium
本例因子库分区方式组合分区时间维度按月 + 因子名 的组合分区high
本例因子库存储引擎引擎TSDBhigh
本例因子库排序列排序列股票代码 + 交易时间high
预测目标变量目标列LogReturn0_realizedVolatilityhigh
AI DataLoader / DDBDataLoader作用将训练数据转换为 PyTorch 等深度学习框架可识别的 tensor,并将 SQL 查询拆分以减少客户端内存占用medium
Python 依赖安装pip 包pip install dolphindb;pip install dolphindb-toolshigh
DolphinDB 连接信息(示例)host/port/user/password192.168.100.201:8848,admin/123456high
训练数据日期范围(示例)范围2021.01.01-2021.12.31high
训练/测试集划分(示例)比例与方法按日期 8:2 划分训练集与测试集high
训练数据选取(示例)股票代码SecurityID=`600030high
窄表转宽表方法使用 pivot by 语句将窄表因子转为宽表以便在 Python 端转 tensorhigh
DDBDataLoader 参数(示例)batchSize256high
DDBDataLoader 参数(示例)windowSize[120, 1](输入窗口 120 个时间点,目标窗口 1 个时间点)high
DDBDataLoader 参数(示例)windowStride[1, 1]high
DDBDataLoader 参数(示例)offset120(目标相对输入偏移 120 个时间点)high
DDBDataLoader 参数(示例)excludedColumnsSecurityID, DateTime, LogReturn0_realizedVolatilityhigh
模型类型选择使用的模型LSTM(用于波动率的时序预测)high
模型结构(示例)层数与隐藏单元3 层 LSTM:隐藏单元 256、128、32;输出层全连接输出维度 1high
Dropout 设置(示例)各层 dropoutLSTM1: 0.4;LSTM2: 0.3;LSTM3: 0.1high
模型保存格式格式TorchScript(torch.jit.script 后保存为 .pt)high
训练耗时(示例)训练 100 轮总耗时72 秒(基于一支股票一年的 10 分钟因子数据)medium
训练数据集规模(示例)行数5832 行(一年 10 分钟频率数据)high
特征与维度(训练示例)特征数量与输入/目标维度676 个因子(输入维度 675,目标维度 1)high
训练超参数(示例)损失函数SmoothL1Losshigh
训练超参数(示例)优化器与初始学习率Adam,初始学习率 0.0001high
训练超参数(示例)训练轮数100 轮high
训练设备(示例)设备类型NVIDIA GPU(具体型号见附录)medium
实时测试数据回放回放倍速以 100 倍速回放一只股票一天的快照数据high
流批一体方式(本例)实现思路复用相同因子函数:历史计算代入 SQL 引擎,流式计算代入聚合引擎high
时序聚合引擎参数(示例)windowSize/stepwindowSize=600000ms,step=600000ms(10 分钟)high
实时因子表(示例)输出特征数量创建流表包含 676 个 DOUBLE 特征列(take(`DOUBLE, 676))high
Libtorch 插件CPU/GPU 插件名CPU 版本插件名 'Libtorch',GPU 版本插件名 'GpuLibtorch',且两者不能同时加载high
本例推理插件选择原因与选择DolphinDB server 为 GPU 版本(Shark),因此加载 GpuLibtorch 插件high
模型推理设备设置(示例)deviceLibtorch::setDevice(model, "CUDA")high
实时预测结果表(示例)字段Predicted, SecurityID, DateTime, ReceiveTime, HandleTime, PredictedTimehigh
实时推理历史窗口(示例)历史数据范围取当天往前 20 日的十分钟因子作为历史数据(用于 120 点窗口)high
实时推理窗口(示例)窗口大小含义window=120:用 120 个时间点的因子预测下一个时间点的波动率high
因子列顺序一致性约束需要保证 676 维特征顺序与 Python 训练时一致,使用 reorderColumns! 调整顺序high
模型预热(示例)目的实时预测前先调用一次模型以避免第一次推理耗时较大(CUDA 初始化/预热等)medium
Python 订阅流表前置操作s.enableStreaming() 后使用 s.subscribe 订阅 result10minhigh
Python 订阅参数(示例)tableName/actionNametableName="result10min",actionName="result10min"high
实时延迟统计方法因子计算时延定义在注入引擎时打 ReceiveTime,计算结束打 HandleTime;差值为因子计算耗时high
实时延迟统计方法模型推理时延定义推理结束打 PredictedTime;PredictedTime-HandleTime 为推理耗时high
单次响应总时延(示例)平均总时延约 9.8 毫秒(100 倍速回放一天快照,单股票,LSTM 实时预测)medium
因子计算时延(示例)平均/95分位/最小/最大平均 2ms;95分位 2ms;最小 2ms;最大 2mshigh
模型推理时延(示例)平均/95分位/最小/最大平均 7.5ms;95分位 8.7ms;最小 7ms;最大 12mshigh
总时延(示例)平均/95分位/最小/最大平均 9.8ms;95分位 10.7ms;最小 9ms;最大 14mshigh
开发环境 CPU型号AMD EPYC 7513 32-Core Processor @ 2.60GHzhigh
开发环境逻辑 CPU 总数数量128high
开发环境 GPU型号NVIDIA A800 80GB PCIehigh
开发环境磁盘配置NVMe * 1块high
开发环境 CUDA版本12.4high
开发环境 OS版本64 位 CentOS Linux 7 (Core)high
DolphinDB 版本(开发环境)版本号3.00.2.3 2024.11.04 LINUX_ABI x86_64 shark版本high
DolphinDB Python API 版本(开发环境)版本号3.0.2.3high
Python 版本(开发环境)版本号3.12.9high
脚本资源链接snapshot 建库建表与文件导入snapshotDB.dos(docs.dolphindb.cn 链接)high
脚本资源链接特征因子计算与存储脚本FeatureEngineering.dos(docs.dolphindb.cn 链接)high
脚本资源链接模型训练脚本LSTMmodel.py(docs.dolphindb.cn 链接)high
脚本资源链接模型实时推理脚本StreamComputing.dos(docs.dolphindb.cn 链接)high
数据资源链接Level 2 快照数据样例Snapshot.csv(docs.dolphindb.cn 链接)high