Wycena i analiza obligacji w Pythonie
Joshua Mayhew
Options Trader
Przypomnijmy wzór na cenę obligacji zerokuponowej:
$PV = \frac{FV}{(1 + r)^n}$
Możemy przekształcić to równanie, aby wyznaczyć rentowność $(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$
Przeanalizujmy wcześniejszą obligację zerokuponową:
Jaka jest rentowność tej obligacji?
3-letnia obligacja zerokuponowa, cena 90,19 USD, wartość nominalna 100 USD:
$r = \sqrt[n]\frac{FV}{PV} -1$
ytm = (100 / 90.19) ** (1/3) - 1
print(ytm)
0.035
Będziemy używać ytm dla „rentowności do wykupu".
Wzór na cenę obligacji kuponowej:
$ 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}$
Tego równania nie można przekształcić względem $r$
Wykorzystujemy metodę prób i błędów, aby znaleźć $r$
W ten sposób działa funkcja npf.rate()
Rozważmy wcześniejszą obligację kuponową, która:
Jaka jest jej rentowność do wykupu?
3-letnia obligacja kuponowa, kupon roczny 3%, cena 97,22 USD:
import numpy_financial as npf
npf.rate(nper=3, pmt=3, pv=-97.22, fv=100)
0.04
Pamiętaj, że PV musi być liczbą ujemną.
Cena obligacji to środki, które płacimy (ujemny przepływ gotówkowy).
Wycena i analiza obligacji w Pythonie