No tienes realmente suficiente información. Necesitas la base ESTR/6MEuribor para hacer esto correctamente.
Puedes empezar creando una curva ESTR a partir de los pasos de tu reunión de política:
(Para una revisión de conversión de Quantlib - Rateslib aquí: https://rateslib.readthedocs.io/en/stable/z_quantlib.html)
from rateslib import *
m = [
dt(2024, 1, 8),
dt(2024, 3, 7),
dt(2024, 4, 11),
dt(2024, 6, 6),
dt(2024, 7, 18),
dt(2024, 9, 12),
dt(2024, 10, 17),
dt(2024, 12, 12),
]
curve = Curve(
nodes={
dt(2024, 1, 8):1.0,
dt(2024, 3, 7):1.0,
dt(2024, 4, 11):1.0,
dt(2024, 6, 6):1.0,
dt(2024, 7, 18):1.0,
dt(2024, 9, 12):1.0,
dt(2024, 10, 17):1.0,
dt(2024, 12, 12):1.0,
dt(2025, 1, 31):1.0
},
convention="act360",
calendar="tgt"
)
solver = Solver(
curves=[curve],
instruments=[
IRS(m[0], "1b", spec="eur_irs", curves=curve),
Spread(IRS(m[0], "1b", spec="eur_irs", curves=curve),
IRS(m[1], "1b", spec="eur_irs", curves=curve)),
Spread(IRS(m[1], "1b", spec="eur_irs", curves=curve),
IRS(m[2], "1b", spec="eur_irs", curves=curve)),
Spread(IRS(m[2], "1b", spec="eur_irs", curves=curve),
IRS(m[3], "1b", spec="eur_irs", curves=curve)),
Spread(IRS(m[3], "1b", spec="eur_irs", curves=curve),
IRS(m[4], "1b", spec="eur_irs", curves=curve)),
Spread(IRS(m[4], "1b", spec="eur_irs", curves=curve),
IRS(m[5], "1b", spec="eur_irs", curves=curve)),
Spread(IRS(m[5], "1b", spec="eur_irs", curves=curve),
IRS(m[6], "1b", spec="eur_irs", curves=curve)),
Spread(IRS(m[6], "1b", spec="eur_irs", curves=curve),
IRS(m[7], "1b", spec="eur_irs", curves=curve)),
],
s=[3.90, -1, -7.5, -19.8, -16.7, -20, -18.2, -23.2]
)
curve.plot("1b")
Luego puedes agregar una curva de spread encima de esto, supongamos que el spread ESTR/6M se interpola linealmente entre las fechas IMM:
spread_curve = Curve(
nodes={
dt(2024, 1, 8): 1.0,
dt(2024, 3, 20): 1.0,
dt(2024, 6, 19): 1.0,
dt(2024, 9, 18): 1.0,
dt(2024, 12, 19): 1.0,
},
convention="act360",
calendar="tgt"
)
curve_6m_composite = CompositeCurve([curve, spread_curve])
solver2 = Solver(
pre_solvers=[solver],
curves=[curve_6m_composite, spread_curve],
instruments=[
IRS(dt(2024, 1, 8), "6m", spec="eur_irs", curves=curve_6m_composite),
IRS(dt(2024, 3, 20), "6m", spec="eur_irs", curves=curve_6m_composite),
IRS(dt(2024, 6, 19), "6m", spec="eur_irs", curves=curve_6m_composite),
IRS(dt(2024, 9, 18), "6m", spec="eur_irs", curves=curve_6m_composite),
],
s=[3.925, 3.88, 3.5725, 3.2125]
)
curve_6m_composite.plot("6m", comparators=[curve], labels=["6M Euribor", "6M ESTR"])
Estas imágenes son demasiado grandes a escala para resaltar lo que está haciendo esto, pero si comparas esta curva de 6m con una que tenga solo interpolación lineal de la tasa de 6m entre las tasas de depósito e IMM, observarás algunas diferencias de puntos básicos en los meses intermedios.