如何使用QuantLib计算单名债券价格

How to calculate single-name bond price using QuantLib?

本文关键字:单名债 计算 何使用 QuantLib      更新时间:2023-10-16

我想计算债券的价格,折扣系数是时间的函数,息票是固定的。

我从QuantLib 1.5中找到的例子(bond.cpp)看起来相当复杂。我删除了零息债券和浮动息债券,只留下固定息债券的计算部分。

我不明白的是,根据我的表格,我应该如何定义RATE HELPERS和CURVE BUILDING部分:

工具类型|到期日|报价|贴现率

 CD                 03/04/2015       0.25        0.9999
 CD                 03/18/2015       0.254       0.9998
 CD                 06/17/2015       0.266       0.9997
 CD                 09/16/2015       0.38        0.9996
 CD                 12/16/2015       0.57        0.9995
.....
 SWAP               03/04/2019       1.33        0.94
 SWAP               03/04/2020       1.66        0.92
 SWAP               03/04/2021       1.74        0.89

我应该怎么做才能在QuantLib中建立折扣曲线?

您应该直接使用折扣系数,而不要考虑费率助手和曲线构建。

当你想暗示某个报价的曲线时,可以使用后者;但是,如果你已经计算了折扣系数,你可以使用InterpolatedDiscountCurve类模板直接构建曲线,如:

#include <ql/termstructures/yield/discountcurve.hpp>
...
boost::shared_ptr<YieldTermStructure> discountCurve(
    new InterpolatedDiscountCurve<LogLinear>(dates, discounts,
                                             dayCounter));

其中,datesvector<Date>(必须包括曲线开始的第一个日期,通常是今天的日期),discounts是包含相应折扣因子的vector<double>(包括作为第一个的1),并且dayCounter将用于将日期转换为时间;Actual360()应该可以。

上面的例子使用对数线性插值;您可以通过将LogLinear替换为另一个来更改它(查看<ql/math/interpolations/>文件夹中的可用文件夹)。