irSwaptionVolatilityCubeBuilder
首发版本:3.00.6
语法
irSwaptionVolatilityCubeBuilder(referenceDate, underlying,
atmTenors, atmTerms, atmVols, otmTenors, otmTerms, otmStrikes, otmVols,
discountCurve, forwardCurve, [volType='Normal'], [model='SABR'],
[cubeName])
详情
构建利率互换期权波动率立方体。
参数
referenceDate DATE 类型标量,表示波动率立方体的参考日期。
underlying STRING 类型标量,表示标的利率互换名称。可选值为 "CNY_FR_007", "CNY_SHIBOR_3M", "CNY_LPR_1Y", "CNY_LPR_5Y"。
atmTenors DURATION 类型向量,表示平值期权标的利率互换期限。
atmTerms DURATION 类型向量,表示平值期权的期限。
atmVols DOUBLE 类型矩阵,表示平值期权的波动率。矩阵行数应与 atmTerms 长度一致,列数应与 atmTenors 长度一致。 矩阵第 i 行、第 j 列对应期限为 atmTerms[i]、标的利率互换期限为 atmTenors[j] 的平值期权波动率。
otmTenors DURATION 类型向量,表示虚值期权标的利率互换期限。
otmTerms DURATION 类型向量组成的元组, 表示虚值期权的期限。与 otmTenors 等长,otmTerms[i] 为 otmTenors[i] 对应的虚值期权的期限向量。
otmStrikes DOUBLE类型向量,表示虚值期权相对于远期 Swap Rate 的偏移的执行价(标准 Black/Bachelier forward-ATM 约定下,ATM strike 等于远期平价 Swap Rate)。
otmVols DOUBLE 类型矩阵组成的元组,表示虚值期权的波动率。长度与 otmTenors 一致,otmVols[i] 为 otmTenors[i] 对应的虚值期权的波动率矩阵。矩阵行数与 otmTerms[i] 长度一致,列数与 otmStrikes 长度一致。每个矩阵第 m 行、第 n 列对应期限为 otmTerms[i][m]、偏移为 otmStrikes[n] 的虚值期权波动率。
discountCurve 一个类型为 IrYieldCurve 的 MKTDATA 标量或向量,表示定价使用的折现曲线。
forwardCurve 一个类型为 IrYieldCurve 的 MKTDATA 标量或向量,表示定价使用的远期曲线。
volType 可选参数,STRING 类型标量,表示波动率类型,默认值为 "Normal"。可选值为:"Normal",表示正态波动率;"Lognormal",表示对数正态波动率。
model 可选参数,STRING 类型标量,表示构建波动率立方体使用的模型,目前仅支持 "SABR"。
cubeName 可选参数,STRING 类型标量,表示波动率立方体的名称,默认为 "IRSWAPTIONVOLCUBE/{underlying}",其中 underlying 为参数 underlying。
返回值
MKTDATA 类型,一个 IrSwaptionVolatilityCube 对象,表示构建得到的利率互换期权波动率立方体。
例子
构建一个利率互换期权波动率立方体。
// =====================================================
// 一、自定义收益率曲线创建函数
// =====================================================
def createLpr1yFlatCurve(asOfDate, zeroRate){
// -------------------------------------------------
// 1. 构造收益率曲线的期限节点日期
// -------------------------------------------------
pillarDates = asOfDate + [1, 92, 183, 365, 730, 1095, 1460, 1825, 2555, 3650]
// -------------------------------------------------
// 2. 构造每个期限节点上的零利率
// -------------------------------------------------
pillarValues = take(zeroRate, size(pillarDates))
// -------------------------------------------------
// 3. 构造收益率曲线市场数据字典
// -------------------------------------------------
curveDict = {
// 市场数据类型:Curve 表示曲线类市场数据
"mktDataType": "Curve",
// 曲线类型:IrYieldCurve 表示利率收益率曲线
"curveType": "IrYieldCurve",
// 曲线估值日
"referenceDate": asOfDate,
// 币种:人民币
"currency": "CNY",
// 曲线名称
"curveName": "CNY_LPR_1Y",
// 日计数规则:Actual365
"dayCountConvention": "Actual365",
// 复利方式:连续复利
"compounding": "Continuous",
// 插值方式:线性插值
"interpMethod": "Linear",
// 外推方式:平推
"extrapMethod": "Flat",
// 付息频率:无频率
"frequency": "NoFrequency",
// 曲线期限节点日期
"dates": pillarDates,
// 曲线各节点对应的零利率
"values": pillarValues
}
// -------------------------------------------------
// 4. 将字典解析为市场数据对象并返回
// -------------------------------------------------
return parseMktData(curveDict)
}
// =====================================================
// 二、创建估值日和人民币 LPR 1Y 平坦收益率曲线
// =====================================================
aod = 2021.03.18
// 创建一条零利率为 3.40% 的人民币 LPR 1Y 平坦收益率曲线
cnyCurve = createLpr1yFlatCurve(aod, 0.0340)
// =====================================================
// 三、定义 ATM Swaption 波动率网格
// =====================================================
// 期权到期期限
atmTerms = [6M, 1y, 2y]
// 标的互换期限,也可以理解为 swap tenor
atmTenors = [1y, 3y, 5y]
// -----------------------------------------------------
// 平值期权波动率矩阵
//
// atmVols 是一个 3 × 3 矩阵:
// 行对应 atmTerms,即期权到期期限:[6M, 1y, 2y]
// 列对应 atmTenors,即标的互换期限:[1y, 3y, 5y]
// DolphinDB中matrix为列优先,后续例子同理
// -----------------------------------------------------
atmVols = matrix(
0.0058 0.0061 0.0063,
0.0061 0.0065 0.0067,
0.0064 0.0066 0.0069
)
// =====================================================
// 四、定义 OTM Swaption 波动率数据
// OTM = Out of The Money,表示虚值期权波动率。
// 这里通常用于描述不同 strike 偏移下的波动率微笑结构。
// =====================================================
// OTM 数据对应的标的互换期限
otmTenors = [1y, 3y, 5y]
// 每一个 OTM tenor 下,对应的 option term 列表
// 这里写成 [atmTerms, atmTerms, atmTerms],表示:对每个标的互换期限 1y、3y、5y,都使用相同的一组期权到期期限 [6M, 1y, 2y]。
otmTerms = [atmTerms, atmTerms, atmTerms]
// 虚值期权的 strike 偏移量
otmStrikes = [-0.0020, -0.0010, 0.0000, 0.0010, 0.0020]
// =====================================================
// 五、不同标的互换期限下的 OTM 波动率矩阵
//
// 每个矩阵对应一个 swap tenor。
// 例如:
// otmVols1y 对应标的互换期限为 1y;
// otmVols3y 对应标的互换期限为 3y;
// otmVols5y 对应标的互换期限为 5y。
// 每个矩阵是 3 × 5:
// 列对应 otmStrikes,共 5 个 strike 偏移;
// 行对应 option terms,即 [6M, 1y, 2y]。
// =====================================================
// -----------------------------------------------------
// 1. 标的互换期限为 1y 时的 OTM 波动率矩阵
// 列:otmStrikes = [-20bp, -10bp, 0bp, +10bp, +20bp]
// 行:atmTerms = [6M, 1y, 2y]
// -----------------------------------------------------
otmVols1y = matrix(
0.0063 0.0067 0.0068,
0.0060 0.0065 0.0066,
0.0058 0.0061 0.0063,
0.0061 0.0064 0.0065,
0.0063 0.0068 0.0069
)
// -----------------------------------------------------
// 2. 标的互换期限为 3y 时的 OTM 波动率矩阵
// 列:otmStrikes
// 行:atmTerms
// -----------------------------------------------------
otmVols3y = matrix(
0.0066 0.0069 0.0072,
0.0063 0.0066 0.0070,
0.0061 0.0065 0.0067,
0.0064 0.0067 0.0069,
0.0067 0.0070 0.0071
)
// -----------------------------------------------------
// 3. 标的互换期限为 5y 时的 OTM 波动率矩阵
// 列:otmStrikes
// 行:atmTerms
// -----------------------------------------------------
otmVols5y = matrix(
0.0070 0.0071 0.0074,
0.0067 0.0069 0.0072,
0.0064 0.0066 0.0069,
0.0067 0.0068 0.0071,
0.0070 0.0072 0.0075
)
// -----------------------------------------------------
// 将不同 swap tenor 下的 OTM 波动率矩阵放入一个列表中
// -----------------------------------------------------
otmVols = [otmVols1y, otmVols3y, otmVols5y]
// =====================================================
// 六、构建 Swaption 波动率立方体
// Swaption volatility cube 是在三个维度上组织波动率数据:
// 1. option term:期权到期期限,例如 6M、1y、2y
// 2. swap tenor:标的互换期限,例如 1y、3y、5y
// 3. strike:执行利率偏移,例如 -20bp、-10bp、ATM、+10bp、+20bp
// ATM 波动率矩阵提供平值波动率;
// OTM 波动率矩阵提供不同 strike 偏移下的波动率微笑信息。
// =====================================================
swaptionVolCube = irSwaptionVolatilityCubeBuilder(
// 估值日
aod,
// 收益率曲线名称
// 需要与前面 curveDict 中的 curveName 保持一致
"CNY_LPR_1Y",
// ATM 标的互换期限
atmTenors,
// ATM 期权到期期限
atmTerms,
// ATM 波动率矩阵
atmVols,
// OTM 标的互换期限
otmTenors,
// OTM 期权到期期限
otmTerms,
// OTM strike 偏移量
otmStrikes,
// OTM 波动率矩阵列表
otmVols,
// 贴现曲线
cnyCurve,
// 远期曲线
cnyCurve
)
print(swaptionVolCube)
相关函数:parseMktData
