首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Quantlib bootstrapping错误,99次迭代后未达到收敛

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

Stack Overflow用户
提问于 2021-08-24 03:25:19
回答 1查看 110关注 0票数 2

试图建立澳元现货收益率曲线使用以下数据从彭博社,RBACOR指数澳大利亚储备银行银行间隔夜现金利率0.03 ADBB1M 1m银行票据0.005 ADBB2M 2m银行票据0.015 ADBB3M 3m银行票据0.015数据来自上周五2021年8月13日,但是以下代码返回我错误RuntimeError:收敛后99次迭代未达到;最后改进4.45714e-05,所需的精度1e-12。我可以将精度降低到1e-04来使其工作,但想检查这里出了什么问题?看起来,100万欧元的银行票据利率令人惊讶地低,而隔夜现金利率太高。欢迎任何帮助/意见/感谢。

代码语言:javascript
复制
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()
EN

回答 1

Stack Overflow用户

发布于 2021-08-24 08:28:08

对于大多数插值,移动节点仅对最近的间隔有影响。相反,在立方(或对数立方)插值中,移动节点会对整个曲线产生影响。

这意味着,当引导过程循环遍历日期时,添加新节点可能会导致早期工具不再准确重新定价。为了避免这种情况,当使用三次插值时,重复自举循环,直到节点收敛到重新定价所有工具的最终曲线。

在您的情况下,无法达到收敛。这可能是因为您的节点数量很少,并且曲线太受约束,或者它也可能与仅使用存款有关,而存款实际上并不使用插值值。

使用具有不同插值的曲线,例如ql.PiecewiseLogLinearDiscount,将避免额外的收敛循环和您得到的误差。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68901406

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档