"Bootstrapping" es el nombre de un método específico para construir una curva a partir de un conjunto dado de instrumentos. El bootstrapping funciona resolviendo secuencialmente los valores en la curva generalmente en orden de madurez de los instrumentos. Para hacer bootstrapping a una curva, se deben cumplir algunas condiciones, por lo cual algunos programas permiten que se cree directamente una curva a partir de instrumentos de bono, ya que ese software crea automáticamente una curva inflexible pero adecuada a partir de la madurez de los instrumentos y luego calcula secuencialmente los factores de descuento necesarios.
Rateslib no hace bootstrapping. Utiliza un método alternativo para construir curvas que es mucho más flexible. Eso es un "optimizador global".
Cualquier curva que pueda crearse mediante bootstrapping puede ser resuelta por un optimizador global, pero no es verdad que cualquier curva resuelta por un optimizador global pueda ser bootstrapped porque las curvas bootstrapped requieren esas condiciones mencionadas anteriormente. Por lo tanto, rateslib puede hacer bootstrapping indirectamente de tu curva, al resolverla de forma global.
Para resolver curvas en rateslib necesitas hacer 2 cosas:
- Definir los Instrumentos cuyos precios instruirán la Curva.
- Definir la estructura de la Curva que será resuelta para adaptarse a los precios de esos Instrumento.
Dado que solo quieres una curva de 'bootstrap' básica, la estructura predeterminada que estás buscando es colocar nodos en la madurez de cada bono y utilizar interpolación log-lineal.
from rateslib import * # Python 3.12, Rateslib 1.4.0
bonds = [
FixedRateBond(dt(1999, 9, 26), "3y", spec="us_gb", curves="bond", fixed_rate=2.5),
FixedRateBond(dt(1998, 3, 15), "7y", spec="us_gb", curves="bond", fixed_rate=2.75),
FixedRateBond(dt(1999, 5, 22), "10y", spec="us_gb", curves="bond", fixed_rate=3.0),
]
curve = Curve(
nodes={
dt(2000, 1, 1): 1.0, # <-- HOY
dt(2002, 9, 26): 1.0, # <-- Madurez del Bono
dt(2005, 3, 15): 1.0, # <-- Madurez del Bono
dt(2009, 5, 22): 1.0, # <-- Madurez del Bono
},
interpolación="log_linear",
id="bond"
)
solver = Solver(
curvas=[curva],
instrumentos=bonos,
s=[100, 100, 100], # <-- Precio limpio de cada bono
)
La Curva
construida contiene factores de descuento. Puedes extraer un factor de descuento para cualquier fecha usando el __getitem__
de Python, es decir,
curva[dt(2003, 4, 5)]
# 0.919685
O puedes graficar tasas forward overnight desde la curva:
curva.plot("1b")
Para calcular tasas cero y graficarlas, debes recorrer todas las fechas que desees y realizar manualmente el cálculo de una tasa cero a partir de un factor de descuento.