【问题标题】:Quantlib FloatingRateBond cashflow computationQuantlib FloatingRateBond 现金流计算
【发布时间】:2015-06-24 21:24:30
【问题描述】:

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

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

【问题讨论】:

  • 在下面的回答中,我试图解释示例中发生的情况。但是,我不太确定您列出的两种替代方案之间的区别。 “计算远期利率然后加上点差”和“只取即期曲线并加上点差”有什么区别?如果不在即期曲线上,您将如何计算远期利率?
  • 这是使用点曲线完成的,我同意。所以你是说在计算远期利率以计算现金流的过程中的某个地方,对吗?如果是这样,这些远期利率的计算在哪里完成?你能指点我吗?我不知道远期利率是如何计算的,也不知道具体是在哪里完成的

标签: c++ floating forward rate quantlib


【解决方案1】:

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

实际曲线被构建并存储在智能指针中;例如,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);

实际执行计算的代码涉及BlackIborCouponPricerFloatingRateCoupon 类(更多详细信息请参见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;
}

【讨论】:

  • 我很困惑。 libor3m 是如何预测其定价的,它是在计算远期利率还是在寻找与现金流日期相关的即期利率并将其分配给特定的票面利率,然后添加价差?如果我想通过使用远期利率估计来计算现金流,我是否必须创建一个新的远期利率YieldTermStructure(称之为ForwardTermStructure)和一个新的RelinkableHandle,或者我是否像在bond.cpp 示例并假设在某处完成了远期利率计算?
  • 哦,我看到了混乱的根源。不,息票根据即期曲线计算远期利率。我会在答案中添加一些指示。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-21
相关资源
最近更新 更多