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

Спасибо

-2

Решение

Ваш вопрос не совсем понятен. Вы пытаетесь повторить Leg, который должен быть определен как

typedef std::vector< boost::shared_ptr<CashFlow> > Leg;источник

Так что если it = cf.begin(), чем *it имеет тип boost::shared_ptr<CashFlow>, который бы объяснил тип N5boost10shared_ptrIN8QuantLib8CashFlowEEE и адрес 0x14365170,

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

2

Другие решения

Я имею. однако я получаю то же самое. Моя коллега решила это, не используя итератор, а просто цикл 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

По вопросам рекламы [email protected]