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

QuantLib构建澳元即期收益率曲线bootstrapping报错99次迭代未收敛排查

报错根本原因排查

1. 核心日期不匹配

你标注的利率数据取数日期为2021年8月13日,但代码中硬编码的定价日期为2021-07-30,两者相差14天,相当于用A日期的市场利率去拟合B日期的收益率曲线,输入数据和拟合逻辑完全错位,是导致收敛失败的最主要原因。

2. 利率曲线结构异常

你输入的短期利率存在明显的非单调跳变:隔夜利率0.03%、1M利率直接跌到0.005%、2M又跳回0.015%,这种不符合常规市场逻辑的倒挂结构,会让PiecewiseLogCubicDiscount的三次样条拟合算法很难在1e-12的高精度要求下,同时满足所有节点的贴现因子约束,迭代到上限也达不到精度要求。

3. 参数配置错误

  • 计息基准混用:存款工具的计息规则用的是Actual365Fixed,但构建收益率曲线时传入的日计数基准是Actual360,两者不匹配会导致贴现因子计算出现系统偏差,进一步加大拟合难度。
  • 清算天数设置错误:澳元隔夜现金利率(RBACOR)为T+0清算,你给隔夜存款工具设置了2天的清算期,相当于把隔夜工具的到期日延后了2天,和后续1M、2M的期限节点出现逻辑冲突。
修复方案

按以下优先级调整即可解决问题:

  1. 对齐日期:将代码中的dateStr修改为实际取数日期2021-08-13,保证定价日和市场数据日期一致。
  2. 修正参数错误:
    • 隔夜存款工具的清算天数从2改为0,符合RBACOR的交易规则
    • 收益率曲线构建的日计数基准改为Actual365Fixed,和存款工具的计息基准保持一致
  3. 适配异常数据:如果确认1M利率是真实市场数据而非取数错误,可以将拟合方法换成PiecewiseLinearZero或PiecewiseFlatForward,线性拟合对非单调数据的容忍度更高,更容易收敛;如果是取数错误,建议取彭博对应期限的买价卖价中间价,避免异常成交点干扰。
  4. 合理设置精度:金融场景下收益率曲线拟合精度到1e-6就完全满足估值、定价需求,没必要硬卡1e-12的超高标准,市场数据本身的误差远大于这个量级。
修正后代码示例
import QuantLib as ql

# 对齐取数日期
dateStr = '2021-08-13'
pricingDate = ql.DateParser.parseFormatted(dateStr, '%Y-%m-%d')
ql.Settings.instance().evaluationDate = pricingDate

depoHelpers = []
# 隔夜利率清算天数改为0
depoHelpers.append(ql.DepositRateHelper(ql.QuoteHandle(ql.SimpleQuote(0.03/100)),
                                        ql.Period(1, ql.Days),
                                        0,
                                        ql.Australia(),
                                        ql.ModifiedFollowing,
                                        False,
                                        ql.Actual365Fixed()))


depoHelpers.append(ql.DepositRateHelper(ql.QuoteHandle(ql.SimpleQuote(0.005/100)),
                                        ql.Period('1M'),
                                        2,
                                        ql.Australia(),
                                        ql.ModifiedFollowing,
                                        False,
                                        ql.Actual365Fixed()))

depoHelpers.append(ql.DepositRateHelper(ql.QuoteHandle(ql.SimpleQuote(0.015/100)),
                                        ql.Period('2M'),
                                        2,
                                        ql.Australia(),
                                        ql.ModifiedFollowing,
                                        False,
                                        ql.Actual365Fixed()))

depoHelpers.append(ql.DepositRateHelper(ql.QuoteHandle(ql.SimpleQuote(0.015/100)),
                                        ql.Period('3M'),
                                        2,
                                        ql.Australia(),
                                        ql.ModifiedFollowing,
                                        False,
                                        ql.Actual365Fixed()))

# 日计数基准和helper保持一致,可按需换成PiecewiseLinearZero
yieldcurve = ql.PiecewiseLogCubicDiscount(pricingDate,
                                      depoHelpers,
                                      ql.Actual365Fixed())

yieldcurve.enableExtrapolation()
print(yieldcurve.dates())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 00:51:02