Quantlib bootstrapping错误,99次迭代后仍未收敛



尝试使用以下来自彭博社的数据构建澳元的现货收益率曲线,RBACOR指数澳大利亚储备银行银行间隔夜现金利率0.03 ADBB1M 1m银行票据0.005 ADBB2M 2m银行票据0.015 ADBB3M 3m银行票据0.015数据来自上周五20121-08-13,然而下面的代码返回我错误RuntimeError: 99次迭代后未达到收敛;最后改进4.45714 - e-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,将避免额外的收敛环路和您得到的误差。

最新更新