1 votos

Iniciar Bootstrap de una Curva de Bonos en Rateslib

¿Es posible obtener una curva de cupón cero a partir de un conjunto de FixedRateBond en rateslib?

Intenté buscar en la documentación pero no encontré una manera de hacerlo.

Hay algo llamado CurveSolver pero parece que necesitas suministrarle una Curva.

A partir de un conjunto de FixedRateBond y sus precios o YTM observados en el mercado me gustaría derivar una curva de cupón cero.

1voto

dotnetcoder Puntos 1262

"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:

  1. Definir los Instrumentos cuyos precios instruirán la Curva.
  2. 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")

enter image description here

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.

Finanhelp.com

FinanHelp es una comunidad para personas con conocimientos de economía y finanzas, o quiere aprender. Puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X