Évaluation et analyse des obligations en Python
Joshua Mayhew
Options Trader
Rappelez-vous la formule du prix d'une obligation zéro coupon :
$PV = \frac{FV}{(1 + r)^n}$
On peut réarranger pour isoler le rendement $(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$
Reprenons la même zéro coupon et remontons le calcul :
Quel est son rendement ?
Zéro coupon 3 ans, prix 90,19 USD, nominal 100 USD :
$r = \sqrt[n]\frac{FV}{PV} -1$
ytm = (100 / 90.19) ** (1/3) - 1
print(ytm)
0.035
Nous utiliserons ytm pour « yield to maturity ».
Formule d'une obligation à coupon :
$ 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}$
Cette équation ne peut pas être résolue explicitement en $r$
On cherche $r$ par essais-erreurs
C'est ainsi que fonctionne la fonction npf.rate()
Considérons l'obligation à coupon vue plus tôt, qui :
Quel est son rendement à l'échéance ?
Obligation à coupon 3 ans, coupon annuel 3 %, prix 97,22 USD :
import numpy_financial as npf
npf.rate(nper=3, pmt=3, pv=-97.22, fv=100)
0.04
N'oubliez pas de définir PV en nombre négatif.
Le prix de l'obligation est une sortie de trésorerie (flux négatif).
Évaluation et analyse des obligations en Python