irCapFloorVolatilitySurfaceBuilder
首发版本:3.00.6
语法
irCapFloorVolatilitySurfaceBuilder(referenceDate, currency, iborIndex, quoteTerms, quoteStrikes, quotes, discountCurve, forwardCurve, [volType='Normal'], [model='SABR'], [surfaceName])
详情
构建利率上下限期权波动率曲面。
参数
referenceDate DATE 类型标量,指定曲面的参考日期。
currency STRING 类型标量,指定曲面的货币,目前只支持 "CNY"。
iborIndex STRING 类型标量,指定曲面的参考利率,可选值如下:
- "LPR_1Y":1 年期贷款市场报价利率。
- "LPR_5Y":5 年期贷款市场报价利率。
quoteTerms STRING 或 DURATION 类型向量,指定市场报价的对应期限。
quoteStrikes 数值类型向量,指定期权报价的执行价。
quotes 数值类型矩阵,指定市场报价矩阵,形状为 (size(quoteTerms),
size(quoteStrikes)),其第 i 行第 j 列的数据表示执行价
quoteStrikes[j] 在期限 quoteTerms[i] 上的报价。
discountCurve MKTDATA 类型对象,指定贴现曲线(IrYieldCurve)。
forwardCurve MKTDATA 类型对象,指定远期曲线(IrYieldCurve)。
volType 可选参数,STRING 类型标量,指定波动率类型。可选值如下:
- "Normal"(默认值):正态波动率。
- "Lognormal":对数正态波动率。
model 可选参数,STRING 类型标量,指定构建曲面所用的模型。可选值如下:
- "SABR"(默认值):Stochastic Alpha Beta Rho 模型(Beta=0)。
- "Linear":线性模型。
- "CubicSpline":三次样条模型。
surfaceName 可选参数,STRING 类型标量,指定曲面的名称。默认为 "IRCAPFLOORVOLSURF/{iborIndex}"。
返回值
MKTDATA 类型对象,表示利率上下限期权波动率曲面(IrCapFloorVolatilitySurface)。曲面字段说明如下:
| 字段 | 类型 | 描述 |
|---|---|---|
| surfaceName | STRING | 曲面的名称。 |
| mktDataType | STRING | 市场数据类型。固定返回 'Surface'。 |
| version | INT | 解析数据所用的格式版本。无需关注,默认返回当前 Server 的最新格式版本。 |
| referenceDate | STRING | 曲面的参考日期。 |
| surfaceType | STRING | 曲面的类型。固定返回 'IrCapFloorVolatilitySurface'。 |
| smileMethod | STRING | 波动率微笑方法,对应入参 model 指定的模型。 |
| termDates | DATE 向量 | 曲面中每条波动率微笑对应的期限日期。 |
| volSmiles | ANY 向量 | 向量中每个元素为一条波动率微笑,为 DICT(STRING, ANY) 类型,包含以下成员:
|
| currency | STRING | 曲面的货币。 |
| iborIndex | STRING | 曲面的参考利率。 |
| volType | STRING | 波动率类型。 |
例子
本示例展示了如何构建一个基于 CNY LPR 1Y 的利率上下限期权波动率曲面。
/* 定义曲线创建函数,用于构建贴现曲线(discountCurve)和远期曲线(forwardCurve)。
参数:
asOfDate: 曲线基准日期。
zeroRate: 固定零息利率。
返回:
IrYieldCurve 类型的市场数据对象。
*/
def createLpr1yFlatCurve(asOfDate, zeroRate){
// 设置曲线节点日期。
// 日期分别对应基准日后的 1 天、3 个月、6 个月、1 年、2 年和 3 年。
pillarDates = asOfDate + [1, 92, 183, 365, 730, 1095]
pillarValues = take(zeroRate, size(pillarDates))
curveDict = {
"mktDataType": "Curve",
"curveType": "IrYieldCurve",
"referenceDate": asOfDate,
"currency": "CNY", // 曲线币种
"curveName": "CNY_LPR_1Y", // 曲线名称
"dayCountConvention": "Actual365", // 日计数规则
"compounding": "Continuous", // 复利类型:连续复利
"interpMethod": "Linear", // 内插方法:线性插值
"extrapMethod": "Flat", // 外插方法:平值
"frequency": "NoFrequency", // 计息频率
// 曲线节点日期和对应零息利率
"dates": pillarDates,
"values": pillarValues
}
return parseMktData(curveDict)
}
// 基准日期
aod = 2021.03.18
cnyCurve = createLpr1yFlatCurve(aod, 0.0340)
// 利率上下限期权波动率报价的期限;每一行对应一个期限的波动率报价。
quoteTerms = [3M, 6M, 9M, 1y, 2y]
// 利率上下限期权波动率报价对应的执行利率;每一列对应一个 strike。
quoteStrikes = [0.0, 0.025, 0.0365, 0.05, 0.07]
/* 构造波动率报价矩阵。
行表示期权期限(quoteTerms)。
列表示执行利率(quoteStrikes)。
*/
quotes = matrix(
0.0072 0.0070 0.0068 0.0067 0.0065,
0.0064 0.0062 0.0061 0.0060 0.0059,
0.0060 0.0058 0.0057 0.0056 0.0055,
0.0063 0.0061 0.0060 0.0059 0.0058,
0.0071 0.0069 0.0068 0.0067 0.0065
)
capfloorVolSurf = irCapFloorVolatilitySurfaceBuilder(
aod, // 基准日期
"CNY", // 币种
"LPR_1Y", // 参考利率
quoteTerms, // 报价期限
quoteStrikes, // 执行价格
quotes, // 波动率报价矩阵
cnyCurve, // 贴现曲线
cnyCurve, // 远期曲线
model="Linear", // 曲面插值模型
surfaceName="CNY_LPR_1Y" // 波动率曲面名称
)
相关函数:parseMktData
