我非常感谢您从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)
答案 0 :(得分:0)
我担心你的界面有点混乱了。您尝试在zeroYieldImpl
上调用的ZeroSpreadedTermStructure
方法受到保护,因此您无法在代码中使用它(至少,这就是我猜测您的代码中断的原因,因为您'不报告你得到的错误。)
您与创建的曲线交互的方式是通过它继承的公共YieldTermStructure
接口;其中包括您要调用的discount
方法,以及zeroRate
或forwardRate
等方法。
同样,很难说为什么你对discount
的调用失败了,因为你没有引用错误而你没有说出*it
在调用中是什么。从您进行报告的初始化以及您编写的调用开始,我猜测您可能已经实例化了ZeroSpreadedTermStructure
对象,但您尝试将其与->
语法一起使用,就好像它是一个指针。如果是这种情况,则应调用Z_Spread.discount(*it)
代替(假设*it
解析为数字)。
如果这不是问题,我担心你不得不在你的问题上添加更多细节。