Как рассчитать цену облигации с одним наименованием с помощью QuantLib?

Я хочу рассчитать цену облигации с коэффициентами дисконтирования, известными как функция времени, и фиксированным купоном.

Пример, который я нашел (bond.cpp) из QuantLib 1.5, выглядит довольно сложным. Я удалил облигацию с нулевой облигацией и облигацию с плавающим купоном, оставив только часть расчета облигации с фиксированным купоном.

Часть, которую я не понимаю, заключается в том, как мне определить части 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?


person Heifetz_Fan    schedule 05.03.2015    source источник


Ответы (1)


Вы должны использовать свои коэффициенты дисконтирования напрямую и забыть о помощниках по ставкам и построении кривой.

Последние используются, когда вы хотите получить кривую от какой-либо котируемой цены; но если вы уже рассчитали коэффициенты дисконтирования, вы можете просто использовать шаблон класса InterpolatedDiscountCurve и напрямую построить кривую, например:

#include <ql/termstructures/yield/discountcurve.hpp>

...

boost::shared_ptr<YieldTermStructure> discountCurve(
    new InterpolatedDiscountCurve<LogLinear>(dates, discounts,
                                             dayCounter));

где dates — это vector<Date> (который должен включать в качестве первой даты начало кривой, обычно сегодняшнюю дату), discounts — это vector<double>, содержащий соответствующие коэффициенты дисконтирования (включая 1 в качестве первого), а dayCounter будет использоваться для преобразования дат во время; Actual360() должно быть в порядке.

В приведенном выше примере используется логарифмическая интерполяция; вы можете изменить его, заменив LogLinear другим (ищите доступные в папке <ql/math/interpolations/>).

person Luigi Ballabio    schedule 05.03.2015