如何在Quantlib

时间:2017-03-08 19:32:39

标签: c++ quantlib

我非常感谢您从YieldTermStructure指针转移到添加点差的输入,如下所示:

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));

然后我继续创建一个zerospreaded对象,如下所示:

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

但现在我陷入困境,因为如果我继续做类似

之类的事情,代码会反复出现故障
Z_Spread.zeroYieldImpl;

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

还有一种本地方式直接调用折扣函数,就像我现在使用TermStructure对象一样,然后添加当前的传播,如下所示

depoFutSwapTermStructure->discount(*it)

1 个答案:

答案 0 :(得分:0)

我担心你的界面有点混乱了。您尝试在zeroYieldImpl上调用的ZeroSpreadedTermStructure方法受到保护,因此您无法在代码中使用它(至少,这就是我猜测您的代码中断的原因,因为您'不报告你得到的错误。)

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

同样,很难说为什么你对discount的调用失败了,因为你没有引用错误而你没有说出*it在调用中是什么。从您进行报告的初始化以及您编写的调用开始,我猜测您可能已经实例化了ZeroSpreadedTermStructure对象,但您尝试将其与->语法一起使用,就好像它是一个指针。如果是这种情况,则应调用Z_Spread.discount(*it)代替(假设*it解析为数字)。

如果这不是问题,我担心你不得不在你的问题上添加更多细节。

最后,要对QuantLib中的术语结构进行更一般的处理,您可以阅读herehere