-3

我正在使用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

谢谢

4

2 回答 2

2

你的问题不是很清楚。您正在尝试 iterate Leg,应将其定义为

typedef std::vector< boost::shared_ptr<CashFlow> > Leg;资源

所以如果it = cf.begin(), than*it是 type boost::shared_ptr<CashFlow>,这将解释类型N5boost10shared_ptrIN8QuantLib8CashFlowEEE和地址0x14365170

您是否尝试过再次取消参考以获取CashFlow?那是你的问题吗?

于 2015-06-10T17:35:52.753 回答
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;


            }
        }

如果是 (*it)->amount(); 它会产生错误。

于 2015-06-10T21:07:31.080 回答