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) 类型,包含以下成员:
  • 'strikes':行权价。

  • 'vols':行权价对应的波动率,与 'strikes'等长。

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