3 votos

Calcular y graficar la volatilidad histórica con Python

He descargado datos históricos de FTSE desde 1984 hasta ahora. Lo que me gustaría hacer es graficar la volatilidad como función del tiempo. Lo que he escrito es:

import matplotlib.pyplot as plt
import datetime as dt
import numpy as np
import math

lines = [line.rstrip('\n') for line in open("Data.txt")]
a = list(range(len(lines)))
adjClose = [float(i) for i in lines]
adjClose.reverse()
dates = [line.rstrip('\n') for line in open("Date.txt")]
dates.reverse()
x = [dt.datetime.strptime(d,'%Y-%m-%d').date() for d in dates]
dailyVolatility = np.std(np.diff(np.log(adjClose))).round(4)

# Calculate returns
returns = []
for i in range(len(adjClose[1:])):
    element = adjClose[i]/adjClose[i-1]
    element = math.log(element)
    returns.append((element))
returns = returns[1:]

mean_returns = np.mean(returns)
vol = []
for i in range(len(returns)):
    element = (returns[i]-mean_returns)**2
    element=math.sqrt((element))
    vol.append(element)
for i in range(len(vol)):
    vol[i]*=math.sqrt(252)
x = x[2:]
plt.plot(x,vol)
plt.show()

Así que primero cargo los datos y luego calculo los logaritmos de los rendimientos, así como tomo el promedio; además, calculo la desviación estándar para cada par de números en mis logaritmos de los rendimientos. ¿Es correcto mi razonamiento? En este caso no he promediado en absoluto para la fórmula de la desviación estándar, ya que N-1 = 2-1 = 1.

1 votos

Esa es una estimación de volatilidad de un día, lo cual está bien, pero será muy "ruidosa" (es decir, sujeta a fluctuaciones aleatorias). Las personas suelen promediar en un corto período de tiempo (como 20 días o 120 días, etc.) para obtener un estimador de volatilidad más estable y bien comportado. ¿Puedo preguntar cuál es el propósito de este cálculo?

0 votos

@ Alex C Esta es solo una ejercicio que estoy realizando para aprender, y también para ver posibles conexiones entre volatilidad y precio real. Si decido promediar durante 20 días, ¿significa eso que necesito hacer este cálculo cada día i+20 hasta el final de mi lista (que creo que son alrededor de 8500 días ya que estoy obteniendo datos desde 1984)?

2voto

Boris Estulin Puntos 1

No tengo suficientes puntos de reputación para comentar, así que pondré esto en una respuesta.

No estoy seguro de lo que significa "desviación estándar para cada par de números en mis retornos logarítmicos", pero suena como si estuvieras tomando la desviación estándar de dos retornos consecutivos. Si ese es el caso, yo no haría eso.

Creo que estás buscando "varianza realizada". Esto es simplemente la suma de los retornos logarítmicos al cuadrado. Luego puedes tomar la raíz cuadrada de esta suma para obtener la volatilidad realizada. Si sumas durante una semana o mes, obtienes la volatilidad realizada de esa semana o mes.

Consulta el artículo de Wikipedia para conocer las agradables propiedades matemáticas de la varianza realizada.

0 votos

En particular, el paquete pandas maneja la volatilidad y la volatilidad móvil con relativa facilidad.

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