irCapFloorPricer

首发版本:3.00.6

语法

irCapFloorPricer(instrument, pricingDate, discountCurve, forwardCurve, volSurf, [setting], [model='Bachelier'], [method='Analytic'])

详情

对利率上下限期权进行定价。

参数

instrument INSTRUMENT 类型标量或向量,表示需要定价的利率上下限期权(IrCapFloor)。利率上下限期权所需的关键字段详见产品字段说明

pricingDate DATE 类型标量或向量,表示定价日期。

discountCurve MKTDATA 类型(IrYieldCurve)的标量或向量,表示用于计算折现因子的即期曲线。

forwardCurve MKTDATA 类型(IrYieldCurve)的标量或向量,表示用于计算远期利率的即期曲线。

volSurf MKTDATA 类型(IrCapFloorVolatilitySurface)的标量或向量,表示波动率曲面。

setting 可选参数,字典(Dictionary<STRING, BOOL>),用于指定是否计算希腊字母(Greeks)所代表的期权价格敏感性指标。可选值:

描述
calcDelta 布尔值,默认为 false 是否计算 Delta,即期权价格相对于标的资产价格的敏感性。
calcGamma 布尔值,默认为 false 是否计算 Gamma,即期权 Delta 相对于标的资产价格的敏感性。
calcVega 布尔值,默认为 false 是否计算 Vega,即期权价格相对于标的资产波动率的敏感性。
calcTheta 布尔值,默认为 false 是否计算 Theta,即期权价格相对于时间变化的敏感性。
calcRho 布尔值,默认为 false 是否计算 Rho,即期权价格相对于无风险利率的敏感性。

model 可选参数,STRING 类型标量,表示使用的定价模型。可选值:"Bachelier"(默认值)和 "Black76"。若设置为 "Bachelier",波动率曲面 volSurfvolType 必须为 "Normal";若设置为 "Black76",volType 必须为 "Lognormal"。

method 可选参数,STRING 类型标量,表示使用的求解方法,目前仅支持 "Analytic"。

返回值

  • 未指定 setting 时,返回 DOUBLE 类型标量或向量,表示利率上下限期权的净现值 NPV。

  • 指定 setting 时,返回一个字典(Dictionary<STRING, DOUBLE>),包含净现值 NPV 以及通过 setting 指定计算的 Greeks。

例子

对利率上下限期权进行定价。

// =====================================================
// 一、设置定价日
// =====================================================

// LPR 1Y Floor 的定价日
lpr1yPricingDate = 2021.03.18

// =====================================================
// 二、构造 LPR 1Y Floor 产品字典
// =====================================================

lpr1yFloorDict = {

    "productType": "Option",

    // 期权类型
    "optionType": "EuropeanOption",

    // 标的资产类型
    "assetType": "IrCapFloor",

    // 产品标识
    "instrumentId": "LPR1Y_FLOOR_SAMPLE_11",

    // 名义本金
    "notionalAmount": 37000000.0,

    // 名义本金币种
    "notionalCurrency": "CNY",

    // 起始日
    "start": 2021.03.18,

    // 到期日
    "maturity": 2022.03.17,

    // 执行利率
    "strike": 0.035,

    // 上一次已经确定的 fixing 利率
    "lastFixing": 0.0340,

    // 支付频率 
    "frequency": "Quarterly",

    // Cap/Floor 类型
    "capFloorType": "Floor",

    // 浮动端参考利率指数:LPR 1Y
    "iborIndex": "LPR_1Y",

    // 日计数规则
    "dayCountConvention": "Actual360",

    // 贴现曲线名称
    "discountCurve": "CNY",

    // 远期曲线名称
    "forwardCurve": "LPR_1Y"
}

// -----------------------------------------------------
// 将产品字典解析为 DDB 系统可识别的金融产品对象
// -----------------------------------------------------
lpr1yFloor = parseInstrument(lpr1yFloorDict)

// =====================================================
// 三、构造贴现曲线 discount curve
// =====================================================

// 创建一条默认平坦利率曲线作为贴现曲线。

lpr1yDiscountCurve = createDefaultFlatIrYieldCurve(

    // 曲线参考日
    lpr1yPricingDate,

    // 币种
    "CNY",

    // 利率
    0.0280,

    // 曲线日计数规则
    "Actual365",

    // 复利频率
    "NoFrequency",

    // 复利方式
    "Continuous"
)

// =====================================================
// 四、构造远期曲线 forward curve
// =====================================================

lpr1yForwardCurve = createDefaultFlatIrYieldCurve(

    // 曲线参考日
    lpr1yPricingDate,

    // 币种
    "CNY",

    // 利率
    0.037,

    // 曲线日计数规则
    "Actual365",

    // 复利频率
    "NoFrequency",

    // 复利方式:连续复利
    "Continuous"
)

// =====================================================
// 五、构造 LPR 1Y Cap/Floor 波动率曲面
// =====================================================

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)

// =====================================================
// 六、调用 Cap/Floor 定价器
// =====================================================

lpr1yFloorNpv = irCapFloorPricer(
    lpr1yFloor,
    lpr1yPricingDate,
    lpr1yDiscountCurve,
    lpr1yForwardCurve,
    lpr1yVolSurf,
    model="Bachelier"
)

// =====================================================
// 七、输出定价结果
// =====================================================

print("LPR1Y_FLOOR_SAMPLE_11 Bachelier NPV = " + string(lpr1yFloorNpv))

产品字段说明

字段名 类型 描述 是否必填
productType STRING 固定填 "Option"
optionType STRING 固定填 "EuropeanOption"
assetType STRING 固定填 "IrCapFloor"
notionalAmount DOUBLE 名义本金数量,如 "1E8"
notionalCurrency STRING 名义本金货币,如 "CNY",默认为 "CNY"
instrumentId STRING

合约代码,标准格式为:

"Cap/Floor_参考利率_期权期限"。

例如:"Cap_LPR1Y_6M" 表示参考利率为 LPR_1Y、期权期限为 6M 的利率上限期权。

iborIndex STRING 参考利率,可选值为 "LPR_1Y" 或 "LPR_5Y"
lastFixing DOUBLE 最近一个已经确定的参考利率的 fixing 值
start DATE 起息日
maturity DATE 到期日
strike DOUBLE 执行利率
capFloorType STRING

标识“利率上限”或“利率下限”,可选:

  • "Cap":利率上限

  • "Floor":利率下限

frequency STRING

支付频率,不填则使用参考利率的惯用频率,对于 "LPR_1Y" 及 "LPR_5Y",默认为 "Quarterly”。

可选值为:

  • "Annual":每年付息一次

  • "Semiannual":每半年付息一次

  • "EveryFourthMonth":每四个月付息一次

  • "Quarterly":每季度付息一次

  • "BiMonthly":每两月付息一次

  • "Monthly":每月付息一次

  • "EveryFourthWeek":每四周付息一次

  • "BiWeekly":每两周付息一次

  • "Weekly":每周付息一次

  • "Daily":每日付息一次

dayCountConvention STRING 日期计数惯例,可选 "ActualActualISDA", "ActualActualISMA", "Actual365", "Actual360"
discountCurve STRING 定价时参考的贴现曲线名称,如 "CNY_FR_007"
forwardCurve STRING 定价时参考的远期曲线名称,如 "CNY_LPR_1Y"

曲线字段说明

字段名 类型 描述 是否必填
mktDataType STRING 固定填 "Surface"
referenceDate DATE 参考日期
surfaceType STRING 固定填 "IrCapFloorVolatilitySurface"
smileMethod STRING

波动率微笑方法,可选值为:

  • "Linear":线性微笑

  • "CubicSpline":三次样条微笑

  • "SVI":SVI 模型微笑

  • "SABR":SABR 模型微笑

volSmiles DICT(STRING, ANY) 组成的元组

波动率微笑向量,向量中每个元素为一条波动率微笑。

包含以下成员:

  • strikes: DOUBLE 类型向量,表示不同的行权价

  • vols: DOUBLE 类型向量,表示行权价对应的波动率,与 strikes 等长

  • curveParams:字典DICT(STRING, DOUBLE) 类型,表示波动率微笑方法的模型参数,只在 smileMethod 取值 "SVI" 或 "SABR" 时生效:

    • smileMethod = 'SVI': 应包含键 'a', 'b', 'rho', 'm', 'sigma'

    • smileMethod = 'SABR': 应包含键 'alpha', 'beta', 'rho', 'nu'

  • fwd:可选,DOUBLE 类型标量,当 smileMethod 取值 "SVI" 或 "SABR" 时必填,表示远期值

termDates DATE 向量 volSmiles 中每条波动率微笑对应的期限日期
surfaceName STRING 曲面名称
currency STRING 货币,可选值为 "CNY", "USD", "EUR", "GBP", "JPY", "HKD"
iborIndex STRING

表示参考利率,可选值为:

  • "LPR_1Y":1年期贷款市场报价利率

  • "LPR_5Y":5年期贷款市场报价利率

volType STRING

表示波动率类型,可选值为:

  • "Normal"(默认值):正态波动率

  • "Lognormal":对数正态波动率

相关函数:parseInstrument, parseMktData