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(), чем *it имеет тип boost::shared_ptr<CashFlow>, которая могла бы объяснить тип N5boost10shared_ptrIN8QuantLib8CashFlowEEE и адрес 0x14365170.

Вы пытались снять рефери еще раз, чтобы получить CashFlow? Это ваша проблема?

0

У меня есть. однако я получаю то же самое. Мой коллега решил это, не используя итератор, но просто простую петлю, а затем указав на -> amount()

Я не понимаю, как это отличается от того, что квантлиб построен на 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

В основном это говорило мне, что функции компиляции не было(). –

 Смежные вопросы

  • Нет связанных вопросов^_^