irVanillaSwapRateCalculator

首发版本:3.00.6.4

语法

irVanillaSwapRateCalculator(instrument, date, discountCurve, forwardCurve, assetPriceCurve)

详情

计算使固定-浮动利率互换净现值为 0 的固定腿利率。

参数

注意:所有输入向量必须等长,标量自动扩展以匹配向量长度。

instrument INSTRUMENT 类型标量或向量,元素为 IrFixedFloatingSwap 对象,表示待计算固定腿利率的固定-浮动利率互换。目前仅支持浮动端参考利率为 FR_007 或 SHIBOR_3M 的互换。

date DATE 类型标量或向量,表示计算日期。

discountCurve MKTDATA 类型标量或向量,元素为 IrYieldCurve 对象,表示用于计算折现因子的即期曲线。每条曲线的 referenceDate 必须与对应的 date 相同。

forwardCurve MKTDATA 类型标量或向量,元素为 IrYieldCurve 对象,表示用于计算远期利率的即期曲线。每条曲线的 referenceDate 必须与对应的 date 相同。

assetPriceCurve MKTDATA 类型标量或向量,元素为 AssetPriceCurve 对象,表示浮动端参考利率的历史定盘数据。

返回值

  • 所有参数均为标量时,返回 DOUBLE 标量。

  • 任一参数为向量时,返回与输入向量等长的 DOUBLE 向量。

批量计算时,逐项计算失败的位置返回 NULL,其余项仍返回各自的计算结果。

例子

例 1. 计算一笔以 FR_007 为浮动端参考利率的固定-浮动利率互换的固定腿利率。

swapSpec = {
    "productType": "Swap",
    "swapType": "IrSwap",
    "irSwapType": "IrFixedFloatingSwap",
    "start": 2025.06.16,
    "maturity": 2028.06.16,
    "frequency": "Quarterly",
    "fixedRate": 0.018,
    "calendar": "CFET",
    "fixedDayCountConvention": "Actual365",
    "floatingDayCountConvention": "Actual365",
    "payReceive": "Pay",
    "iborIndex": "FR_007",
    "spread": 0.0001,
    "notionalCurrency": "CNY",
    "notionalAmount": 1E8
}

pricingDate = 2025.08.18
yieldCurveSpec = {
    "mktDataType": "Curve",
    "curveType": "IrYieldCurve",
    "referenceDate": pricingDate,
    "currency": "CNY",
    "curveName": "CNY_FR_007",
    "dayCountConvention": "Actual365",
    "compounding": "Continuous",
    "interpMethod": "Linear",
    "extrapMethod": "Flat",
    "frequency": "Annual",
    "dates": [2025.08.21, 2025.08.27],
    "values": [1.5, 1.5] / 100
}

fixingCurveSpec = {
    "mktDataType": "Curve",
    "curveType": "AssetPriceCurve",
    "referenceDate": pricingDate,
    "curveName": "PRICE_FR_007",
    "dates": [2025.05.09, 2025.05.12],
    "values": [2, 2] / 100
}

instrument = parseInstrument(obj=swapSpec)
yieldCurve = parseMktData(dict=yieldCurveSpec)
fixingCurve = parseMktData(dict=fixingCurveSpec)

fixedRate = irVanillaSwapRateCalculator(
    instrument=instrument,
    date=pricingDate,
    discountCurve=yieldCurve,
    forwardCurve=yieldCurve,
    assetPriceCurve=fixingCurve
)
fixedRate
// output: 0.014147990440065

例 2. 分别使用两条远期曲线,计算同一笔利率互换的固定腿利率。

swapSpec = {
    "productType": "Swap",
    "swapType": "IrSwap",
    "irSwapType": "IrFixedFloatingSwap",
    "start": 2025.06.16,
    "maturity": 2028.06.16,
    "frequency": "Quarterly",
    "fixedRate": 0.018,
    "calendar": "CFET",
    "fixedDayCountConvention": "Actual365",
    "floatingDayCountConvention": "Actual365",
    "payReceive": "Pay",
    "iborIndex": "FR_007",
    "spread": 0.0001,
    "notionalCurrency": "CNY",
    "notionalAmount": 1E8
}

pricingDate = 2025.08.18
yieldCurveSpec = {
    "mktDataType": "Curve",
    "curveType": "IrYieldCurve",
    "referenceDate": pricingDate,
    "currency": "CNY",
    "curveName": "CNY_FR_007",
    "dayCountConvention": "Actual365",
    "compounding": "Continuous",
    "interpMethod": "Linear",
    "extrapMethod": "Flat",
    "frequency": "Annual",
    "dates": [2025.08.21, 2025.08.27],
    "values": [1.5, 1.5] / 100
}

fixingCurveSpec = {
    "mktDataType": "Curve",
    "curveType": "AssetPriceCurve",
    "referenceDate": pricingDate,
    "curveName": "PRICE_FR_007",
    "dates": [2025.05.09, 2025.05.12],
    "values": [2, 2] / 100
}

instrument = parseInstrument(obj=swapSpec)
yieldCurve = parseMktData(dict=yieldCurveSpec)
fixingCurve = parseMktData(dict=fixingCurveSpec)

higherForwardCurveSpec = yieldCurveSpec
higherForwardCurveSpec["values"] = [3.0, 3.0] / 100
higherForwardCurve = parseMktData(dict=higherForwardCurveSpec)

fixedRates = irVanillaSwapRateCalculator(
    instrument=instrument,
    date=pricingDate,
    discountCurve=yieldCurve,
    forwardCurve=[yieldCurve, higherForwardCurve],
    assetPriceCurve=fixingCurve
)
fixedRates
// output: [0.014147990440065, 0.028247897683873]

相关函数: irFixedFloatingSwapPricer,parseInstrument,parseMktData