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"。 货币对也可由 |
是 |
下例定义了一个 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 |
曲线的日期计数惯例,可选值为:
|
是 |
| interpMethod | STRING |
内插方法,可选值为:
|
是 |
| extrapMethod | STRING |
外插方法,可选值为:
|
是 |
| dates | DATE 向量 | 数据点的日期 | 是 |
| values | DOUBLE 向量 | 数据点的值,与 dates 中的元素一一对应 | 是 |
| curveName | STRING | 曲线名称 | 否 |
| currency | STRING | 货币,可选值为"CNY", "USD", "EUR", "GBP", "JPY", "HKD" | 是 |
| compounding | STRING |
复利类型,可选值为:
|
是 |
| settlement | DATE | 结算日,如果指定了结算日,则后续期限间隔的计算都将从 settlement 开始,而不是 referenceDate | 否 |
| frequency | INTEGRAL或 STRING |
计息频率,可选值为:
|
否 |
| curveModel | STRING |
曲线构建模型,可选值为 "Bootstrap"(默认),"NS","NSS"。 当取值 "NSS" 或 "NS",无需传 interpMethod、extrapMethod、dates、values 字段。 |
否 |
| curveParams | DICT |
模型的参数,当 curveModel取值 "NSS" 或 "NS" 时必填:
|
否 |
下例定义了一个 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 |
曲线的日期计数惯例,可选值为:
|
是 |
| interpMethod | STRING |
内插方法,可选值为:
|
是 |
| extrapMethod | STRING |
外插方法,可选值为:
|
是 |
| 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 |
波动率微笑方法,可选值为:
|
是 |
| volSmiles | DICT(STRING, ANY) 向量 |
波动率微笑向量,向量中每个元素为一条波动率微笑。 包含以下成员:
|
是 |
| termDates | DATE 向量 | volSmiles中每条波动率微笑对应的期限日期 | 是 |
| surfaceName | STRING | 曲面名称 | 否 |
| currencyPair | STRING |
外汇的货币对,可选值为"EURUSD", "USDCNY", "EURCNY", "GBPCNY", "JPYCNY", "HKDCNY"。 货币对的表示也可由 |
是 |
下例定义了一个 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 |
波动率微笑方法,可选值为:
|
是 |
| volSmiles | DICT(STRING, ANY) 组成的元组 |
波动率微笑向量,向量中每个元素为一条波动率微笑。 包含以下成员:
|
是 |
| termDates | DATE 向量 | volSmiles 中每条波动率微笑对应的期限日期 | 是 |
| surfaceName | STRING | 曲面名称 | 否 |
| currency | STRING | 货币,可选值为 "CNY", "USD", "EUR", "GBP", "JPY", "HKD" | 是 |
| iborIndex | STRING |
表示参考利率,可选值为:
|
是 |
| volType | STRING |
表示波动率类型,可选值为:
|
否 |
下例定义了一个 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)
