parseMktData

首发版本:3.00.4

语法

parseMktData(dict)

详情

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

参数

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

返回值

一个 MKTDATA 类型对象。

市场数据支持与字段要求

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

目前支持以下类型:

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

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

  • 波动率曲面:外汇波动率曲面(FxVolatilitySurface)、利率上下限期权波动率曲面(IrCapFloorVolatilitySurface)

  • 波动率立方体:IrSwaptionVolatilityCube(利率互换期权波动率立方体)

各种类型数据所需字段如下(注:"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",无需传 interpMethod、extrapMethod、dates、values 字段。

否
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)

资产价格曲线(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)

利率互换期权波动率立方体(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" 否