DolphinDB 面向金融交易与定价的统一数据模型
本页为一篇文章,介绍 DolphinDB 面向金融交易与定价的统一数据模型,并包含作者与发布日期信息。
Source: https://dolphindb.cn/blogs/290
What this page covers
- 背景与建模动机(异构存储痛点与统一建模思路)。
- Instrument 抽象、instrumentId 关系与示例建表/入库。
- parseInstrument / extractInstrument 的解析与提取流程。
- Instrument 字段查询接口分类与性能测试结果。
- Instrument 条件查询改写方式与性能结果。
- MktData 抽象、解析/提取与统一存储(含流表实时定价)收益点。
- 组合管理应用:五张核心表、对比与可扩展性要点。
技能认证特训营第二期报名信息
页面顶部包含活动提示与限时报名链接。
- 页面提供“技能认证特训营第二期”的报名链接。
- 报名链接指向外部页面。
DolphinDB 面向金融交易与定价的统一数据模型
本部分给出文章标题,并提供作者与发布日期信息。
- 文章作者署名为 Luxing。
- 发布日期为 2025-12-11。
背景
本部分说明传统金融交易数据异构存储的痛点,并引出 DolphinDB 通过统一 INSTRUMENT 类型与市场数据类型来简化建模与提升查询/存取效率的思路。
- 提出将各类金融工具抽象为统一的 INSTRUMENT 类型。
- 提出解析后将金融工具写入金融工具表的 instrument 字段。
- 提出将金融工具信息整合到交易表中以简化建表流程。
- 提出为不同类型市场数据提供专门的数据类型支持以统一存储与访问。
- 页面包含“简化建表流程并提升查询效率”的效果性描述(表述强度以原文为准)。
Instrument:金融工具统一抽象与存储关联
本部分介绍 Instrument 基类与标准/非标准金融工具的 instrumentId 关联关系,并给出 Instrument 表与 Trade 表的示例及建表/入库代码。
- Instrument 类是对金融工具的抽象,资产与衍生品可基于该抽象建模。
- 所有金融工具都继承自 Instrument 基类。
- 金融工具可分为标准型与非标准型两类。
- 标准型金融工具可将唯一交易代码作为 instrumentId。
- 非标准型金融工具需为每笔交易单独创建 Instrument 并生成全局唯一 instrumentId。
解析与提取(parseInstrument / extractInstrument)
本部分说明如何将金融工具字典解析为 INSTRUMENT 对象以及如何再提取回字典,并提供相关文档链接与示意说明。
- parseInstrument 用于解析金融工具字典并封装为 INSTRUMENT 类型对象。
- extractInstrument 用于将 Instrument 对象提取为字典。
- parseInstrument 文档规定了各类金融工具的数据成员(必填与选填)。
- 对用户新增的额外字段,也支持解析与提取。
添加额外字段
本部分说明除文档规定字段外,用户可为金融工具增加自定义字段且同样可被解析与提取。
- 用户可根据需要为金融工具增加字段。
- 用户添加的额外字段也可被 parseInstrument / extractInstrument 处理。
Instrument 字段查询接口与性能
本部分将 instrument 属性查询分为三类接口(专用 getter、keys 查看、按 key 批量取值),并给出等价关系与性能测试表。
- 接口类别之一:直接读取单个属性(如 getInstrumentNominal/Frequency/Maturity)。
- 接口类别之一:getInstrumentKeys 用于查看所有字段键。
- 接口类别之一:getInstrumentField 按 key 批量查找数据成员(含 default 参数)。
- 第一类与第三类接口在查询效率方面被表述为等价。
- 页面给出 getInstrumentField 的性能测试结果表(含不同字段类型与规模)。
Instrument 条件查询与性能
本部分展示将结构化字段条件改写为 getInstrumentField/getInstrumentXXX 的条件查询写法,并给出性能结果表。
- coupon、maturity 等条件可改写为 getInstrumentField(instrument, key) 形式。
- coupon、maturity 等条件也可改写为 getInstrumentCoupon/getInstrumentMaturity 形式。
- 改写后的条件查询被描述为可获得相同查询效果。
- 页面提供条件查询的性能结果表(含不同条件与数据规模)。
用户自定义 Instrument 类型(UserDefined)与 JSON 性能对比
本部分提供 UserDefined 自定义类型以替代 JSON 存储方案,并用测试案例比较查询性能差异。
- UserDefined 类型要求包含必填字段 {“productType”: “UserDefined”}。
- 除必填字段外,其他字段可完全由用户自定义。
- 页面对比了 JSON 与自定义 Instrument 存储在字段查询上的耗时示例。
- 页面给出“相对 JSON 性能提升十倍以上”的表述(为对比性宣称)。
基于 instrument 对象的一些应用
本部分列举基于 Instrument 的债券计算器与定价函数(含特殊定价函数 instrumentPricer/portfolioPricer)的调用方式与版本信息。
- bondInstrumentCalculator 的第一个参数约定为 instrument。
- 不同种类的债券可封装到 instrument 中进行计算。
- 从 DolphinDB V3.00.4 起提供一系列 FICC&Equity 定价函数。
- 这些定价函数的第一个参数被描述为统一为 Instrument 对象。
- instrumentPricer/portfolioPricer 的第一个参数为 instrument,可为 INSTRUMENT 标量或向量。
MktData:市场数据统一抽象、解析/提取与好处
本部分介绍 MktData 市场数据抽象与支持类型,给出 parseMktData/extractMktData 用法示例,并说明统一存储与流表实时定价的好处。
- MktData 类是对市场数据的抽象。
- 市场数据都继承自 MktData 基类。
- parseMktData 用于对市场数据字典进行解析。
- extractMktData 用于将 MktData 对象提取为字典。
- 页面提出可将定价所需市场数据统一存储在一张表中以便管理与查询。
多资产建模在组合管理上的应用(五张核心表与对比)
本部分描述传统关系型组合管理的表结构复杂性,并给出基于 Instrument/MarketData/Trade/Indicator/Portfolio 五表的数据基座与对比表,以及可扩展性要点。
- 组合管理的存储与计算过程可简化为五张表:Instrument、MarketData、Trade、Indicator、Portfolio。
- 组合管理场景中 instrumentId 被要求为 unique。
- 标准型金融工具:一个 instrumentId 可对应多笔交易。
- 非标准型金融工具:一个 instrumentId 只能对应一笔交易。
- 对比表包含传统关系型方案与统一数据模型在表数量与流程上的差异点。
总结:统一数据模型的特点与业务价值主张
本部分归纳 Instrument + MktData 统一数据模型在复杂度、实时定价、敏捷性、风控合规、效率与对标国际实践等方面的要点。
- 页面总结统一数据模型在复杂度方面的要点。
- 页面总结统一数据模型与实时定价相关的要点。
- 页面包含“百万级金融工具查询可在数十毫秒内完成”的总结性表述。
附录
本部分提供相关教程/测试链接。
- 附录包含 InstrumentTest 的链接。
Facts Index
| Entity | Attribute | Value | Confidence |
|---|---|---|---|
| 文章 | 发布日期 | 2025-12-11 | high |
| 文章作者 | 署名 | Luxing | high |
| DolphinDB | 统一建模方式 | 将各种金融工具抽象为统一的 INSTRUMENT 类型,并解析后存入金融工具表的 instrument 字段,可将全部金融工具信息存储并整合到交易表中以简化建表流程并提升查询效率。 | medium |
| DolphinDB | 效果宣称 | 通过统一 INSTRUMENT 存储与整合,显著简化建表流程并大幅提升查询效率。 | low |
| DolphinDB | 市场数据类型支持目的 | 为统一不同类型市场数据(如 Curve、Surface)的存储与访问,提供专门的数据类型支持,以在数据库层面实现对市场数据的高效管理与存取。 | medium |
| Instrument 类 | 定义 | Instrument 类是对金融工具的抽象,用于建模各种资产和衍生品;所有金融工具都继承自 Instrument 基类。 | high |
| 金融工具分类 | 市场上交易金融工具的两类 | 标准型与非标准型。 | high |
| 标准型金融工具 | 特征描述 | 合约条款清晰,有固定交易代码,合约到期前可以买卖流通;包括场内期货/期权等,也包括债券等部分场外产品。 | medium |
| 非标准型金融工具 | 特征描述 | 绝大部分场外交易产品(如利率互换、外汇远期等),合约条款由交易双方自行约定,持有至到期。 | medium |
| 标准型金融工具 | instrumentId 规则 | 可将唯一交易代码作为 instrumentId;交易表通过 instrumentId 关联相应金融工具;tradeId 与 instrumentId 为多对一关系。 | high |
| 非标准型金融工具 | instrumentId 规则 | 每笔交易条款定制无法共享基础信息,需单独创建 Instrument 对象并生成全局唯一 instrumentId;tradeId 与 instrumentId 为一对一关系。 | high |
| instrument 表(示例建表) | 字段 | instrumentId STRING; instrumentType STRING; instrument INSTRUMENT; isRegular BOOL; insertTime DATETIME; updateTime DATETIME | high |
| instrument 表字段 isRegular(示例注释) | 含义 | true 表示有交易代码的金融工具;false 表示没有交易代码的金融工具(主要针对 instrumentId)。 | high |
| parseInstrument | 功能 | 用于对一个金融工具字典进行解析并封装为 INSTRUMENT 类型对象。 | high |
| extractInstrument | 功能 | 用于将 Instrument 对象提取为字典。 | high |
| parseInstrument 文档 | 字段约束 | 规定了每种金融工具的数据成员(必填和选填)。 | high |
| parseInstrument / extractInstrument | 对用户额外字段的支持 | 用户可根据需要增加字段;对用户添加的额外字段也可以进行解析和提取。 | high |
| Instrument 字段查询接口 | 接口分类 | 三类:1) 直接读取单个属性(如 getInstrumentNominal/Frequency/Maturity);2) getInstrumentKeys 查看所有字段键;3) getInstrumentField 按 key 批量查找数据成员(含 default 参数用于确定输出类型)。 | high |
| Instrument 查询接口性能 | 等价性声明 | 第一类与第三类接口查询效率等价。 | medium |
| getInstrumentField(instrument, “nominal”) 性能测试 | 耗时 | 10万条 4ms;100万条 8ms(字段类型 DOUBLE)。 | high |
| getInstrumentField(instrument, “frequency”) 性能测试 | 耗时 | 10万条 10ms;100万条 60ms(字段类型 STRING)。 | high |
| getInstrumentField(instrument, “maturity”) 性能测试 | 耗时 | 10万条 4ms;100万条 8ms(字段类型 DATE)。 | high |
| Instrument 条件查询 | 改写方式 | 可将 coupon、maturity 等字段条件改写为 getInstrumentField(instrument, key) 或 getInstrumentCoupon/getInstrumentMaturity 形式以获得相同查询效果。 | high |
| Instrument 条件查询性能(coupon > 0.015) | 耗时 | 10万条 4ms;100万条 15ms。 | high |
| Instrument 条件查询性能(coupon > 0.015 and maturity > 2027.01.01) | 耗时 | 10万条 6ms;100万条 20ms。 | high |
| Instrument 条件查询性能(coupon > 0.015 and frequency = “Annual“) | 耗时 | 10万条 8ms;100万条 30ms。 | high |
| 用户自定义 Instrument 类型 UserDefined | 必填字段 | 除必填 {“productType”: “UserDefined”} 外,其他字段可完全由用户自定义。 | high |
| UserDefined vs JSON | 性能宣称 | 采用自定义 Instrument 类型存储后,查询某个字段的性能对比 JSON 方案性能提升十倍以上。 | medium |
| JSON 存储查询 strike 字段(10 万个 Instrument) | 耗时 | 409.603 ms(示例 timer 注释);文中总结为 409.6 ms。 | high |
| 自定义 Instrument 存储查询 strike 字段(10 万个 Instrument) | 耗时 | 39.776 ms(示例 timer 注释);文中总结为 39.8 ms。 | high |
| bondInstrumentCalculator | 参数约定 | 函数的第一个参数是 instrument;不同种类的债券可封装到 instrument 中进行计算。 | high |
| DolphinDB 定价函数提供版本 | 起始版本 | 从 DolphinDB V3.00.4 开始提供一系列 FICC&Equity 定价函数,且每个函数第一个参数统一为 Instrument 对象。 | high |
| instrumentPricer / portfolioPricer | 参数与能力 | 两个特殊定价函数第一个参数为 instrument,可填 INSTRUMENT 标量或向量;不同类型金融工具可放入同一向量中进行批量定价。 | high |
| MktData 类 | 定义 | MktData 类是对市场数据的抽象;市场数据都继承自 MktData 基类。 | high |
| parseMktData | 功能 | 用于对一个市场数据字典进行解析。 | high |
| extractMktData | 功能 | 用于将 MktData 对象提取为字典。 | high |
| MktData 设计的好处 | 统一存储 | 所有定价所需的市场数据可统一存储在一张表中,便于管理和查询。 | medium |
| MktData 设计的好处 | 实时定价支持 | 该表可进一步保存为流表,支持实时定价场景。 | medium |
| 组合管理数据架构(简化) | 核心表数量与名称 | 存储与计算过程可简化为五张表:Instrument、MarketData、Trade、Indicator、Portfolio。 | high |
| Instrument 表(组合管理场景) | instrumentId 约束与复用关系 | instrumentId 为 unique;标准型金融工具一个 id 可对应多笔交易;非标准型金融工具一个 id 只能对应一笔交易。 | high |
| MarketData 表(组合管理场景) | data 字段用途 | data 字段存储解析后的曲线/曲面数据;通过参考日期 referenceDate 与定价函数 pricingDate 关联;通过 name 和具体 instrument 关联。 | high |
| Portfolio 表(组合管理场景) | 关联字段 | 通过 tradeIds 字段与交易表关联,通过 indicatorIds 与指标表关联。 | high |
| SecDB(Goldman Sachs) | 背景描述 | 被广泛认为是统一对象模型进行跨资产风险管理与交易流程简化的先驱,高盛自 20 世纪90 年代起内部使用。 | medium |
| DolphinDB | 推出该建模方法版本 | 在 DolphinDB V3.00.4 版本上推出这套建模方法。 | high |
| 与传统关系型数据建模对比(资产定义表数量) | 对比结论 | 传统关系型方案:数十~上百张;DolphinDB 统一数据模型:Instrument 1 张。 | high |
| 与传统关系型数据建模对比(市场数据表) | 对比结论 | 传统关系型方案:多张按类型拆分;DolphinDB 统一数据模型:MarketData 1 张。 | high |
| 与传统关系型数据建模对比(新增一种资产) | 对比结论 | 传统关系型方案:新建多张表 + 程序改动;DolphinDB:新增 Instrument 结构并 parse 入库。 | high |
| 与传统关系型数据建模对比(定价所需市场数据) | 对比结论 | 传统关系型方案:多表查询 + 手工组装;DolphinDB:一次查询 MarketData,直接传给 pricer。 | high |
| 与传统关系型数据建模对比(实时估值) | 对比结论 | 传统关系型方案:困难(关系型不擅长流数据);DolphinDB:可用流表 + 内存计算。 | medium |
| 可扩展性(新增金融工具/曲线) | 需要做的事情 | 新增金融工具:按结构封装、解析、入库(Instrument 表);新增曲线:按结构封装、解析、入库(MarketData 表);并适配新的金融工具定价函数(xxxPricer)及指标计算定义。 | high |
| DolphinDB 统一数据模型(Instrument + MktData) | 性能宣称(总结段) | 实测显示,百万级金融工具查询可在数十毫秒内完成。 | medium |
| 附录链接 | 指向内容 | InstrumentTest(https://docs.dolphindb.cn/zh/tutorials/instrument_pricer.html) | high |
| 技能认证特训营第二期 | 报名链接 | https://www.qingsuyun.com/h5/e/217471/5/ | high |