繁体   English   中英

已知第一现金流与预测现金流相等的Quantlib浮息债券

[英]Quantlib Floating rate bond with known first cash flow and forecasted cash flows equal

我正在尝试为浮动利率债券定价,并且我已经有在C ++上用quantlib建立的折现曲线。 现在,我想做的是使用FloatingRateBond类,并创建一组现金流量,其中第一个现金流量已知(假设与该现金流量相关的指数在上次重置日期已知),并预测剩余现金使用当前索引流动。

为了使图表更加图形化,假定年度付款,并且上次重置日期的指数为1%,重置保证金为1%。 那么,第一笔现金流量大致为2%。 现在假设今天的指数为2%,那么我希望所有剩余现金流量为3%(对“天数”惯例和“工作日”惯例进行适当调整)。

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

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

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

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

为了说明,我们假设我们将使用美元Libor指数。 根据我们将在后面设置的利率期限结构来预测其未来定价。

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

现在构建债券,将保证金添加为伦敦银行同业拆借利率的利差:

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);

为了设置未来的现金流量,请创建具有所需利率的平坦利率曲线(注意约定,使其与Libor指数的约定匹配):

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

(您不必限于固定费率;如果可以引导Libor曲线,则可以使用该值来获取未来票息的实际估计值。)

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

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);

...或创建并使用其他版本。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM