1 votos

Error en la construcción de la curva de rendimiento de QuantLib: root no está entre corchetes

Si alguien puede ayudar con lo siguiente, básicamente estoy tratando de construir una curva de rendimiento utilizando algunos datos del mercado real. He pegado el código python a continuación. Utilizo una lista de tipos de swap y obtengo algunos errores de root no entre corchetes, después de eliminar algunos tipos de swap, me quedan los tipos de swap de 9y y 10y AUD. Mientras estos dos están incluidos, entonces la construcción de la curva no funcionará. creo que estos son datos reales del mercado a partir de 2021-01-04. El error que estoy recibiendo:

RuntimeError: 1ª iteración: falló en el 2º instrumento vivo, pilar 6 de enero de 2031, vencimiento 6 de enero de 2031, fecha de referencia 4 de enero de 2021: root sin corchetes: f[0,0830554,0,627492] -> [-3,376389e+01,-1,733717e+01]

import QuantLib as ql

swapHelpers = []

pricingDate = ql.DateParser.parseFormatted('2021-01-04', '%Y-%m-%d')
effectiveDate = ql.DateParser.parseFormatted('2021-01-06', '%Y-%m-%d')
dayCount = ql.Actual360()
terminationDate1 = ql.DateParser.parseFormatted('2031-01-06', '%Y-%m-%d')
schedule1 = ql.Schedule(effectiveDate,
                       terminationDate1,
                       ql.Period(ql.Quarterly),
                       ql.Australia(),
                       ql.ModifiedFollowing,
                       ql.ModifiedFollowing,
                       ql.DateGeneration.Backward,
                       False)
helper1 = ql.FixedRateBondHelper(ql.QuoteHandle(ql.SimpleQuote(100)),
                                2,
                                100,
                                schedule1,
                                [0.1838],
                                dayCount,
                                ql.ModifiedFollowing,
                                )
swapHelpers.append(helper1)
terminationDate2 = ql.DateParser.parseFormatted('2030-01-06', '%Y-%m-%d')
schedule2 = ql.Schedule(effectiveDate,
               terminationDate2,
               ql.Period(ql.Quarterly),
               ql.Australia(),
               ql.ModifiedFollowing,
               ql.ModifiedFollowing,
               ql.DateGeneration.Backward,
               False)
helper2 = ql.FixedRateBondHelper(ql.QuoteHandle(ql.SimpleQuote(100)),
                                    2,
                                    100,
                                    schedule2,
                                    [0.165],
                                    dayCount,
                                    ql.ModifiedFollowing,
                                    )
swapHelpers.append(helper2)
yieldcurve = ql.PiecewiseLogCubicDiscount(pricingDate,
                                          swapHelpers,
                                          ql.Actual360())

yieldcurve.enableExtrapolation()
yieldcurve.dates()

3voto

Chris Mc Puntos 31

Está introduciendo cupones de 18,38% y 16,5%, lo que probablemente no es lo que quiere y hace que el solucionador no encuentre una solución.

Cambie los cupones a [0.1838/100] y [0.165/100] y debería estar bien.

Además, si se trata de una curva de intercambio, hay otros ayudantes más apropiados que el FixedRateBondHelper

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