看一下Bond.cpp示例:http://quantlib.org/reference/_bonds_8cpp-example.html,看起来depoSwapTermStructure
和liborTermStructure
是完全相同的曲线。但是,对于 float 利率债券,似乎FloatingRateBond类正在通过计算远期利率然后向其添加价差来计算floatRateBond实例的息票利率,因此也在计算现金流量。
这是正确的吗?还是在本示例中,仅通过使用现货曲线并添加点差来获得预测息票率来计算预测现金流量?
最佳答案
该示例中有两种不同类型的对象在起作用。
实际曲线被建立并存储在智能指针中。例如,depoSwapTermStructure
(点曲线)是boost::shared_ptr<YieldTermStructure>
,bondDiscountingTermStructure
也是。它们基本上充当YieldTermStructure
的指针。
然后,您有了Handle<YieldTermStructure>
(或RelinkableHandle
)的实例,这些实例为您提供了另一种间接方式:Handle
包含一个shared_ptr
,并且可以在需要时将其切换为另一种(在this link上可以找到其原理和更多详细信息)。
在该示例中,libor3m
索引被传递给liborTermStructure
句柄,因此它将通过使用与其链接的任何曲线来预测其固定值:在这种情况下为depoSwapTermStructure
,因为该语句
liborTermStructure.linkTo(depoSwapTermStructure);
在对债券定价之前执行。如您所说,票面利率是通过预测曲线上的固定指数并加上点差来计算的。如果我们将
liborTermStructure
链接到另一条曲线并再次要求债券提供其现金流量,则会根据新曲线重新计算它们。折扣也一样。链接到
discountingTermStructure
的任何曲线将用于折现现金流量;在示例中,该名称为bondDiscountingTermStructure
。至于票息率的计算方式:每个票息都借助于
BlackIborCouponPricer
实例来计算自己的利率和金额,该实例是在债券发行后立即建立的,并在语句之后不久与票息相关联setCouponPricer(floatingRateBond.cashflows(),pricer);
实际执行计算的代码涉及
BlackIborCouponPricer
和FloatingRateCoupon
类(更多详细信息是here和后面的文章),但是最终速率在IborIndex
类中计算为:Rate IborIndex::forecastFixing(const Date& fixingDate) const {
Date d1 = valueDate(fixingDate);
Date d2 = maturityDate(d1);
Time t = dayCounter_.yearFraction(d1, d2);
return forecastFixing(d1, d2, t);
}
Rate IborIndex::forecastFixing(const Date& d1,
const Date& d2,
Time t) const {
DiscountFactor disc1 = termStructure_->discount(d1);
DiscountFactor disc2 = termStructure_->discount(d2);
return (disc1/disc2 - 1.0) / t;
}
关于c++ - Quantlib FloatingRateBond现金流量计算,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31037325/