2 votos

Cómo utilizar tanto la curva de rendimiento como la curva de descuento para valorar la llamada en QuantLib

Soy nuevo en QuantLib, y estoy intentando valorar una simple llamada europea. El proceso Black-Scholes-Merton de QuantLib tiene sentido para mí, pero no sé cómo incorporar una curva de descuento en él.

A continuación se muestra mi ejemplo actual en Python. En este momento el proceso toma una curva de índice y una curva de dividendo. Necesito que el proceso tome una curva de índice, una curva de dividendo y una curva de descuento. ¿Cómo puedo lograr esto en QuantLib?

def call_atm_test():
    """Returns price of a european option using black-scholes"""
    today = ql.Date(22, ql.May, 2019)
    ql.Settings.instance().evaluationDate = today

    option = ql.EuropeanOption(ql.PlainVanillaPayoff(ql.Option.Call, 2856.27),
                               ql.EuropeanExercise(ql.Date(22, ql.May, 2020)))

    u = ql.SimpleQuote(2856.27)
    r = ql.SimpleQuote(0.0223)
    d = ql.SimpleQuote(0.01879)
    sigma = ql.SimpleQuote(0.15259)

    riskFreeCurve = ql.FlatForward(0, ql.TARGET(), ql.QuoteHandle(r), ql.Actual360())
    dividend_yield = ql.FlatForward(0, ql.TARGET(), ql.QuoteHandle(d), ql.Actual360())
    volatility = ql.BlackConstantVol(0, ql.TARGET(), ql.QuoteHandle(sigma), ql.Actual360())

    process = ql.BlackScholesMertonProcess(ql.QuoteHandle(u),
                                           ql.YieldTermStructureHandle(dividend_yield),
                                           ql.YieldTermStructureHandle(riskFreeCurve),
                                           ql.BlackVolTermStructureHandle(volatility))

    engine = ql.AnalyticEuropeanEngine(process)
    option.setPricingEngine(engine)

    result = option.NPV()
    return result

3voto

Idan Puntos 462

Básicamente, su riskFreeCurve es una curva de rendimiento y una curva de descuento al mismo tiempo. QuantLib sólo la guarda como una YieldTermStructure . Se puede ver que

print(riskFreeCurve.discount(ql.Date(22, ql.May, 2020)))
print(riskFreeCurve.zeroRate(ql.Date(22, ql.May, 2020), ql.Actual360(), ql.Continuous))

te da el factor de descuento y la tasa de rendimiento:

0.9775834043036867
2.230000 % Actual/360 continuous compounding

1 votos

@N4v, no he podido comentar tu pregunta. A qué te refieres con 'curva índice'?

0 votos

Por curva de índices entiendo la curva de rendimientos, o el tipo neutro de riesgo al que crecen las acciones. La razón de mi pregunta es que algunos programas informáticos de valoración permiten tener curvas de rendimiento y de descuento separadas, es decir, que la curva de rendimiento sea la curva swap y la curva de descuento se base en los tipos OIS.

1 votos

No estoy muy familiarizado con este tema, pero no he visto algo así antes (en QuantLib o en general). En el caso del BlackScholesMertonProcess su riskFreeCurve se utiliza para el descuento y es la deriva del activo subyacente (según la medida neutral del riesgo). No creo que se pueda añadir otra curva, porque la deriva "real" del subyacente no es necesaria para la valoración de opciones.

3voto

Brad Tutterow Puntos 5628

En la versión C++ de QuantLib es posible pasar una curva de descuento separada al motor, pero la funcionalidad no está exportada en Python (y por tanto, como dijo @Cornholio, la curva libre de riesgo también se utiliza para el descuento). Si necesitas esta funcionalidad en Python, por favor abre una incidencia en https://github.com/lballabio/QuantLib-SWIG/issues .

0 votos

Hola @N4v. Tengo un problema similar. ¿Podrías indicarnos si este problema se abrió (como sugirió Luigi Ballabio) y se resolvió? Gracias por tu respuesta.

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