使用 WindTDF 插件获取实时行情的最佳实践
本页介绍金融实时行情接入的常见成本点,并说明通过 DolphinDB WindTDF 行情插件简化接入的动机与价值主张。
What this page covers
- 金融实时行情接入的背景与痛点
- WindTDF 插件概述与支持数据范围
- 示例方案的端到端数据链路与架构
- 接入实现步骤(安装、建表、订阅)
- 运行状态监控与数据验证示例
- 风险提示与内存问题规避建议
技能认证特训营第二期限时报名促销
页面顶部包含培训营报名入口与限时优惠提示。
- 提供“技能认证特训营第二期报名”链接。
- 该入口以促销/提示形式出现在页面顶部。
新闻与文章标题/发布日期
标示内容为新闻并给出文章标题与发布日期。
- 文章标题为“使用 WindTDF 插件获取实时行情的最佳实践”。
- 发布日期为 2024.12.18。
背景:金融实时行情接入痛点与插件动机
介绍金融行业行情数据价值、传统通过 API 对接的开发成本,以及开发 WindTDF 插件以简化接入的原因。
- 传统数据库对接行情系统通常需要通过 API 接口完成。
- 用户往往需要自行编写数据接入、序列化与存储代码。
- 上述做法会增加开发与维护成本。
- WindTDF 插件强调用脚本方式快速接入行情到 DolphinDB。
- 该插件的目标包括降低技术门槛并提升效率。
WindTDF 插件概述与支持数据范围
说明插件基于 TDF_C++ SDK、通过回调写入共享流表,并列出当前支持的数据类型与交易所范围。
- 插件基于万得宏汇提供的 TDF_C++ SDK 实现。
- 插件通过行情回调函数写入指定的 DolphinDB 共享流表。
- 支持上交所与深交所的股票、基金快照数据。
- 支持逐笔交易数据与期货数据(含中金所范围)。
示例范围与完整案例链接
给出示例将订阅沪深全市场股票快照与逐笔数据,并提供完整案例外链。
- 示例订阅沪深两市全市场股票快照数据。
- 示例订阅沪深两市全市场逐笔数据。
- 示例强调实时接入并存储至 DolphinDB 分布式数据库。
- 提供完整案例链接(外部)。
实践案例:总体方案与架构图
描述订阅成交/委托/快照并写入持久化流表,再订阅流表写入分布式数据库的整体链路,并配有架构示意图与说明。
- 通过 WindTDF 插件订阅成交数据并写入 DolphinDB 持久化流表。
- 通过 WindTDF 插件订阅委托数据并写入 DolphinDB 持久化流表。
- 通过 WindTDF 插件订阅快照数据并写入 DolphinDB 持久化流表。
- 再订阅流表,将数据写入 DolphinDB 分布式数据库进行持久存储。
- 本节提供架构图图片链接。
- 图示说明提到:从万得 TDF 行情服务器经插件回调接收数据。
- 图示说明提到:通过订阅机制将流表数据持久化到 DFS 表。
架构图: https://cdn.dolphindb.cn/resources/7yYQQnTSb6jgKDkmbumgd/1a8b89a7a9c67878655218ba580f2dcc.png
实现步骤总览
概括使用插件接入的三步:安装加载插件、创建表、订阅行情,并引用文档中心链接作为补充。
- 步骤包含:安装并加载插件。
- 步骤包含:创建表(含持久化流表与分布式库表)。
- 步骤包含:订阅行情。
- 提供 DolphinDB 文档中心链接作为补充参考。
步骤 1:安装并加载 WindTDF 插件
说明在客户端执行 installPlugin 安装适配版本插件,并用 loadPlugin("WindTDF") 加载。
- 在 DolphinDB 客户端执行 installPlugin 安装 WindTDF 插件文件。
- 安装的插件文件需与当前服务器版本适配。
- 在脚本中调用 loadPlugin("WindTDF") 加载插件。
步骤 2:创建流表与分布式表
说明连接前需预先设置所有订阅、创建 handle、获取 schema,并据此创建持久化流表与分布式库表(含分区方式与 cacheSize 说明)。
- 连接行情系统后无法修改订阅。
- 需要在连接前预先设置所有数据的订阅。
- 通过 WindTDF::createHandle 创建 handle(示例包含 HOST/PORT/USERNAME/PASSWORD 参数)。
- 可获取的 schema 类型包括:快照、逐笔委托、逐笔成交。
- 示例使用 streamTable(...) 创建 snapshot_sh 与 snapshot_sz 持久化流表。
- 示例使用 enableTableShareAndPersistence(...) 进行共享与持久化。
- 示例中 tableName 为 snapshot_sh_s 与 snapshot_sz_s。
- 本例分布式库表分区方式为:按天值分区 + 按股票代码 HASH 分区。
- cacheSize 用于设置预分配内存与流表可占用的最大内存。
- 较大的 cacheSize 可降低出现峰值时延的频率。
Schema 图链接: https://cdn.dolphindb.cn/resources/7yYQQnTSb6jgKDkmbumgd/ba25ae1394aede95c060a8ef4d7f7b99.png
步骤 3:订阅 WindTDF 行情并写入分布式库
展示使用 WindTDF::subscribe 订阅行情、subscribeTable 订阅流表入库,并说明 batchSize 与 throttle 的控制含义以及 connect 后开始入流表。
- 示例使用 WindTDF::subscribe 订阅快照数据(包含 SH 与 SZ 订阅)。
- 示例定义 handleInsert 并调用 tableInsert 执行写入逻辑。
- 示例对流表使用 subscribeTable(..., msgAsTable=true, batchSize=20000, throttle=1, reconnect=true)。
- batchSize 表示未处理消息的数量。
- throttle 表示时间间隔。
- 当达到 batchSize 或 throttle 任一条件时写入分布式数据库。
- 完成订阅后使用 WindTDF::connect 连接 WindTDF。
- 连接后行情数据开始进入流数据表。
步骤 4:WindTDF 运行状态监控与示例图
提供运行监控示例图与说明,包括消息类型占比、订阅任务处理量与最新消息预览。
- 示例图展示接收各类行情消息数量占比。
- 示例图用于反映 snapshot/order/trade 三类数据类型的流量分布。
- 示例图展示不同订阅任务的 processedMsgCount。
- 该图用于掌握消费进度与排查积压或中断。
- 最新消息预览示例包含证券代码、交易日、状态、预收盘价、开盘价等字段示例。
- 预览提供字段筛选功能,用于在线验证数据准确性与解析正确性。
运行状态监控图链接: https://cdn.dolphindb.cn/resources/7yYQQnTSb6jgKDkmbumgd/6484c2275a97ea8ed47703c5f98c0f46.png
订阅任务处理情况图链接: https://cdn.dolphindb.cn/resources/7yYQQnTSb6jgKDkmbumgd/dcb08b1cb6ac42dc0b419a543fca6896.png
最新消息预览图链接: https://cdn.dolphindb.cn/resources/7yYQQnTSb6jgKDkmbumgd/025b8d6bbb9c28a3d82a567118b055c8.png
风险与规避:第三方 SDK 可能导致内存耗尽
提示使用第三方 SDK 可能出现内存耗尽,并给出通过分配流表容量与管理 session 变量的规避建议。
- 使用第三方 SDK 可能出现内存耗尽(Out of Memory)。
- 建议合理分配流数据容量。
- 建议及时管理 session 的变量。
扩展:其他行情接入插件与功能插件、插件市场引导
列举除 WindTDF 外的其他行情接入插件与功能插件,并引导前往插件市场查看清单。
- 列举的行情接入插件示例包括:通联、华锐 AMD、华泰 Insight。
- 列举的功能插件覆盖数据存取、消息队列、机器学习等方向。
- 引导前往 DolphinDB 插件市场浏览完整清单。
Facts index
| Entity | Attribute | Value | Confidence |
|---|---|---|---|
| 使用 WindTDF 插件获取实时行情的最佳实践(新闻) | 发布日期 | 2024.12.18 | high |
| 万得宏汇行情系统 | 定位/描述 | 多市场整合的实时行情平台,提供低延时、高质量的行情数据服务,并通过统一的数据接口标准帮助用户获取数据 | medium |
| 数据库对接行情数据系统(通常做法) | 对接方式 | 需要通过 API 接口完成,用户需自行编写数据接入、序列化和存储代码,增加开发和维护成本 | high |
| DolphinDB WindTDF 行情插件 | 目的/价值主张 | 通过简洁脚本调用快速将行情数据接入 DolphinDB,免去繁琐编码步骤,从而降低技术门槛并提升效率 | medium |
| DolphinDB WindTDF 行情插件 | 实现基础 | 基于万得宏汇提供的 TDF_C++ SDK 实现 | high |
| DolphinDB WindTDF 行情插件 | 数据写入方式 | 通过行情回调函数将数据写入指定的 DolphinDB 共享流表中 | high |
| DolphinDB WindTDF 行情插件 | 支持的数据范围 | 支持多种数据类型,包括上交所、深交所、中金所的股票、基金快照、逐笔交易数据及期货数据 | high |
| 本文示例 | 订阅内容 | 订阅沪深两市的全市场股票快照和逐笔数据并实时接入与存储至 DolphinDB 分布式数据库 | high |
| 完整案例链接 | URL | https://zhuanlan.zhihu.com/p/12893455530 | high |
| 实践案例流程 | 数据链路描述 | 通过 WindTDF 插件订阅成交数据、委托数据和快照数据写入 DolphinDB 持久化流表;再订阅流表写入 DolphinDB 分布式数据库进行持久存储 | high |
| 实践案例架构图 | 图片URL | https://cdn.dolphindb.cn/resources/7yYQQnTSb6jgKDkmbumgd/1a8b89a7a9c67878655218ba580f2dcc.png | high |
| 实践案例架构(图示说明) | 流程描述 | 从万得 TDF 行情服务器通过插件回调接收数据,利用异步处理线程分发成交/委托/快照三类数据,进入 DolphinDB 流表后通过订阅机制持久化到 DFS 表 | low |
| WindTDF 接入实现步骤 | 步骤概览 | 三步:安装并加载插件、创建表、订阅行情(创建表涉及持久化流表与分布式库表创建) | high |
| DolphinDB 文档中心(流表性能优化/分区方式) | URL | https://docs.dolphindb.cn/zh/index.html | high |
| WindTDF 插件安装加载 | 安装方式 | 在 DolphinDB 客户端执行 installPlugin 安装与当前服务器版本适配的 WindTDF 插件文件 | high |
| WindTDF 插件安装加载 | 加载方式 | 在脚本中调用 loadPlugin("WindTDF") 加载插件 | high |
| 万得 TD 系统订阅 | 限制 | 连接行情系统后无法修改订阅,需要在连接前预先设置所有数据的订阅 | high |
| WindTDF handle 创建 | 函数调用 | handle = WindTDF::createHandle([HOST], [PORT], [USERNAME], [PASSWORD]) |
high |
| WindTDF 行情数据表结构获取 | 可获取的 schema 类型 | 快照、逐笔委托、逐笔成交三种表结构 | high |
| getSchema 表结构图(图示说明) | 描述 | 图表列出通过 WindTDF 插件获取 snapshot/order/trade 三类数据 Schema 的脚本命令,使用 WindTDF::getSchema 语法 | low |
| WindTDF schema 图 | 图片URL | https://cdn.dolphindb.cn/resources/7yYQQnTSb6jgKDkmbumgd/ba25ae1394aede95c060a8ef4d7f7b99.png | high |
| 持久化流表创建示例(快照) | cacheSize 设置 | cacheSize = 1000000 | high |
| 持久化流表创建示例(快照) | 建表与持久化函数 | 使用 streamTable(...) 创建 snapshot_sh/snapshot_sz,并用 enableTableShareAndPersistence(...) 共享与持久化,tableName 分别为 snapshot_sh_s 与 snapshot_sz_s | high |
| cacheSize(流数据表) | 含义 | 作为变量设置建表时预分配内存大小以及流数据表可占用的最大内存;较大的 cacheSize 可降低出现峰值时延的频率 | medium |
| 分布式库表创建(本例) | 分区方式 | 按天值分区 + 按股票代码 HASH 分区 | high |
| WindTDF 订阅(快照示例) | 函数调用 | WindTDF::subscribe(handle, snapshot_sh_s, "SH-2-0", "snapshot"); WindTDF::subscribe(handle, snapshot_sz_s, "SZ-2-0", "snapshot"); |
high |
| subscribeTable 入库(快照示例) | 处理逻辑 | 定义 handleInsert 调用 tableInsert;对 snapshot_sh_s 与 snapshot_sz_s 使用 subscribeTable(..., msgAsTable=true, batchSize=20000, throttle=1, reconnect=true) 将增量写入分布式数据库 | high |
| subscribeTable 参数 | batchSize 含义 | 表示未处理消息的数量 | high |
| subscribeTable 参数 | throttle 含义 | 表示时间间隔;当达到 batchSize 或 throttle 任一条件时写入分布式数据库 | high |
| WindTDF 连接 | 连接函数与效果 | 完成订阅后使用 WindTDF::connect 连接 WindTDF,行情数据开始进入流数据表 | high |
| WindTDF 运行状态监控图(饼图) | 图片URL | https://cdn.dolphindb.cn/resources/7yYQQnTSb6jgKDkmbumgd/6484c2275a97ea8ed47703c5f98c0f46.png | high |
| WindTDF 运行状态监控(饼图说明) | 展示内容 | 展示接收各类行情消息数量占比,反映 snapshot/order/trade 三类数据类型流量分布,用于监控接入活跃度 | low |
| 订阅任务处理情况图(柱状图) | 图片URL | https://cdn.dolphindb.cn/resources/7yYQQnTSb6jgKDkmbumgd/dcb08b1cb6ac42dc0b419a543fca6896.png | high |
| 订阅任务处理情况(柱状图说明) | 展示内容 | 展示 DolphinDB 内部各订阅任务的 processedMsgCount;横轴为不同市场订阅任务,纵轴为已处理消息总数,用于掌握消费进度与排查积压/中断 | low |
| 最新消息预览图 | 图片URL | https://cdn.dolphindb.cn/resources/7yYQQnTSb6jgKDkmbumgd/025b8d6bbb9c28a3d82a567118b055c8.png | high |
| 最新消息预览(图示说明) | 包含字段示例 | 表格包含证券代码、交易日、状态、预收盘价、开盘价等字段,并提供字段筛选功能,用于在线验证数据准确性与解析正确性 | low |
| WindTDF 插件(第三方 SDK) | 潜在问题 | 可能出现内存耗尽(Out of Memory) | high |
| 内存耗尽规避建议 | 方法 | 合理分配流数据容量、及时管理 session 的变量 | medium |
| DolphinDB 行情接入插件 | 除 WindTDF 外的示例 | 通联、华锐 AMD、华泰 Insight 等主流平台的行情接入插件 | high |
| DolphinDB 功能插件 | 覆盖能力示例 | 数据存取、消息队列、机器学习等多种功能插件 | medium |
| DolphinDB 插件市场 | 引导动作 | 欢迎前往 DolphinDB 插件市场浏览完整清单 | low |
| 技能认证特训营第二期报名 | 报名链接 | https://www.qingsuyun.com/h5/e/217471/5/ | high |