Valoración y análisis de bonos en Python
Joshua Mayhew
Options Trader
Recuerda la fórmula del precio de un bono cupón cero:
$PV = \frac{FV}{(1 + r)^n}$
Podemos despejar la rentabilidad $(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$
Veamos el mismo bono cupón cero de antes, al revés:
¿Cuál es el rendimiento de este bono?
Bono cupón cero a 3 años, precio 90,19 USD, nominal 100 USD:
$r = \sqrt[n]\frac{FV}{PV} -1$
ytm = (100 / 90.19) ** (1/3) - 1
print(ytm)
0.035
Usaremos ytm para “yield to maturity”.
Fórmula de bono con cupón:
$ 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}$
Esta ecuación no se puede despejar en función de $r$
Usamos tanteo para encontrar $r$
Así funciona npf.rate()
Pensemos en el bono con cupón de antes que:
¿Cuál es su rendimiento hasta vencimiento?
Bono con cupón a 3 años, cupón anual 3% y precio 97,22 USD:
import numpy_financial as npf
npf.rate(nper=3, pmt=3, pv=-97.22, fv=100)
0.04
Recuerda poner PV como número negativo.
Porque el precio del bono es dinero que pagamos (flujo negativo).
Valoración y análisis de bonos en Python