查看Bond.cpp示例:http://quantlib.org/reference/_bonds_8cpp-example.html看起来depoSwapTermStructure
和liborTermStructure
完全相同。然而,对于浮动利率债券,似乎FloatingRateBond类通过计算远期利率然后将利差加到其上来计算浮动利率债券实例的票面利率,从而计算现金流(这听起来对我来说是正确的)。
这是正确的,还是这个例子的情况是,通过仅采用现货曲线计算预测现金流并加上差价来获得预测的票面利率?
答案 0 :(得分:1)
示例中有两种不同类型的对象。
实际曲线构建并存储在智能指针内;例如,In [221]:
df.loc[df['b'],'a'].values
Out[221]:
array(['c', 'c', 'c', 'c', 'c', 'd', 'd', 'd', 'd', 'd'], dtype=object)
(点曲线)是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以及后续帖子),但最终费率是在{{{ 1}} class as:
IborIndex