Saltar al contenido

Cómo calcular la volatilidad (desviación estándar) en la ventana móvil en Pandas

Solución:

Parece que estas buscando Series.rolling. Puede aplicar el std cálculos al objeto resultante:

roller = Ser.rolling(w)
volList = roller.std(ddof=0)

Si no planea usar el objeto de ventana rodante nuevamente, puede escribir una sola línea:

volList = Ser.rolling(w).std(ddof=0)

Manten eso en mente ddof=0 es necesario en este caso porque la normalización de la desviación estándar es por len(Ser)-ddof, y eso ddof predeterminado a 1 en pandas.

Típicamente, [finance-type] la gente cotiza la volatilidad en términos anualizados de cambios porcentuales en el precio.

Suponiendo que tiene precios diarios en un marco de datos df y hay 252 días de negociación en un año, probablemente lo que desee sea algo como lo siguiente:

df.pct_change().rolling(window_size).std()*(252**0.5)

La “volatilidad” es ambigua incluso en un sentido financiero. El tipo de volatilidad más comúnmente referenciado es volatilidad realizada que es la raíz cuadrada de la varianza realizada. Las principales diferencias con la desviación estándar de los rendimientos son:

  • Se utilizan devoluciones de registros (no devoluciones simples)
  • La cifra está anualizada (generalmente asumiendo entre 252 y 260 días hábiles al año)
  • En el caso de Swaps de varianza, los retornos de registros no se degradan

Hay una variedad de métodos para calcular la volatilidad realizada; sin embargo, he implementado los dos más comunes a continuación:

import numpy as np

window = 21  # trading days in rolling window
dpy = 252  # trading days per year
ann_factor = days_per_year / window

df['log_rtn'] = np.log(df['price']).diff()

# Var Swap (returns are not demeaned)
df['real_var'] = np.square(df['log_rtn']).rolling(window).sum() * ann_factor
df['real_vol'] = np.sqrt(df['real_var'])

# Classical (returns are demeaned, dof=1)
df['real_var'] = df['log_rtn'].rolling(window).var() * ann_factor
df['real_vol'] = np.sqrt(df['real_var'])
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *