Waardering en analyse van obligaties in Python
Joshua Mayhew
Options Trader
Herinner de prijsformule voor een zerocouponobligatie:
$PV = \frac{FV}{(1 + r)^n}$
We kunnen dit herschikken om het rendement $(r)$ te vinden:
$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$
Kijk terug naar dezelfde zerocouponobligatie, nu achteruit redeneren:
Wat is het rendement van deze obligatie?
3 jaar zerocoupon, prijs USD 90,19, nominale waarde USD 100:
$r = \sqrt[n]\frac{FV}{PV} -1$
ytm = (100 / 90.19) ** (1/3) - 1
print(ytm)
0.035
We gebruiken ytm voor 'yield to maturity'.
Formule couponobligatie:
$ 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}$
Deze vergelijking is niet naar $r$ op te lossen
We vinden $r$ met trial-and-error
Zo werkt de functie npf.rate()
Kijk naar onze couponobligatie van eerder die:
Wat is het yield to maturity?
3 jaar couponobligatie, 3% jaarlijkse coupon met een prijs van USD 97,22:
import numpy_financial as npf
npf.rate(nper=3, pmt=3, pv=-97.22, fv=100)
0.04
Onthoud dat we PV negatief moeten zetten.
Dat komt omdat de prijs een uitgaande kasstroom is (geld dat we betalen).
Waardering en analyse van obligaties in Python