2 votos

Ibor Index con Curva Plana al 5% no está recuperando las fijaciones exactas del 5%

He definido un índice Ibor con la versión de python de Quantlib usando una Curva Plana Forward del 5%.

Cuando obtengo una estimación para una fecha dentro de 3 meses a partir de ahora, esperaría obtener 0.0500000, como lo definí en la curva plana. Sin embargo, en cambio obtengo 0.050320809398634044. Estoy perplejo/a de por qué sucede esto...

import QuantLib as ql
calendar = ql.UnitedStates(ql.UnitedStates.FederalReserve)
usd_curve = ql.FlatForward(2, calendar,
               0.05, ql.Actual360())

effectiveDate = ql.Settings.instance().evaluationDate
index = ql.IborIndex("LiborUSD", ql.Period("3m"),
             2, ql.USDCurrency(), calendar,
             ql.ModifiedFollowing, False,
             ql.Actual360(),
             ql.YieldTermStructureHandle(usd_curve))

for i in [3,6,9,12,15]:
    print(index.fixing(
        calendar.advance(effectiveDate, i, ql.Months, ql.ModifiedFollowing)
    ))

0.050320809398634044
0.050320809398634044
0.05031030503130324
0.05032080939863317
0.050320809398634044

4voto

Brad Tutterow Puntos 5628

Estás creando una curva plana con una tasa de 5% continuamente compuesta, mientras que la fijación LIBOR es una tasa de interés simple. Obtendrás el equivalente de la tasa simple a una tasa de interés continuamente compuesta del 5% durante el período relevante; es decir, la tasa LIBOR $L$ tal que $(1+Lt) = e^{rt}$, con $r$ siendo tu entrada del 5% y $t$ el periodo de 3 meses subyacente a la fijación.

Me temo que no hay una forma directa de establecer la fijación LIBOR; el método addFixing sugerido en la otra respuesta funciona para fijaciones pasadas, no para pronósticos. Puedes obtener un resultado cercano a lo que deseas creando una curva plana de compuesto trimestral:

usd_curve = ql.FlatForward(2, calendar, 0.05, ql.Actual360(), ql.Compounded, ql.Quarterly)

porque las fórmulas tienen un resultado (si deseas una fijación de 6 meses, necesitarás ql.Semiannual y así sucesivamente). No es exacto, pero estarás a solo una pequeña fracción de punto base del 5% que deseas:

0.05000691632583292
0.050006916325834656
0.04999654231487185
0.05000691632583379
0.05000691632583292

2voto

savageguy Puntos 570

Cuando se llama a index.fixing en realidad se está llamando al método de c++ IborIndex::forecastFixing y dado que la fecha está en el futuro, QuantLib realizará el siguiente cálculo: $$(\frac{e^{-r_1 * t_1}}{e^{-r_2*t_2}} - 1)/(\frac{t_2 - t_1}{360}),$$

basado en tus entradas, donde el interés compuesto continuo está configurado de forma predeterminada. Aquí $t_1$ será dado por

Date fixingDate = fixingCalendar().advance(valueDate,
    -static_cast(fixingDays_), Days);

y $t_2$ por

fixingCalendar().advance(fixingDate, fixingDays_, Days);

Por lo tanto, la curva en sí será constante, es decir, $r_1 = r_2$ pero las fechas son diferentes causando el efecto que ves en tus cálculos. Si deseas establecer un fixing te sugiero revisar el método setFixing.

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