2017-03-08 24 views
1

我會很感激你的投入上從YieldTermStructure指針移動到添加蔓延如下::如何恆定的分佈添加到現有YieldTermStructure對象Quantlib

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

的我嘗試添加一個蔓延50個基點如下...

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

恐怕你的界面有點混亂起來。你試圖在ZeroSpreadedTermStructure上調用的zeroYieldImpl方法受到保護,所以你不能在你的代碼中使用它(至少,這就是我猜測你的代碼中斷的原因,因爲你沒有報告你得到的錯誤) 。

您與您創建的曲線交互的方式是通過它繼承的公共YieldTermStructure接口;其中包括您要撥打的discount方法,以及諸如zeroRateforwardRate等方法。

同樣,很難說爲什麼你的電話discount不準確,因爲你沒有引用錯誤,你也沒有說什麼*it是在呼叫。從你做的初始化報告和從你寫的調用中,我猜你可能已經實例化了一個ZeroSpreadedTermStructure對象,但是你試圖將它與->語法一起使用,就好像它是一個指針一樣。如果是這種情況,則撥打Z_Spread.discount(*it)應該起作用(假設*it解析爲數字)。

如果這不是問題,恐怕您必須在您的問題中添加更多的細節。

最後,對於QuantLib中術語結構的更一般處理,您可以閱讀herehere

相關問題