2 votos

Cómo interpolar la inclinación de la volatilidad utilizando spline en Python

Tengo dos listas para describir la función y(x) que representa los golpes y el valor relativo de la inclinación de una superficie de volatilidad:

x_points = [22.56, 27.07, 31.58, 36.10, 40.61, 45.12, 49.63, 54.14, 58.66, 63.17, 67.68] %strikes value

y_points = [97.44, 87.32, 79.73, 75.47, 73.58, 74.53, 78.61, 83.64, 88.03, 92.26, 96.44] %vol value

Me gustaría realizar una interpolación spline cúbica para recuperar el rango 0;200 del sesgo pero, usando el código de abajo, obtengo algunos valores negativos (solución no consistente):

def f(x):
    x = np.linspace(0, 200, 399)

    tck = interpolate.splrep(x_points, y_points)

    return interpolate.splev(x, tck)

Por favor, ¿podríais darme vuestra opinión y ayuda para solucionar el problema? Tal vez la curva no debe ser ajustado con Spline cúbico o debo añadir algunas restricciones al problema de optimización (ni idea en absoluto ...)

2voto

xrost Puntos 129

Utilice la interpolación/extrapolación lineal:

Si utilizas un spline cúbico, estás sobreajustando tu superficie de volatilidad, por lo que obtendrás valores negativos para strikes grandes. Para evitar esto, puede simplemente hacer una extrapolación lineal de la superficie de volatilidad:

import scipy as sc
import numpy as np
import matplotlib.pyplot as plt

Strikes = [22.56, 27.07, 31.58, 36.10, 40.61, 45.12, 49.63, 54.14, 58.66, 63.17, 67.68]

Vols = [97.44, 87.32, 79.73, 75.47, 73.58, 74.53, 78.61, 83.64, 88.03, 92.26, 96.44]

LinInterpolation = sc.interpolate.interp1d(Strikes, Vols,kind = 'linear',fill_value='extrapolate')

x = np.linspace(0, 200, 399)

plt.plot(x, LinInterpolation(x))

extrapolated volsurface

Puedes jugar con el interpolador cambiando la cadena en kind por ejemplo. "cuadrático" o "cúbico" . Documentación aquí .

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