1

查看 Bond.cpp 示例: http: //quantlib.org/reference/_bonds_8cpp-example.html它看起来depoSwapTermStructureliborTermStructure完全相同的曲线。但是,对于浮动利率债券,FloatingRateBond 类似乎正在计算票面利率,因此是通过计算远期利率然后将利差添加到它的浮动利率债券实例的现金流量(这听起来对我来说是正确的)。

这是正确的,还是在这个例子中,预测现金流是通过仅采用即期曲线并添加利差来获得预测票面利率来计算的?

4

1 回答 1

1

示例中有两种不同类型的对象在起作用。

实际曲线构建并存储在智能指针中;例如,depoSwapTermStructure(点曲线)是 a boost::shared_ptr<YieldTermStructure>,所以是bondDiscountingTermStructure。它们基本上表现为指向YieldTermStructure.

然后,您有Handle<YieldTermStructure>(or RelinkableHandle) 的实例,它为您提供了另一个间接级别: aHandle包含 ashared_ptr并且可以在需要时将其切换为另一个(其基本原理和更多详细信息可在此链接中获得)。

在示例中,libor3m索引通过liborTermStructure句柄传递,因此它将通过使用与其链接的任何曲线来预测其定位:在这种情况下,depoSwapTermStructure,因为语句

liborTermStructure.linkTo(depoSwapTermStructure);

在债券定价之前执行。正如您所说,票面利率是通过预测曲线外的指数定价并加上点差来计算的。如果我们链接liborTermStructure到另一条曲线并再次询问债券的现金流量,它们将根据新曲线重新计算。

打折也是如此。无论连接到什么曲线,discountingTermStructure都将用于贴现现金流;在这个例子中,那将是bondDiscountingTermStructure.

至于票面利率是如何计算的:每张票面券在债券之后立即建立的实例的帮助下计算自己的利率和金额,BlackIborCouponPricer并在不久后通过声明与票面券相关联

setCouponPricer(floatingRateBond.cashflows(),pricer);

实际执行计算的代码涉及BlackIborCouponPricerFloatingRateCoupon类(更多细节在这里和后面的帖子中),但最终在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;
}
于 2015-06-25T13:05:29.343 回答