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
