1 votos

Problema de Python QuantLib FuturesRateHelper

Estoy tratando de hacer bootstrapping utilizando algunas tasas futuras sin embargo encontró algunos errores a continuación. Un caso reproducible es el siguiente:

esto es construir un ayudante de tasa futura con 'IRM1 Comdty' de bloomberg. sin embargo el maturityDate() me devuelve fecha nula, por lo tanto cuando paso esos ayudantes de tasa futura a PiecewiseLogCubicDiscount entonces obtengo "todos los instrumentos expirados". ¿alguien ha experimentado este problema? cualquier ayuda es muy apreciada

import QuantLib as ql
import sys

startDate = ql.Date(11,6,2021)
endDate = ql.Date(10,9,2021)
dayCount = ql.Actual365Fixed()
futuresType = 1 #ASX
convexityAdjustment = 0
try:
    tempFuturesRateHelper = ql.FuturesRateHelper(99.95,
                                             startDate,
                                             endDate,
                                             dayCount,
                                             convexityAdjustment,
                                             futuresType)
    print(tempFuturesRateHelper.maturityDate())
except:
    print("Unexpected error:", sys.exc_info()[1])

2voto

Liam Puntos 121

En cuanto a la pregunta original sobre la fecha de vencimiento nula, esto parece un error en el código del constructor que está golpeando es decir, cuando se suministra una explícita iborEndDate y Futures::Type es ASX y el precio y la convexidad se suministran como números en lugar de asas de comilla. Puede ver aquí en el código C++ que maturityDate_ no está ajustado a iborEndDate como en los otros ctores y finalmente todas las fechas se ponen a null en la última línea. Puedo abrir un ticket para eso.

Mientras tanto, podrías utilizar uno de los otros ctores si quieres conseguir el vencimiento del 10 de septiembre de 2021 que mencionas en tu comentario anterior. Por ejemplo, el código siguiente:

import QuantLib as Ql

ql = Ql

# Leave the ibor end date as an empty date and it will calculate the 3 month maturity.
frh_1 = ql.FuturesRateHelper(99.95,
                             ql.Date(11, 6, 2021),
                             ql.Date(),
                             ql.Actual365Fixed(),
                             0.0,
                             ql.Futures.ASX)

print(f'frh_1 maturity date: {frh_1.maturityDate()}')

# Use the quote based ctor and provide the explicit maturity date.
frh_2 = ql.FuturesRateHelper(ql.QuoteHandle(ql.SimpleQuote(99.95)),
                             ql.Date(11, 6, 2021),
                             ql.Date(),
                             ql.Actual365Fixed(),
                             ql.QuoteHandle(ql.SimpleQuote(0.0)),
                             ql.Futures.ASX)

print(f'frh_2 maturity date: {frh_2.maturityDate()}')

produce la salida

frh_1 maturity date: September 10th, 2021
frh_2 maturity date: September 10th, 2021

Edición: Se ha abierto un pull request para arreglar esto aquí .

1voto

Chris Mc Puntos 31

No estoy acostumbrado a trabajar con ASX Futures pero podría sugerir una construcción alternativa del ayudante.

Dado que los contratos de STIR Futures están vinculados a un índice concreto, puede utilizarlo para las convenciones. En su caso:

index = ql.Bbsw3M()
startDate = ql.Date(11,6,2021)
helper = ql.FuturesRateHelper(99.95, startDate, index, 0, ql.Futures.ASX)
print(helper.maturityDate())

13 de septiembre de 2021

0 votos

Gracias David, aunque pensé que la fecha de vencimiento debería ser el 10 de septiembre en este caso en lugar del 13 de septiembre.

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