尝试使用彭博社的以下数据来构建澳元即期 yield 曲线,RBACOR指数澳大利亚储备银行银行间隔夜现金利率0.03 ADBB1M 100万银行票据0.005 ADBB2M 200万银行票据0.015 ADBB3M 300万银行票据0.015数据是从上周五 2021 年 8 月 13 日开始,但是下面的代码返回错误 RuntimeError:在 99 次迭代后未达到收敛;最后改进 4.45714e-05,要求精度 1e-12。我可以将精度降低到 1e-04 来完成这项工作,但想检查这里出了什么问题?看起来 100 万银行汇票利率出奇的低,而隔夜现金利率却太高。欢迎/赞赏任何帮助/评论。
dateStr = '2021-07-30'
pricingDate = ql.DateParser.parseFormatted(dateStr, '%Y-%m-%d')
depoHelpers = []
depoHelpers.append(ql.DepositRateHelper(ql.QuoteHandle(ql.SimpleQuote(0.03/100)),
ql.Period(1, ql.Days),
2,
ql.Australia(),
ql.ModifiedFollowing,
False,
ql.Actual365Fixed()))
depoHelpers.append(ql.DepositRateHelper(ql.QuoteHandle(ql.SimpleQuote(0.0051/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()))
yieldcurve = ql.PiecewiseLogCubicDiscount(pricingDate,
depoHelpers,
ql.Actual360())
yieldcurve.enableExtrapolation()
yieldcurve.dates()
最佳答案
对于大多数插值,移动节点仅对最近的间隔产生影响。相反,在三次(或对数三次)插值中,移动节点会对整个曲线产生影响。
这意味着,随着引导过程在日期上循环,添加新节点可能会导致早期工具不再准确地重新定价。为了避免这种情况,在使用三次插值时,会重复引导循环,直到节点收敛到对所有工具重新定价的最终曲线。
就您的情况而言,尚未达到收敛。可能是因为您的节点数量较少,并且曲线过于受限,或者也可能与仅使用存款有关,而存款实际上并不使用插值。
使用具有不同插值的曲线,例如 ql.PiecewiseLogLinearDiscount
,将避免额外的收敛循环和您收到的错误。
关于bootstrapping - Quantlib bootstrapping 错误,99 次迭代后未达到收敛,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68901406/