c++ - Quantlib 已知第一现金流量与预测现金流量相等的 float 利率债券

标签 c++ floating rate quantlib

我正在尝试对 float 利率债券进行定价,并且我已经使用 C++ 上的 quantlib 构建了贴现曲线。现在我想做的是使用 FloatingRateBond 类并创建一组现金流量,其中第一个现金流量已知(假定与该现金流量相关的指数在最后重置日期已知)并预测剩余现金使用当前索引的流量。

为了使其更加形象化,假设每年付款,并且最后重置日期的指数为 1%,重置 margin 为 1%。那么第一笔现金流大概就是2%。现在假设今天的指数是 2%,那么我希望所有剩余的现金流量都是 3%(根据天数惯例和营业日惯例进行适当调整)。

如何为 FloatingRateBond 类的实例创建这样的现金流结构?

最佳答案

首先,我将快速构建债券,从 QuantLib 版本中的债券示例中复制一些代码(另外,免责声明:我还没有尝试编译下面的代码)。有关所涉及的类的更多详细信息,请参阅 QuantLib 文档。

让我们假设按您所说的每年付款:

Schedule schedule(startDate, maturityDate, Period(Annual),
                  calendar, convention, convention,
                  DateGeneration::Backward, true);

为了便于说明,我们假设我们将使用美元 Libor 指数。其 future 的定价是根据我们稍后设定的利率期限结构来预测的。

RelinkableHandle<YieldTermStructure> liborTermStructure;
boost::shared_ptr<IborIndex> libor(
             new USDLibor(Period(1,Years),liborTermStructure));

现在构建债券,添加 margin 作为 LIBOR 利率的利差:

FloatingRateBond bond(settlementDays, faceAmount,
                      schedule, libor, dayCounter,
                      convention, fixingDays,
                      // gearings
                      std::vector<Real>(1, 1.0),
                      // spreads
                      std::vector<Rate>(1, 0.001));

现在要获得您想要的优惠券,您只需设置相应的市场数据即可。要设置第一现金流量的利率,请存储 Libor 指数过去的固定值:

libor->addFixing(resetDate, 0.01);

为了设定 future 现金流,请创建具有所需利率的平坦利率曲线(注意惯例,使其与 Libor 指数相匹配):

boost::shared_ptr<YieldTermStructure> flatRate(
    new FlatForward(today, 0.01, dayCounter, Simple, Annual));
liborTermStructure.linkTo(flatRate);

(您不一定局限于统一利率;如果您可以引导 Libor 曲线,您就可以使用该曲线来获得对 future 息票的实际估计。)

此时,您应该能够提取债券息票并检查它们是否符合预期:

std::vector<boost::shared_ptr<CashFlow> > cashflows = bond.cashflows();
for (std::size_t i=0; i < cashflows.size(); ++i)
    std::cout << cashflows[i]->date() << "    "
              << cashflows[i]->amount() << "\n";

如果您还想调用 bond.cleanPrice() 等方法,则需要告诉债券如何对现金流进行贴现:

RelinkableHandle<YieldTermStructure> discountingTermStructure;
boost::shared_ptr<PricingEngine> bondEngine(
             new DiscountingBondEngine(discountingTermStructure));
bond.setPricingEngine(bondEngine);

您可以使用用于预测的同一曲线进行折扣...

discountingTermStructure.linkTo(flatRate);

...或者创建并使用不同的一个。

关于c++ - Quantlib 已知第一现金流量与预测现金流量相等的 float 利率债券,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30870599/

相关文章:

javascript - Ionic2 + Angular2 - 带有 ionic 图标星号的动态速率值

c++ - g++ 编译器无法编译完全定义的类型

c++ - 包含 LU 分解的矩阵

c++ - 好奇除法结果

css - 在 DIV 旁边制作 float 图像?

调整大小时的 CSS Float : unwanted pushdown of element (cause of margin/padding) (responsive design)

ios - 在 iOS 中是否有任何显示评级警报的默认 API?

c++模板或+运算符从指针创建 vector

android - 在其他应用程序顶部带有 handle (而不是操作栏)的可拖动抽屉

c# - 使用 C# 以编程方式确定计算机的最大硬盘驱动器数据传输速率