parseMktData

首发版本:3.00.4

语法

parseMktData(dict)

详情

将输入的字典或 JSON 字符串解析为 MKTDATA 类型。

参数

dict 字典或表示该字典的 JSON 格式字符串(STRING 标量),用于指定待解析的市场数据内容。

返回值

一个 MKTDATA 类型对象。

市场数据支持与字段要求

MKTDATA 为 DolphinDB 新增的数据类型,为金融产品定价需要用到的市场数据提供支撑。

目前支持以下类型:

  • 即期价格:Price(即期价格)、FxSpotRate(外汇即期汇率)

  • 期限结构曲线:IrYieldCurve(利率收益率曲线), AssetPriceCurve(资产价格曲线)、DividendCurve(股息曲线)

  • 波动率曲面:FxVolatilitySurface(外汇波动率曲面)、VolatilitySurface(波动率曲面)

各种类型数据所需字段如下(注:"version" 为系统保留字段,为避免冲突,请勿将此名称用于自定义字段。)

Price

字段名 类型 描述 是否必填
mktDataType STRING 固定填 "Price"
referenceDate DATE 参考日期
priceType STRING 价格类型,固定填 "Price"
value DOUBLE 价格
unit STRING 表示 value 的计价单位,(即 value 这个数字的量纲是什么)。priceType 为 "Price" 时,unit 为货币代码,可选值 为"CNY", "USD", "EUR", "GBP", "JPY", "HKD"

FxSpotRate

字段名 类型 描述 是否必填
mktDataType STRING 固定填 "Price"
referenceDate DATE 参考日期
spotDate DATE 即期交割日,默认使用内部静态数据
priceType STRING 即期价格类型,固定填 "FxSpotRate"
value DOUBLE 即期价格
unit STRING

表示 value 的计价单位,(即 value 这个数字的量纲是什么)。priceType 为 "FxSpotRate" 时,unit 货币对,为可选值为 "EURUSD", "USDCNY", "EURCNY", "GBPCNY", "JPYCNY", "HKDCNY"。

货币对也可由 ./ 分隔,例如 "EURUSD" 也可写为 "EUR.USD" 或 "EUR/USD"。

下例定义了一个 FxSpotRate 对象:

FxSpotRate = {
    "mktDataType": "Price",
    "referenceDate": 2025.08.18,
    "spotDate": 2025.08.20,
    "priceType": "FxSpotRate",
    "value": 7.2659,
    "unit": "USDCNY"
}

mktData = parseMktData(FxSpotRate)
print(mktData)

IrYieldCurve

字段名 类型 描述 是否必填
mktDataType STRING 固定填 "Curve"
referenceDate DATE 参考日期
curveType STRING 固定填 "IrYieldCurve"
dayCountConvention STRING

曲线的日期计数惯例,可选值为:

  • "Actual360":实际天数除以360

  • "Actual365":实际天数除以365(不区分闰年)

  • "ActualActualISMA":实际天数/实际天数(ISMA规则)

  • "ActualActualISDA":实际天数/实际天数(ISDA规则)

interpMethod STRING

内插方法,可选值为:

  • "Linear":线性插值

  • "CubicSpline":三次样条插值

  • "CubicHermiteSpline":三次埃尔米特样条插值

extrapMethod STRING

外插方法,可选值为:

  • "Flat":平插

  • "Linear":线性插值

dates DATE 向量 数据点的日期
values DOUBLE 向量 数据点的值,与 dates 中的元素一一对应
curveName STRING 曲线名称
currency STRING 货币,可选值为"CNY", "USD", "EUR", "GBP", "JPY", "HKD"
compounding STRING

复利类型,可选值为:

  • "Simple":单利

  • "Compounded":离散复利

  • "Continuous":连续复利

settlement DATE 结算日,如果指定了结算日,则后续期限间隔的计算都将从 settlement 开始,而不是 referenceDate
frequency INTEGRAL或 STRING

计息频率,可选值为:

  • 1 或 "Annual":每年付息一次

  • 2 或 "Semiannual":每半年付息一次

  • 3 或 "EveryFourthMonth":每四个月付息一次

  • 4 或 "Quarterly":每季度付息一次

  • 6 或 "BiMonthly":每两月付息一次

  • 12 或 "Monthly":每月付息一次

  • 13 或 "EveryFourthWeek":每四周付息一次

  • 26 或 "BiWeekly":每两周付息一次

  • 52 或 "Weekly":每周付息一次

  • 365 或 "Daily":每日付息一次

  • 999 或 "Other":其他计息频率

curveModel STRING

曲线构建模型,可选值为 "Bootstrap"(默认),"NS","NSS"。

当取值 "NSS" 或 "NS",无需传 interpMethodextrapMethoddatesvalues 字段。

curveParams DICT

模型的参数,当 curveModel取值 "NSS" 或 "NS" 时必填:

  • curveModel = "NS":应包含键 'beta0', 'beta1', 'beta2', 'lambda'

  • curveModel = "NSS":应包含键'beta0', ‘beta1', 'beta2', 'beta3', 'lambda0', 'lambda1'

下例定义了一个 IrYieldCurve 对象:

aod = 2025.07.01
curve = {
    "mktDataType": "Curve",
    "curveType": "IrYieldCurve",
    "referenceDate": aod,
    "currency": "CNY",
    "dayCountConvention": "Actual365",
    "compounding": "Continuous",
    "interpMethod": "Linear",
    "extrapMethod": "Flat",
    "dates":[2025.07.07,2025.07.10,2025.07.17,2025.07.24,2025.08.04,2025.09.03,2025.10.09,2026.01.05,
        2026.04.03,2026.07.03,2027.01.04,2027.07.05,2028.07.03],
    "values":[0.015785,0.015931,0.016183,0.016381,0.016493,0.016503,0.016478,0.016234,0.016321,
        0.016378,0.015508,0.015185,0.014901],
    "settlement": aod+2
}

mktData = parseMktData(curve)
print(mktData)

IrSwaptionVolatilityCube

字段名 类型 描述 是否必填
cubeName STRING 波动率立方名称
mktDataType STRING 市场数据类型,固定填 "Cube"
cubeType STRING 曲面类型,固定填 "IrSwaptionVolatilityCube"
referenceDate DATE 参考日期
currency STRING 币种,例如 "CNY"
iborIndex STRING 标的利率互换的参考利率
atmTerms DOUBLE[] 平值期权的期限,以年化比例(year fraction)表示
atmTenors DOUBLE[] 平值期权标的利率互换的期限,以年化比例(year fraction)表示
atmVols DOUBLE Matrix 平值期权的波动率,形状为 size(atmTerms) * size(atmTenors)
otmTerms DOUBLE[] 虚值期权的期限,以年化比例(year fraction)表示
otmTenors DOUBLE[] 虚值期权标的利率互换的期限,以年化比例(year fraction)表示
paramCube Dict(String, Double Matrix) 虚值期权的波动率微笑参数。包含四个键 'alpha'、'beta'、'rho'、'nu',每个键对应一个参数,值为一个DOUBLE 类型矩阵,形状为 size(otmTerms) * size(otmTenors),矩阵中第i行第j列的值对应该参数在 otmTerms[i],otmTenors[j] 时的值。
volType STRING 波动率类型,默认值为 "Normal"

AssetPriceCurve

字段名 类型 描述 是否必填
mktDataType STRING 固定填 "Curve"
referenceDate DATE 参考日期
curveType STRING 固定填 "AssetPriceCurve"
dates DATE 向量 数据点的日期
values DOUBLE 向量 数据点的值,与 dates 中的元素一一对应
curveName STRING 曲线名称

下例定义了一个 AssetPriceCurve 对象:

curve = {
    "mktDataType": "Curve",
    "curveType": "AssetPriceCurve",
    "referenceDate": 2024.06.28,
    "curveName": "PRICE_SHIBOR_3M",
    "dates": [2024.06.21, 2024.06.24, 2024.06.25, 2024.06.26,2024.06.27],
    "values": [1.923, 1.922, 1.921, 1.919, 1.918]/100
}

mktData = parseMktData(curve)
print(mktData)

DividendCurve

下例定义了一个 DividendCurve 对象:

curve = {
    "mktDataType": "Curve",
    "curveType": "DividendCurve",
    "referenceDate": 2024.06.28,
    "dayCountConvention": "Actual365",
    "compounding": "Continuous",
    "interpMethod": "Linear",
    "extrapMethod": "Flat",
    "dates": [2024.07.19, 2024.08.16, 2024.09.20, 2024.12.20],
    "values": [0.15347650417594424, 0.10083112893776815, 0.0693439711515692, 0.04357496515816385],
    "shortEndDate": 2024.06.28
}

dividendCurve = parseMktData(curve)

CreditCurve

字段名 类型 描述 是否必填
mktDataType STRING 固定填 "Curve"
referenceDate DATE 参考日期
curveType STRING 固定填 "CreditCurve"
curveName STRING 曲线名称
dayCountConvention STRING

曲线的日期计数惯例,可选值为:

  • "Actual360":实际天数除以360

  • "Actual365":实际天数除以365(不区分闰年)

  • "ActualActualISMA":实际天数/实际天数(ISMA规则)

  • "ActualActualISDA":实际天数/实际天数(ISDA规则)

interpMethod STRING

内插方法,可选值为:

  • "Linear":线性插值

  • "CubicSpline":三次样条插值

  • "CubicHermiteSpline":三次埃尔米特样条插值

extrapMethod STRING

外插方法,可选值为:

  • "Flat":平插

  • "Linear":线性插值

dates DATE 向量 数据点的日期
values DOUBLE 向量 危险率,数据点的值,与 dates 中的元素一一对应

下例定义了一个 CreditCurve 对象:

def createCnyFr007CurveForCds(asOfDate){
    pillarDates = asOfDate + [2, 8, 93, 185, 276, 367, 732, 1099, 1463, 1828, 2558, 3654]
    pillarValues = [
        0.0145993931630537,
        0.0229075517972275,
        0.0253020667393029,
        0.0257564866303201,
        0.0259751440992468,
        0.0260355181479988,
        0.0265336263144786,
        0.0272721454114050,
        0.0282024453631075,
        0.0290231222075799,
        0.0304665029488732,
        0.0319855013976250
    ]
    discountCurveDict = {
        "mktDataType": "Curve",
        "curveType": "IrYieldCurve",
        "referenceDate": asOfDate,
        "currency": "CNY",
        "curveName": "CNY_FR_007",
        "dayCountConvention": "Actual365",
        "compounding": "Continuous",
        "interpMethod": "Linear",
        "extrapMethod": "Flat",
        "frequency": "NoFrequency",
        "dates": pillarDates,
        "values": pillarValues
    }
    return parseMktData(discountCurveDict)
}
def createCreditCurveForCds(asOfDate){
    pillarDates = asOfDate + [2, 8, 93, 185, 276, 367, 732, 1099, 1463]
    hazardRates = [
        0.001577614619366,
        0.001577614619366,
        0.00237392030740149,
        0.00527736067786984,
        0.00887303437629905,
        0.0151416564486811,
        0.0219406380083359,
        0.0442999285840119,
        0.0182083758016553
    ]
    creditCurveDict = {
        "mktDataType": "Curve",
        "curveType": "CreditCurve",
        "referenceDate": asOfDate,
        "currency": "CNY",
        "curveName": "CFETS_SHCH_GTJA",
        "interpMethod": "Linear",
        "extrapMethod": "Flat",
        "dayCountConvention": "Actual365",
        "dates": pillarDates,
        "values": hazardRates
    }
    return parseMktData(creditCurveDict)
}

FxVolatilitySurface

字段名 类型 描述 是否必填
mktDataType STRING 固定填 "Surface"
referenceDate DATE 参考日期
surfaceType STRING 固定填 "FxVolatilitySurface"
smileMethod STRING

波动率微笑方法,可选值为:

  • "Linear":线性微笑

  • "CubicSpline":三次样条微笑

  • "SVI":SVI 模型微笑

  • "SABR":SABR 模型微笑

volSmiles DICT(STRING, ANY) 向量

波动率微笑向量,向量中每个元素为一条波动率微笑。

包含以下成员:

  • strikes: DOUBLE 类型向量,表示不同的行权价

  • vols: DOUBLE 类型向量,表示行权价对应的波动率,与 strikes等长

  • curveParams:字典DICT(STRING, DOUBLE)类型,表示波动率微笑方法的模型参数,只在 smileMethod 取值 "SVI" 或 "SABR" 时生效:

    • smileMethod = 'SVI': 应包含键 'a', 'b', 'rho', 'm', 'sigma'

    • smileMethod = 'SABR': 应包含键 'alpha', 'beta', 'rho', 'nu'

  • fwd:可选,DOUBLE 类型标量,当 smileMethod取值 "SVI" 或 "SABR" 时必填,表示远期值

termDates DATE 向量 volSmiles中每条波动率微笑对应的期限日期
surfaceName STRING 曲面名称
currencyPair STRING

外汇的货币对,可选值为"EURUSD", "USDCNY", "EURCNY", "GBPCNY", "JPYCNY", "HKDCNY"。

货币对的表示也可由 ./ 分隔,例如 "EURUSD" 也可写为 "EUR.USD" 或 "EUR/USD"。

下例定义了一个 FxVolatilitySurface 对象:

surf = {
	"surfaceName": "USDCNY",
	"mktDataType": "Surface",
	"surfaceType": "FxVolatilitySurface",
	"referenceDate": 2025.08.18,
	"smileMethod": "Linear",
	"termDates": [
		2025.08.21,
		2026.08.20
	],
	"volSmiles":[{"strikes": [6.5,7,7.5],"vols": [0.1,0.1,0.1]},{"strikes": [6.5,7,7.5],"vols": [0.1,0.1,0.1]}],
	"currencyPair": "USDCNY"
}

surfUsdCny = parseMktData(surf)

IrCapFloorVolatilitySurface

字段名 类型 描述 是否必填
mktDataType STRING 固定填 "Surface"
referenceDate DATE 参考日期
surfaceType STRING 固定填 "IrCapFloorVolatilitySurface"
smileMethod STRING

波动率微笑方法,可选值为:

  • "Linear":线性微笑

  • "CubicSpline":三次样条微笑

  • "SVI":SVI 模型微笑

  • "SABR":SABR 模型微笑

volSmiles DICT(STRING, ANY) 组成的元组

波动率微笑向量,向量中每个元素为一条波动率微笑。

包含以下成员:

  • strikes: DOUBLE 类型向量,表示不同的行权价

  • vols: DOUBLE 类型向量,表示行权价对应的波动率,与 strikes 等长

  • curveParams:字典DICT(STRING, DOUBLE) 类型,表示波动率微笑方法的模型参数,只在 smileMethod 取值 "SVI" 或 "SABR" 时生效:

    • smileMethod = 'SVI': 应包含键 'a', 'b', 'rho', 'm', 'sigma'

    • smileMethod = 'SABR': 应包含键 'alpha', 'beta', 'rho', 'nu'

  • fwd:可选,DOUBLE 类型标量,当 smileMethod 取值 "SVI" 或 "SABR" 时必填,表示远期值

termDates DATE 向量 volSmiles 中每条波动率微笑对应的期限日期
surfaceName STRING 曲面名称
currency STRING 货币,可选值为 "CNY", "USD", "EUR", "GBP", "JPY", "HKD"
iborIndex STRING

表示参考利率,可选值为:

  • "LPR_1Y":1年期贷款市场报价利率

  • "LPR_5Y":5年期贷款市场报价利率

volType STRING

表示波动率类型,可选值为:

  • "Normal"(默认值):正态波动率

  • "Lognormal":对数正态波动率

下例定义了一个 IrCapFloorVolatilitySurface 对象:

Lpr1yCapFloorSurf = {
    // 波动率曲面名称
    "surfaceName": "CNY_LPR_1Y",
    // 市场数据类型
    "mktDataType": "Surface",
    // 曲面类型
    "surfaceType": "IrCapFloorVolatilitySurface",
    // 曲面参考日
    "referenceDate": 2021.03.18,
    // smile 插值方法
    "smileMethod": "Linear",
    // 期限节点日期
    "termDates": [
        2021.06.18,
        2021.09.17,
        2021.12.17,
        2022.03.17
    ],
    // 每个 termDate 对应一个 volatility smile。
    // volSmiles 的长度应与 termDates 的长度一致。
    // 每一组 smile 包含:
    // strikes:执行利率节点;
    // vols:对应执行利率节点上的波动率。
    "volSmiles":[
        {
            "strikes": [0.0, 0.03, 0.06, 0.10],
            "vols":    [0.0067, 0.0064, 0.0066, 0.0071]
        },
        {
            "strikes": [0.0, 0.03, 0.06, 0.10],
            "vols":    [0.0067, 0.0064, 0.0066, 0.0071]
        },
        {
            "strikes": [0.0, 0.03, 0.06, 0.10],
            "vols":    [0.0067, 0.0064, 0.0066, 0.0071]
        },
        {
            "strikes": [0.0, 0.03, 0.06, 0.10],
            "vols":    [0.0067, 0.0064, 0.0066, 0.0071]
        }
    ],
    // 币种
    "currency": "CNY",
    // 对应的浮动利率指数
    "iborIndex": "LPR_1Y"
}
// -----------------------------------------------------
// 将波动率曲面字典解析为 DDB 系统可识别的市场数据对象
// -----------------------------------------------------
lpr1yVolSurf = parseMktData(Lpr1yCapFloorSurf)