You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

QuantLib v1.26中两类基差互换RateHelper的Bootstrap使用咨询

QuantLib v1.26 基差互换RateHelper曲线构建实操指引

一、先搞懂这俩Helper的定位

  • IborIborBasisSwapRateHelper:专门处理Libor-Libor基差互换,用来同步校准两条不同期限/币种的Ibor曲线
  • OvernightIborBasisSwapRateHelper:处理OIS-Ibor基差互换,核心价值是用它同时搞定OIS贴现曲线(自带投影曲线)和IRS曲线(依赖OIS曲线做贴现)

二、用OvernightIborBasisSwapRateHelper 构建双曲线实操(Python代码)

1. 先搭基础环境

所有曲线构建的前置操作,先把日期、日历、计息规则这些定好:

import QuantLib as ql

# 设置估值日
today = ql.Date(15, ql.July, 2024)
ql.Settings.instance().evaluationDate = today
# 用TARGET日历(欧元区常用,其他币种换对应日历)
calendar = ql.TARGET()
day_counter = ql.Actual360()

2. 定义Overnight指数(OIS曲线核心)

OIS曲线依赖隔夜指数,比如欧元区的EONIA、美元的SOFR,这里以EONIA为例:

eonia = ql.Eonia()
# 先搞个临时OIS曲线用DepositHelper搭,后面会用基差互换校准
ois_deposits = [
    ql.DepositRateHelper(ql.QuoteHandle(ql.SimpleQuote(0.03)),
                         ql.Period(1, ql.Days), 2, calendar, ql.Following,
                         False, day_counter)
]
initial_ois_curve = ql.PiecewiseFlatForward(0, calendar, ois_deposits, day_counter)
ois_curve_handle = ql.YieldTermStructureHandle(initial_ois_curve)
# 给EONIA绑定临时曲线,顺便加个历史定盘价(可选,没有也能跑)
eonia.addFixing(ql.Date(12, ql.July, 2024), 0.03)
eonia.setTermStructure(ois_curve_handle)

3. 定义Ibor指数(IRS曲线核心)

比如欧元区的6M Libor,这里先绑定临时OIS曲线做贴现:

eur_6m_libor = ql.Euribor6M(ois_curve_handle)

4. 准备OIS-Ibor基差互换报价

假设你有1Y、2Y、5Y的基差报价(比如15bps=0.0015),把这些转成RateHelper:

basis_quotes = [
    (ql.Period(1, ql.Years), 0.0015),
    (ql.Period(2, ql.Years), 0.0018),
    (ql.Period(5, ql.Years), 0.0022)
]

basis_helpers = []
for tenor, spread in basis_quotes:
    helper = ql.OvernightIborBasisSwapRateHelper(
        ql.QuoteHandle(ql.SimpleQuote(spread)),
        tenor,
        calendar,
        ql.Following,
        day_counter,
        eonia,
        eur_6m_libor,
        ois_curve_handle  # 传入待校准的OIS曲线handle
    )
    basis_helpers.append(helper)

5. 同步校准OIS曲线和IRS曲线

这一步是核心,OIS曲线要把Deposit和基差Helper放一起校准,IRS曲线用已校准的OIS做贴现:

# 合并OIS的Deposit和基差Helper,构建最终OIS曲线(自动校准基差互换)
final_ois_helpers = ois_deposits + basis_helpers
final_ois_curve = ql.PiecewiseLogCubicDiscount(0, calendar, final_ois_helpers, day_counter)
ois_curve_handle.linkTo(final_ois_curve)

# 现在构建IRS曲线:用Libor存款、期货、互换,贴现用刚校准好的OIS曲线
irs_deposits = [
    ql.DepositRateHelper(ql.QuoteHandle(ql.SimpleQuote(0.032)),
                         ql.Period(6, ql.Months), 2, calendar, ql.Following,
                         False, day_counter)
]
irs_futures = [
    ql.FuturesRateHelper(ql.QuoteHandle(ql.SimpleQuote(96.7)),
                         ql.Date(15, ql.January, 2025), calendar, day_counter,
                         ql.Following, eur_6m_libor, ois_curve_handle)
]
irs_swaps = [
    ql.SwapRateHelper(ql.QuoteHandle(ql.SimpleQuote(0.035)),
                      ql.Period(10, ql.Years), calendar, ql.Annual,
                      ql.Unadjusted, day_counter, eur_6m_libor,
                      ql.QuoteHandle(), ql.Period(0, ql.Days), ois_curve_handle)
]
irs_helpers = irs_deposits + irs_futures + irs_swaps
irs_curve = ql.PiecewiseLogCubicDiscount(0, calendar, irs_helpers, day_counter)
irs_curve_handle = ql.YieldTermStructureHandle(irs_curve)

# 最后别忘了更新Libor指数的投影曲线为刚校准的IRS曲线
eur_6m_libor.setTermStructure(irs_curve_handle)

三、必踩坑的注意事项

  • OIS曲线的双重身份:Overnight指数的termStructure既是贴现曲线,也是自身的投影曲线(因为OIS是隔夜利率,不需要额外投影)
  • 临时曲线的作用:初始OIS曲线只是个“占位符”,加入基差Helper后,QuantLib会自动迭代校准到符合基差互换报价的曲线
  • Libor指数的绑定顺序:IRS曲线建好后必须更新Libor的termStructure,不然后续定价会用错投影曲线
  • 报价单位要统一:基差是年化差值,比如15bps要传0.0015,和其他RateHelper的报价单位保持一致

四、IborIborBasisSwapRateHelper 快速上手

如果是Libor-Libor基差互换(比如3M vs 6M Libor),逻辑类似:

  1. 定义两个Ibor指数,其中一个先绑定初始贴现曲线
  2. 用IborIborBasisSwapRateHelper传入基差报价、期限、两个指数、贴现曲线handle
  3. 将Helper加入其中一条曲线的校准列表,同步得到两条匹配的曲线

内容的提问来源于stack exchange,提问作者raghav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 17:05:29