A volatilidade é um índice numérico que visa indicar o quão variável é a variável de uma série temporal. Na área financeira, é uma medida de dispersão dos retornos de um ativo financeiro ou índice de mercado. Quanto mais o preço de uma ação varia em um dado período de tempo, maior o risco de se ganhar ou perder dinheiro negociando esta ação, e, por isso, a volatilidade é uma medida de risco.
O retorno é a relação entre a quantidade de dinheiro ganho (ou perdido) como resultado de um investimento e a quantidade de dinheiro investido. Existem diferentes metodologias desse tipo de cálculo, cada uma com sua finalidade. No caso de avaliar um retorno entre valores consecutivos de um ativo ou índice dentro de um determinado período de tempo, ele é definido em função dos preço entre esses dois instantes conforme a seguinte fórmula:
\(r_t=log\left ( \frac{p_t}{p_{t-1}} \right )\)
O estimador mais simples da volatilidade é o desvio padrão histórico. Para esse histórico, deve-se escolher um período menor de dados, geralmente formado por valores intra-diários, e um período maior, costumeiramente de um ano. Por exemplo, é comum usar dados a cada minuto (período menor) para obter a volatilidade anual (252 dias comerciais).
Uma das formas mais simples de cálculo da volatilidade é definida como o desvio padrão dos retornos (\(\sigma_{r_t}\)) do período menor multiplicado pela raiz do número de unidades do período maior (\(n_{r_t}\)):
\(V = \sigma_{r_t} \cdot \sqrt{n_{r_t}}\)
Neste exemplo, serão usados dados com frequência de 5 minutos para determinar a volatilidade de uma série temporal de 1 dia. Os dados são valores de irradiância coletados pela rede SONDA/INPE e disponíveis no Github (viniroger/fractal). O número de unidades do período maior será definido como o número de amostras.
Importar dados do Github
import pandas as pd import numpy as np df = pd.read_csv('https://raw.githubusercontent.com/viniroger/fractal/master/input.csv') print(df)
Método para cálculo da volatilidade
def volatility(df, var_name): ''' Volatility calculus ''' n = df.shape[0] df['rt'] = df[var_name].shift(-1)/df[var_name] df['rt'] = df['rt'].fillna(0) sd = np.std(df['rt'].values) vol = round(sd * np.sqrt(n),1) return vol
Cálculo da volatilidade
vol = volatility(df, 'glo_avg') print('Volatilidade = {}%'.format(vol))
Volatilidade = 6.0%
Fontes
- Wikipedia – Volatilidade e Retorno
- WikiHow – 3 formas de calcular volatilidade histórica de ações
- Ibvestpedia – Como calcular a volatilidade histórica de um ativo