如何在Quantlib中的现有屈服对象添加常数扩展

How to add a constant spread to an existing YieldTermStructure object in Quantlib

本文关键字:对象 屈服 添加 常数 扩展 Quantlib      更新时间:2023-10-16

我真的很感谢您从屈服指针转移到添加差价的输入的输入:::

boost::shared_ptr<YieldTermStructure> depoFutSwapTermStructure(new PiecewiseYieldCurve<Discount,
        LogLinear>(settlementDate, depoFutSwapInstruments_New, termStructureDayCounter, 1.0e-15));

我尝试添加下面的50个bps的传播...

double OC_Spread(0.50 / 100);
Rate OCSQuote = OC_Spread;
boost::shared_ptr<Quote> OCS_Handler(new SimpleQuote(OCSQuote));

i然后继续创建一个以下零件对象:

ZeroSpreadedTermStructure Z_Spread(Handle<YieldTermStructure>(*depoFutSwapTermStructure), Handle<Quote>(OCS_Handler));

,但是现在我被卡住了,如果我继续执行

之类的事情,代码会反复崩溃
Z_Spread.zeroYieldImpl;

上述代码有什么问题。我尝试了上述方法的几种口味,并且在所有方面都失败了。

也有一种本机的方式直接调用折扣函数,就像我现在使用术语结构对象一样,在添加当前如下以下的verver之前?

depoFutSwapTermStructure->discount(*it)

我恐怕您的接口有点混杂。您试图调用ZeroSpreadedTermStructurezeroYieldImpl方法受到保护,因此您无法从代码中使用它(至少这就是我猜测您的代码断开的方式,因为您没有报告您遇到的错误)。

与创建的曲线交互的方式是通过其继承的公共YieldTermStructure接口;其中包括您要调用的discount方法,以及zeroRateforwardRate等方法。

再次,很难说出为什么您对discount的呼叫会完全失败,因为您没有引用错误,也没有说呼叫中的*it是什么。从您报告的初始化以及您写的电话中,我猜您可能已经实例化了ZeroSpreadedTermStructure对象,但是您正在尝试将其与->语法一起使用,就像它是指指针一样。如果是这样,请致电Z_Spread.discount(*it)应该起作用(假设*it解析为一个数字)。

如果不是问题,恐怕您必须在您的问题中添加更多细节。

最后,对于Quantlib中术语结构的更一般处理,您可以在这里和此处阅读。