bootstrapping - Quantlib bootstrapping 错误,99 次迭代后未达到收敛

标签 bootstrapping quantlib

尝试使用彭博社的以下数据来构建澳元即期 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/

相关文章:

c++ - 在 C++ 中乘以枚举

python - 从 Quantlib BachelierSwaption 价格检索 Black vol

python - PiecewiseCubicZero 和 PiecewiseLogCubicDiscount 之间的区别

PHP + mySQL 递归选择创建层次菜单

go - Go 运行时怎么可能用 Go 编写?

c# - 使用 ASP.NET MVC 的 ViewBag foreach 循环中图像滑动不起作用

javascript - 为 javascript 安装 quantlib

algorithm - 数据结构引导示例?

zend-framework - 如何在基于 Zend Framework 的应用程序中的应用程序 Bootstrap 中使用模块中的模型类?

c# - 使用 Quantlib 时尝试为仪器定价时出错