Оценка и анализ облигаций в Python
Joshua Mayhew
Options Trader
Вспомним формулу цены бескупонной облигации:
$PV = \frac{FV}{(1 + r)^n}$
Выразим из этого уравнения доходность $(r)$:
$FV = PV \times (1 + r)^n$
$ \frac{FV}{PV} = (1 + r)^n$
$ \sqrt[n]\frac{FV}{PV} = (1 + r)$
$ \sqrt[n]\frac{FV}{PV} -1 = r$
Рассмотрим ту же бескупонную облигацию, решая задачу в обратном направлении:
Какова доходность этой облигации?
Бескупонная облигация на 3 года, цена 90,19 USD, номинал 100 USD:
$r = \sqrt[n]\frac{FV}{PV} -1$
ytm = (100 / 90.19) ** (1/3) - 1
print(ytm)
0.035
Для обозначения доходности к погашению используем переменную ytm.
Формула цены купонной облигации:
$ PV = \frac{C}{(1 + r)^1} + \frac{C}{(1 + r)^2} + ... +\frac{C}{(1 + r)^n} + \frac{P}{(1 + r)^n}$
$ = \sum_{i=1}^n \frac{C}{(1 + r)^i} + \frac{P}{(1 + r)^n}$
Это уравнение нельзя явно разрешить относительно $r$
Для нахождения $r$ используется метод перебора
Именно так работает функция npf.rate()
Рассмотрим купонную облигацию из предыдущего примера:
Какова её доходность к погашению?
Купонная облигация на 3 года, годовой купон 3%, цена 97,22 USD:
import numpy_financial as npf
npf.rate(nper=3, pmt=3, pv=-97.22, fv=100)
0.04
Обратите внимание: PV задаётся отрицательным числом.
Это связано с тем, что цена облигации — это расходы покупателя (отрицательный денежный поток).
Оценка и анализ облигаций в Python