irEuropeanSwaptionPricer
首发版本:3.00.6
语法
irEuropeanSwaptionPricer(instrument, pricingDate, discountCurve, forwardCurve, volSurf, [setting], [model], [method])
详情
对欧式利率互换期权定价。
参数
instrument INSTRUMENT 类型标量或向量,指定需要定价的欧式利率互换期权。字段要求参考产品字段说明。
pricingDate DATE 类型标量或向量,指定定价日期。
discountCurve MKTDATA 标量或向量,指定用于计算折现因子的即期曲线(IrYieldCurve)。
forwardCurve MKTDATA 标量或向量,指定用于计算远期利率的即期曲线(IrYieldCurve)。
volSurf MKTDATA 标量或向量,指定波动率立方体(IrSwaptionVolatilityCube)。
setting 可选参数,字典(Dictionary<STRING, BOOL>),用于指定是否计算希腊字母(Greeks)所代表的期权价格敏感性指标。
| 键 | 值 | 描述 |
|---|---|---|
| calcDelta | 布尔值,默认为 false | 是否计算 Delta,即期权价格相对于标的资产价格的敏感性。 |
| calcGamma | 布尔值,默认为 false | 是否计算 Gamma,即期权 Delta 相对于标的资产价格的敏感性。 |
| calcVega | 布尔值,默认为 false | 是否计算 Vega,即期权价格相对于标的资产波动率的敏感性。 |
| calcTheta | 布尔值,默认为 false | 是否计算 Theta,即期权价格相对于时间变化的敏感性。 |
| calcRho | 布尔值,默认为 false | 是否计算 Rho,即期权价格相对于无风险利率的敏感性。 |
model 可选参数,STRING 类型标量,指定定价模型。可选值:“Black76” 和 “Bachelier”(默认值)。
method 可选参数,STRING 类型标量,指定定价方法。默认且唯一支持的值为“Analytic”,表示采用解析法。
返回值
- 若不指定 setting 参数,返回 DOUBLE 类型标量,表示期权的净现值(NPV),即期权的理论价格。
- 指定 setting 参数时,返回一个字典(Dictionary<STRING, DOUBLE>),包含期权的净现值(NPV)以及希腊字母(Greeks)所代表的期权价格敏感性指标。有关敏感性指标的说明请参考 setting 参数说明。
例子
本示例构造欧式利率互换期权、贴现曲线、远期曲线和 Swaption 波动率立方体,并使用 irEuropeanSwaptionPricer 基于 Bachelier 模型完成定价,同时计算价格及 Delta、Gamma、Vega、Theta、Rho 等风险指标。
// =====================================================
// 一、基础定价参数设置
// =====================================================
// 定价日
pricingDate = 2021.03.18
// 名义本金
notional = 50000000.0
// 固定利率
fixedRate = 0.0365
// =====================================================
// 二、构造标的利率互换 underlying swap
// =====================================================
underlyingSwapDict = {
// 产品大类:Swap
"productType": "Swap",
// Swap 类型:利率互换
"swapType": "IrSwap",
// 具体利率互换类型:固定利率兑浮动利率
"irSwapType": "IrFixedFloatingSwap",
// 标的互换的产品标识
"instrumentId": "CNY_LPR_1Y",
// 名义本金
"notionalAmount": notional,
// 名义本金币种
"notionalCurrency": "CNY",
// 标的互换起息日
"start": 2021.06.18,
// 标的互换到期日
"maturity": 2024.06.18,
// 现金流支付频率
"frequency": "Annual",
// 固定端利率
"fixedRate": fixedRate,
// 浮动端利差
"spread": 0.0000,
// 固定端日计数规则
"fixedDayCountConvention": "Actual365",
// 浮动端日计数规则
"floatingDayCountConvention": "Actual360",
// 交易日历
"calendar": "CFET",
// Pay 表示该标的 swap 是支付固定利率、收取浮动利率
"payReceive": "Pay",
"iborIndex": "LPR_1Y",
"discountCurve": "CNY",
"forwardCurve": "LPR_1Y"
}
// =====================================================
// 三、构造欧式 Swaption 产品
// =====================================================
swaptionDict = {
// 产品大类:Option
"productType": "Option",
// 期权类型:欧式期权
"optionType": "EuropeanOption",
// 标的资产类型:欧式利率互换期权
"assetType": "IrEuropeanSwaption",
// 产品标识
"instrumentId": "SWPT_LPR1Y_3M3Y_PAY",
// Swaption 名义本金
"notionalAmount": notional,
// Swaption 名义本金币种
"notionalCurrency": "CNY",
// swaption 的行权日
"start": 2021.06.16,
// 标的互换的最终到期日
"maturity": 2024.06.18,
// 执行利率
"strike": fixedRate,
// payoffType = Call
"payoffType": "Call",
// 标的互换
"underlying": underlyingSwapDict,
// swaption 自身使用的日计数规则
"dayCountConvention": "Actual365"
}
// -----------------------------------------------------
// 将产品字典解析为 DDB 系统可识别的金融产品对象
// -----------------------------------------------------
swaption = parseInstrument(swaptionDict)
// =====================================================
// 四、构造收益率曲线节点日期
// =====================================================
curveDates = pricingDate + [1, 92, 183, 365, 730, 1095, 1460, 1825]
// =====================================================
// 五、构造贴现曲线 discount curve
// =====================================================
discountCurveInfo = {
// 市场数据类型:Curve
"mktDataType": "Curve",
// 曲线类型:利率收益率曲线
"curveType": "IrYieldCurve",
// 曲线参考日
"referenceDate": pricingDate,
// 币种:人民币
"currency": "CNY",
// 曲线日计数规则
"dayCountConvention": "Actual365",
// 复利方式:连续复利
"compounding": "Continuous",
// 插值方法:线性插值
"interpMethod": "Linear",
// 外推方法:平推
"extrapMethod": "Flat",
// 复利频率
"frequency": "NoFrequency",
// 曲线期限节点日期
"dates": curveDates,
// 曲线各期限节点上的连续复利零息利率
"values": take(0.029, size(curveDates))
}
// -----------------------------------------------------
// 将贴现曲线字典解析为 DDB 系统可识别的市场数据对象
// -----------------------------------------------------
discountCurve = parseMktData(discountCurveInfo)
// =====================================================
// 六、构造远期曲线 forward curve
// =====================================================
forwardCurveInfo = {
// 市场数据类型:Curve
"mktDataType": "Curve",
// 曲线类型:利率收益率曲线
"curveType": "IrYieldCurve",
// 曲线参考日
"referenceDate": pricingDate,
// 币种:人民币
"currency": "CNY",
// 曲线日计数规则
"dayCountConvention": "Actual365",
// 复利方式:连续复利
"compounding": "Continuous",
// 插值方法:线性插值
"interpMethod": "Linear",
// 外推方法:平推
"extrapMethod": "Flat",
// 复利频率
"frequency": "NoFrequency",
// 曲线期限节点日期
"dates": curveDates,
// 曲线各期限节点上的连续复利零息利率
"values": take(0.037, size(curveDates))
}
// -----------------------------------------------------
// 将远期曲线字典解析为 DDB 系统可识别的市场数据对象
// -----------------------------------------------------
forwardCurve = parseMktData(forwardCurveInfo)
// =====================================================
// 七、构造 Swaption 波动率立方体
// =====================================================
flatLpr1ySwaptionCube = {
// 波动率立方体名称
"cubeName": "CNY_LPR_1Y_SWAPTION",
// 市场数据类型
"mktDataType": "Cube",
// Cube 类型
"cubeType": "IrSwaptionVolatilityCube",
// 参考日
"referenceDate": pricingDate,
// 币种
"currency": "CNY",
// 对应的浮动利率指数
"iborIndex": "LPR_1Y",
// ATM 期权到期期限
"atmTerms": [0.25, 1.0, 2.0],
// ATM 标的互换期限
"atmTenors": [1.0, 3.0, 5.0],
// ATM 波动率矩阵
// 行对应 atmTerms,列对应 atmTenors
"atmVols": matrix(
[0.0055096937, 0.0058291888, 0.0060394000],
[0.0060092120, 0.0063268352, 0.0065345735],
[0.0063079263, 0.0066216700, 0.0068254044]
),
// OTM 期权到期期限
"otmTerms": [0.25, 1.0, 2.0],
// OTM 标的互换期限
"otmTenors": [1.0, 3.0, 5.0],
// SABR 参数立方体
"paramCube": {
// alpha 控制基础波动率水平。
"alpha": matrix(
[0.0055, 0.0058, 0.0060],
[0.0060, 0.0063, 0.0065],
[0.0063, 0.0066, 0.0068]
),
// beta 控制 SABR 模型形态。
"beta": matrix(
[0.0, 0.0, 0.0],
[0.0, 0.0, 0.0],
[0.0, 0.0, 0.0]
),
// rho 表示 forward rate 与 volatility 随机扰动之间的相关性。
"rho": matrix(
[-0.20, -0.15, -0.10],
[-0.20, -0.15, -0.10],
[-0.15, -0.10, -0.05]
),
// nu 表示 volatility of volatility
"nu": matrix(
[0.30, 0.25, 0.20],
[0.28, 0.23, 0.18],
[0.25, 0.20, 0.15]
)
}
}
// -----------------------------------------------------
// 将波动率立方体字典解析为 DDB 系统可识别的市场数据对象
// -----------------------------------------------------
volSurf = parseMktData(flatLpr1ySwaptionCube)
// =====================================================
// 八、设置定价输出项
// =====================================================
setting = dict(STRING, ANY)
setting["calcDelta"] = true
setting["calcGamma"] = true
setting["calcVega"] = true
setting["calcTheta"] = true
setting["calcRho"] = true
// =====================================================
// 九、调用欧式 swaption 定价器
// =====================================================
bachelierResult = irEuropeanSwaptionPricer(
swaption,
pricingDate,
discountCurve,
forwardCurve,
volSurf,
setting
)
// =====================================================
// 十、输出定价结果
// =====================================================
print("LPR1Y_PAYER_SWAPTION_SAMPLE Bachelier result = " + string(bachelierResult))
/*
npv->LPR1Y_PAYER_SWAPTION_SAMPLE Bachelier result = 265595.520334303262643
delta->LPR1Y_PAYER_SWAPTION_SAMPLE Bachelier result = 92079255.637157037854194
gamma->LPR1Y_PAYER_SWAPTION_SAMPLE Bachelier result = 1.727311841805548E10
vega->LPR1Y_PAYER_SWAPTION_SAMPLE Bachelier result = 25749948.686961725354194
theta->LPR1Y_PAYER_SWAPTION_SAMPLE Bachelier result = -20524909.91052808612585
rho->LPR1Y_PAYER_SWAPTION_SAMPLE Bachelier result = 790326.494059825199656
*/
产品字段说明
| 字段名 | 类型 | 描述 | 是否必填 |
|---|---|---|---|
| productType | STRING | 固定填 "Option" | 是 |
| optionType | STRING | 固定填 "EuropeanOption" | 是 |
| assetType | STRING | 固定填 "IrEuropeanSwaption" | 是 |
| instrumentId | STRING | 合约代码,标准格式为:“SWPT_参考利率_期权期限x利率互换期限C/P”比如:“SWPT_LPR1Y_1Y5YC” 表示参考利率为LPR1Y、期权期限为1Y的固定利率支付方利率互换期权,利率互换期限为5Y | 否 |
| start | DATE | 起息日 | 是 |
| maturity | DATE | 到期日 | 是 |
| strike | DOUBLE | 执行利率 | 是 |
| payoffType | STRING | 枚举,可选 "Call" 和 "Put" | 是 |
| underlying | DICT/INSTRUMENT | 标的资产:可解析成 IrFixedFloatingSwap 对象的字典或者 IrFixedFloatingSwap 对象 | 是 |
| dayCountConvention | STRING | 日期计数惯例, 可选 "ActualActualISDA", "ActualActualISMA", "Actual365", "Actual360" | 是 |
| discountCurve | STRING | 定价时参考的贴现曲线名称,人民币存款默认为 "CNY_FR_007" | 否 |
| forwardCurve | STRING | 定价时参考的远期曲线名称,如 "CNY_LPR_1Y" | 否 |
波动率立方体字段说明
| 字段名 | 类型 | 描述 | 是否必填 |
|---|---|---|---|
| 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" | 否 |
