2 votos

QuantLib: ¿Cómo cambiar el orden de los polinomios en MCAmericanBasketEngine?

Mi objetivo es fijar el precio de las opciones de venta de la cesta americana utilizando el algoritmo Least squares Monte Carlo, o Longstaff-Schwartz.

Actualmente tengo el caso unidimensional trabajando con el archivo Python de abajo (estoy usando el paquete SWIG), pero me gustaría cambiar el número de funciones base usadas por el AmericanBasketEngine para asegurarme de que el precio es preciso. ¿Cómo puedo hacerlo?

Mirando el código fuente de C++, encontré el polynomOrder argumento de palabra clave con valor por defecto 2 de la clase AmericanBasketPathPricer . Sin embargo, no sé cómo está conectada esta clase con el MCAmericanBasketEngine que no tiene ese argumento de palabra clave. (Nunca he programado en C o C++ por lo que estoy bastante perdido en la fuente).

Tal vez el orden del polinomio se determine automáticamente, basándose en el requiredTolerance ? Eso sería lo ideal, pero no pude encontrar una descripción de lo que el MCAmericanBasketEngine hace exactamente en cualquier lugar.

from QuantLib import *

d=1 #To be increased...
todaysDate = Date(15,May,1998)
Settings.instance().evaluationDate = todaysDate
settlementDate = Date(17,May,1998)
riskFreeRate = FlatForward(settlementDate, 0.05, Actual365Fixed())

payoff = PlainVanillaPayoff(Option.Put, 100.0)

underlying1 = SimpleQuote(100.0)
volatility1 = BlackConstantVol(todaysDate, TARGET(), 0.30, Actual365Fixed())
dividendYield1 = FlatForward(settlementDate, 0.00, Actual365Fixed())
process1 = BlackScholesMertonProcess(QuoteHandle(underlying1),
                                    YieldTermStructureHandle(dividendYield1),
                                    YieldTermStructureHandle(riskFreeRate),
                                    BlackVolTermStructureHandle(volatility1))
procs = StochasticProcessVector()
procs.push_back(process1)

matrix = Matrix(1,1)
matrix[0][0] = 1.0
process = StochasticProcessArray(procs, matrix)
american_exercise = AmericanExercise(Date(17,May,1998),Date(17,May,1999))
basketoption = BasketOption(AverageBasketPayoff(payoff,d),american_exercise)
basketoption.setPricingEngine(
    MCAmericanBasketEngine(
        process,
        'pseudorandom',
        polynomOrder = 2,#keyword does not exist
        timeStepsPerYear = 100,
        requiredTolerance = 0.01,
        #seed = 42))
    )
)
print(basketoption.NPV())

1voto

Chry Cheng Puntos 1099

Según el desarrollador principal de QuantLib, polynomOrder no está expuesta actualmente. Ahora hay un Tema de GitHub sobre esto.

0 votos

Si es sólo una cuestión de exposición en las envolturas SWIG de Python, podrías añadirlo tú mismo (localmente en tu máquina o a través de un pull request) aquí: github.com/lballabio/QuantLib-SWIG/blob/master/SWIG/ tienes un ejemplo aquí (opciones 1D) donde el parámetro está expuesto a Python: github.com/lballabio/QuantLib-SWIG/blob/ De todos modos, creo que deberías mover el tema aquí: github.com/lballabio/QuantLib-SWIG

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