Quantlib FloatingRateBond расчет денежных потоков

Глядя на пример Bond.cpp: http://quantlib.org/reference/_bonds_8cpp-example.html это выглядит как depoSwapTermStructure а также liborTermStructure точно такая же кривая. Тем не менее, для облигации с плавающей ставкой кажется, что класс FloatingRateBond вычисляет ставки купона и, следовательно, денежные потоки для экземпляра плавающего RateBond, вычисляя форвардные ставки и затем добавляя к нему спред (что мне кажется правильным).

Правильно ли это или в этом примере прогнозируемые денежные потоки рассчитываются путем взятия только спотовой кривой и добавления спреда для получения прогнозных ставок купона?

1

Решение

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

Фактические кривые строятся и хранятся внутри интеллектуальных указателей; например, depoSwapTermStructure (точечная кривая) является boost::shared_ptr<YieldTermStructure>и так bondDiscountingTermStructure, Они в основном ведут себя как указатели на YieldTermStructure,

Тогда у вас есть случаи Handle<YieldTermStructure> (или же RelinkableHandle) которые дают вам другой уровень косвенности: Handle содержит shared_ptr и может переключить его на другое, если это необходимо (обоснование этого и некоторые другие подробности доступны на эта ссылка).

В примере libor3m Индекс передается liborTermStructure обрабатывать, поэтому он будет прогнозировать свои исправления, используя любую кривую, связанную с ним: в этом случае, depoSwapTermStructure, поскольку заявление

liborTermStructure.linkTo(depoSwapTermStructure);

выполняется до оценки облигации. Как вы говорите, ставки купонов рассчитываются путем прогнозирования фиксации индекса вне кривой и добавления спреда. Если мы связались liborTermStructure к другой кривой и снова попросит облигацию о ее денежных потоках, они будут пересчитаны на основе новой кривой.

То же самое происходит для дисконтирования. Какая бы кривая ни была связана с discountingTermStructure будет использоваться для дисконтирования денежных потоков; в примере это было бы bondDiscountingTermStructure,

Что касается расчета ставок купона: каждый купон рассчитывает свою собственную ставку и сумму с помощью BlackIborCouponPricer Экземпляр, который создается сразу после связи и вскоре после этого связан с купонами

setCouponPricer(floatingRateBond.cashflows(),pricer);

Код, который фактически выполняет вычисления, включает в себя BlackIborCouponPricer а также FloatingRateCoupon классы (более подробная информация Вот и в постах, которые следуют), но в конечном итоге ставка рассчитывается в 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;
}
1

Другие решения


По вопросам рекламы [email protected]