2015-06-10 11 views
-2

我正在使用FloatingRateBond類創建浮動利率債券對象,我已經正確定價。但是,現在我需要檢索現金流量和骯髒的價格來分解收益。我一直在嘗試以下沒有任何成功:FloatingRateBond現金流檢索和打印

Leg cf=floatingRateBond.cashflows(); 
    Leg::iterator it; 
    for(it=cf.begin();it!=cf.end();++it) 
     cout<<"Type: "<<typeid(*it).name()<< " value:" << *it<<endl; 

輸出:

Type: N5boost10shared_ptrIN8QuantLib8CashFlowEEE value:0x14362a50 
Type: N5boost10shared_ptrIN8QuantLib8CashFlowEEE value:0x14362c40 
Type: N5boost10shared_ptrIN8QuantLib8CashFlowEEE value:0x14362e70 
Type: N5boost10shared_ptrIN8QuantLib8CashFlowEEE value:0x143630a0 
Type: N5boost10shared_ptrIN8QuantLib8CashFlowEEE value:0x143632d0 
Type: N5boost10shared_ptrIN8QuantLib8CashFlowEEE value:0x14363500 
Type: N5boost10shared_ptrIN8QuantLib8CashFlowEEE value:0x14363730 
Type: N5boost10shared_ptrIN8QuantLib8CashFlowEEE value:0x14363960 
Type: N5boost10shared_ptrIN8QuantLib8CashFlowEEE value:0x14363b90 
Type: N5boost10shared_ptrIN8QuantLib8CashFlowEEE value:0x14363dc0 
Type: N5boost10shared_ptrIN8QuantLib8CashFlowEEE value:0x14363ff0 
Type: N5boost10shared_ptrIN8QuantLib8CashFlowEEE value:0x14364220 
Type: N5boost10shared_ptrIN8QuantLib8CashFlowEEE value:0x14364450 
Type: N5boost10shared_ptrIN8QuantLib8CashFlowEEE value:0x14364680 
Type: N5boost10shared_ptrIN8QuantLib8CashFlowEEE value:0x143648b0 
Type: N5boost10shared_ptrIN8QuantLib8CashFlowEEE value:0x14364ae0 
Type: N5boost10shared_ptrIN8QuantLib8CashFlowEEE value:0x14364d10 
Type: N5boost10shared_ptrIN8QuantLib8CashFlowEEE value:0x14364f40 
Type: N5boost10shared_ptrIN8QuantLib8CashFlowEEE value:0x14365170 
Type: N5boost10shared_ptrIN8QuantLib8CashFlowEEE value:0x143653a0 
Type: N5boost10shared_ptrIN8QuantLib8CashFlowEEE value:0x14362660 

感謝

+0

是什麼問題? 謝謝 – shargors

回答

2

你的問題是不是真的清楚。你試圖重複Leg,這應該被定義爲

typedef std::vector< boost::shared_ptr<CashFlow> > Leg;source

所以,如果it = cf.begin(),比*itboost::shared_ptr<CashFlow>型的,這可以解釋的類型N5boost10shared_ptrIN8QuantLib8CashFlowEEE和地址0x14365170

您是否嘗試過再引用一次,得到CashFlow?是你的問題嗎?

0

我有。但是我得到同樣的事情。我的同事通過不使用迭代器,但只是一個簡單的for循環,然後指向 - > amount()

但我不明白,這是不同的,因爲quantlib是建立在STL和boost之上的。

像這樣:

Leg cf=floatingRateBond.cashflows(); 
    for (Size j=0; j<cf.size()-1; j++) { 
      if (!cf[j]->hasOccurred(settlementDate, false)) { 
       Date myDate = cf[j]->date(); 
       Real Amount = cf[j]->amount(); 
       cout << "Date is " << myDate << " | Amount is " << Amount << endl; 


      } 
     } 

如果它這樣做(*它) - >量();它會產生一個錯誤。

+0

'(* it) - > amount()'應該工作,除非計算有問題。錯誤是什麼? –

+0

基本上它告訴我編譯時沒有amount()函數。 –