Valoração e Análise de Títulos em Python
Joshua Mayhew
Options Trader
Lembre a fórmula do preço de um zero coupon bond:
$PV = \frac{FV}{(1 + r)^n}$
Podemos reorganizar para resolver o yield $(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$
Vamos rever o mesmo zero coupon bond de antes, agora ao contrário:
Qual é o yield desse bond?
Zero coupon bond de 3 anos, preço USD 90,19, valor de face USD 100:
$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 bond com cupom:
$ 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 equação não pode ser isolada em função de $r$
Usamos tentativa e erro para achar $r$
É assim que a função npf.rate() funciona
Considere o bond com cupom visto antes, que:
Qual é seu yield to maturity?
Bond com cupom de 3 anos, cupom anual de 3% e preço de USD 97,22:
import numpy_financial as npf
npf.rate(nper=3, pmt=3, pv=-97.22, fv=100)
0.04
Lembre-se de definir PV como negativo.
Isso porque o preço do bond é dinheiro que você paga (fluxo de caixa negativo).
Valoração e Análise de Títulos em Python