Оцінювання та аналіз облігацій у 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 роки, ціна USD 90.19, номінал USD 100:
$r = \sqrt[n]\frac{FV}{PV} -1$
ytm = (100 / 90.19) ** (1/3) - 1
print(ytm)
0.035
Використаємо ytm для 'yield to maturity'.
Формула для купонної облігації:
$ 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% річних, ціна USD 97.22:
import numpy_financial as npf
npf.rate(nper=3, pmt=3, pv=-97.22, fv=100)
0.04
Пам'ятайте: PV слід задавати від'ємним числом.
Це тому, що ціна облігації — це гроші, які ви сплачуєте (негативний грошовий потік).
Оцінювання та аналіз облігацій у Python