1 votos

Iniciando la curva de rendimiento con tasas forward utilizando QuantLib

Estoy intentando calcular una curva de rendimiento de GBP utilizando una curva de tasas OIS en USD y las tasas de cambio forward utilizando Quantlib. Estoy tratando de replicar la salida de una biblioteca diferente, y estoy cerca pero parece que no logro hacerlo bien.

En primer lugar, ajustando la curva de rendimiento de USD a partir de las tasas de swap OIS:

# Establecer la fecha de cálculo
fecha_inicio = ql.Date(1, 2, 2024)
ql.Settings.instance().evaluationDate = fecha_inicio

# Definir calendario
calendario = ql.UnitedStates(0)
convencion = ql.Following
finDeMes = False
fecha_spot = calendario.advance(fecha_inicio, 2, ql.Days)

# Frecuencia de pago y convenciones de pago de la pata fija
frecuencia_fija = ql.Annual
diaCuenta_fija = ql.Actual360()
convencion_fija = convencion
convencion_pago_fija = convencion

# Regla para generar el calendario
regla = ql.DateGeneration.Backward

# Definir el índice overnight como Fed Funds
indice_overnight = ql.FedFunds()

# Datos de mercado para tasas OIS y sus fechas de madurez específicas
fechas_madurez = ois_data["end_date"].to_list()  # Fechas de madurez específicas
tasas_ois = ois_data["Value"].to_list()  # Tasas OIS correspondientes

# Crear ayudantes de tasa OIS con fechas de vencimiento específicas para la tasa Fed Funds
helpers_ois = [
    ql.OISRateHelper(
        2,
        ql.Period(fecha_madurez - fecha_spot, ql.Days),
        ql.QuoteHandle(ql.SimpleQuote(tasa)),
        indice_overnight,
        paymentLag=0,
        paymentFrequency=frecuencia_fija,
        paymentConvention=convencion_pago_fija,
        paymentCalendar=calendario,
        endOfMonth=finDeMes,
    )
    for tasa, fecha_madurez in zip(tasas_ois, fechas_madurez)
]

# Ajustar la curva OIS
dias_cuenta = ql.Actual365Fixed()
curva_ois = ql.PiecewiseLogLinearDiscount(fecha_inicio, helpers_ois, dias_cuenta)
curva_rendimiento_usd = ql.YieldTermStructureHandle(curva_ois)

Cuando comparo los factores de descuento, obtengo las cifras correctas.

Luego, intento ajustar la curva de rendimiento de GBP:

precios_fx = fx_fwd["Value"].tolist()
fechas_liquidacion = fx_fwd["Settlement Date"].dt.date.tolist()
calendario_conjunto = ql.JointCalendar(
    ql.UnitedKingdom(), calendario, ql.JoinHolidays
)
ayudantes_tasa = [
    ql.FxSwapRateHelper(
        ql.QuoteHandle(ql.SimpleQuote(precio - precio_spot)),
        ql.QuoteHandle(ql.SimpleQuote(precio_spot)),
        ql.Period(ql.Date.from_date(fecha_liquidacion) - fecha_inicio, ql.Days),
        0,
        calendario_conjunto,
        ql.ModifiedFollowing,
        True,
        False,
        curva_rendimiento_usd,
    )
    for precio, fecha_liquidacion in zip(precios_fx, fechas_liquidacion)
]

# Ajustar la curva OIS
dias_cuenta = ql.Actual365Fixed()
# dias_cuenta = ql.Actual360()
curva_gbp = ql.PiecewiseFlatForward(fecha_inicio, ayudantes_tasa, dias_cuenta)
curva_rendimiento_gbp = ql.YieldTermStructureHandle(curva_gbp)

Esta vez, al graficar los factores de descuento, comparados con la otra biblioteca, son diferentes. Solo entre 1 y 50 puntos base, pero es suficiente para alterar la valoración de instrumentos más adelante cuando se utilizan estas curvas de rendimiento.

He intentado algunas iteraciones diferentes de los argumentos para los ayudantes pero no puedo hacer que funcione. Cualquier ayuda sería muy apreciada.

0voto

tekki Puntos 6

Mientras que no hay suficiente información en la pregunta para responder exactamente lo que se pregunta (podría ser la otra librería dando la respuesta incorrecta, no tenemos los datos, etc.), sugiero depurar esto desde los primeros principios.

Afortunadamente, la configuración aquí es muy simple - en el sentido de que si calculas los valores forward de FX manualmente (como ratio de factores de descuento) en las fechas de vencimiento de los FX swap, entonces puedes comparar inmediatamente estos con tus comillas de FX swap. Esto te dirá muy rápidamente cuál de las dos librerías está dando la respuesta incorrecta (¡puede ser ambas!) y también debería darte algunas pistas sobre el por qué.

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