Valoración y análisis de bonos en Python
Joshua Mayhew
Options Trader
Toma un bono a 3 años con cupón anual del 3%, nominal de USD 100 y rendimiento del 4%:

ATENCIÓN: El cupón es fijo y no cambia.
Dividimos el bono en una colección de bonos cero cupón y los valoramos:
Bono a 3 años con cupón anual del 3%, nominal de USD 100 y rendimiento del 4%
Usando la fórmula de interés compuesto de antes:
$ \text{Precio ZCB 1 año: } \frac{3}{(1 + 0.04)^1} = 2.88$
$ \text{Precio ZCB 2 años: } \ \frac{3}{(1 + 0.04)^2} = 2.77$
$ \text{Precio ZCB 3 años: } \ \frac{103}{(1 + 0.04)^3} = 91.57$
$\text{Precio bono con cupón: } 2.88 + 2.77 + 91.57 = 97.22$
En general, la fórmula del precio de un bono con cupón es:
$ Price = 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}$
Tomando el mismo bono a 3 años con cupón anual del 3% y rendimiento a vencimiento del 4%:
import numpy_financial as npf
-npf.pv(rate=0.04, nper=3, pmt=3, fv=100)
97.22
Establecemos pmt como positivo.
También ponemos un signo menos antes de la función.
Ponemos fv en 100, no 103.
Valoración y análisis de bonos en Python