DolphinDB 面向金融交易与定价的统一数据模型

本页为一篇文章,介绍 DolphinDB 面向金融交易与定价的统一数据模型,并包含作者与发布日期信息。

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

What this page covers

技能认证特训营第二期报名信息

页面顶部包含活动提示与限时报名链接。

DolphinDB 面向金融交易与定价的统一数据模型

本部分给出文章标题,并提供作者与发布日期信息。

背景

本部分说明传统金融交易数据异构存储的痛点,并引出 DolphinDB 通过统一 INSTRUMENT 类型与市场数据类型来简化建模与提升查询/存取效率的思路。

Instrument:金融工具统一抽象与存储关联

本部分介绍 Instrument 基类与标准/非标准金融工具的 instrumentId 关联关系,并给出 Instrument 表与 Trade 表的示例及建表/入库代码。

解析与提取(parseInstrument / extractInstrument)

本部分说明如何将金融工具字典解析为 INSTRUMENT 对象以及如何再提取回字典,并提供相关文档链接与示意说明。

添加额外字段

本部分说明除文档规定字段外,用户可为金融工具增加自定义字段且同样可被解析与提取。

Instrument 字段查询接口与性能

本部分将 instrument 属性查询分为三类接口(专用 getter、keys 查看、按 key 批量取值),并给出等价关系与性能测试表。

Instrument 条件查询与性能

本部分展示将结构化字段条件改写为 getInstrumentField/getInstrumentXXX 的条件查询写法,并给出性能结果表。

用户自定义 Instrument 类型(UserDefined)与 JSON 性能对比

本部分提供 UserDefined 自定义类型以替代 JSON 存储方案,并用测试案例比较查询性能差异。

基于 instrument 对象的一些应用

本部分列举基于 Instrument 的债券计算器与定价函数(含特殊定价函数 instrumentPricer/portfolioPricer)的调用方式与版本信息。

MktData:市场数据统一抽象、解析/提取与好处

本部分介绍 MktData 市场数据抽象与支持类型,给出 parseMktData/extractMktData 用法示例,并说明统一存储与流表实时定价的好处。

多资产建模在组合管理上的应用(五张核心表与对比)

本部分描述传统关系型组合管理的表结构复杂性,并给出基于 Instrument/MarketData/Trade/Indicator/Portfolio 五表的数据基座与对比表,以及可扩展性要点。

总结:统一数据模型的特点与业务价值主张

本部分归纳 Instrument + MktData 统一数据模型在复杂度、实时定价、敏捷性、风控合规、效率与对标国际实践等方面的要点。

附录

本部分提供相关教程/测试链接。

Facts Index

Entity Attribute Value Confidence
文章发布日期2025-12-11high
文章作者署名Luxinghigh
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 DATETIMEhigh
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