O que são Janelas Móveis?
Em séries temporais, nada é estático. Uma correlação pode existir apenas em um período específico, e uma média pode variar de um dia para outro. O conceito de janelas móveis consiste em aplicar funções a um subconjunto de dados com largura fixa (ou variável), deslocando a janela ao longo do tempo.
Para obter o código e o tutorial deste exercício faça parte do Clube AM e receba toda semana os códigos em R/Python, vídeos, tutoriais e suporte completo para dúvidas.
Como Funciona?
Lembre-se: uma série temporal é um conjunto de observações ordenadas no tempo, com uma frequência específica. O IPCA, por exemplo, é um índice de inflação medido mensalmente no Brasil, ou seja, suas observações ocorrem a cada mês.
Transformações de séries temporais são comuns. O IPCA, por exemplo, pode ser analisado como um índice simples ou convertido em variação mensal e interanual. Um cálculo importante é a variação acumulada em 12 meses, que considera os últimos 12 valores, removendo o mais antigo conforme uma nova observação entra. Esse é um exemplo clássico de janela móvel.
Outro exemplo é a média móvel de 200 dias, amplamente usada em finanças. Ela calcula a média dos preços de uma ação nos últimos 200 dias úteis, ajudando a identificar tendências de longo prazo.
Para que Servem as Janelas Móveis?
As janelas móveis são úteis para diversos propósitos, como:
- Identificar a tendência central ao longo do tempo (média, mediana)
- Medir a volatilidade (desvio-padrão, variância)
- Detectar mudanças de tendência (médias móveis rápidas vs. lentas)
- Analisar a relação entre duas séries temporais (covariância, correlação)
Tipos de Janelas Móveis
Existem diferentes formas de lidar com janelas móveis, sendo as duas mais comuns:
Janelas Móveis Cumulativas:
Acumulam os valores ao longo do tempo, expandindo a janela conforme novas observações são adicionadas.
Janelas Móveis Constantes:
Mantêm um tamanho fixo, removendo a observação mais antiga à medida que uma nova entra.
Cálculos com Janelas Móveis
Vamos calcular a seguinte métrica:
- Correlação móvel dos retornos (variações percentuais) dos preços de fechamento de ações brasileiras.
Para isso, utilizaremos a biblioteca pytimetk
, que facilita a aplicação de janelas móveis em séries temporais. Nos próximos passos, veremos como implementar o cálculo na prática.
Passos para Calcular a Correlação Móvel no Python
Para aplicar janelas móveis no mercado financeiro, seguimos os seguintes passos:
1. Importação dos Dados de Preços de Fechamento
Os dados financeiros podem ser obtidos de fontes como openbb
ou yfinance
. Esses dados geralmente vêm no formato OHLCV (Open, High, Low, Close, Volume) e podem incluir um preço ajustado (corrigido para desdobramentos). Neste tutorial importamos dados dos tickers VALE3, MGLU3 e ^BVSP (Ibovespa).
2. Tratamento dos Dados
Para calcular janelas móveis com pytimetk
, organizamos os dados com três propriedades essenciais:
- Timestamp: Frequência diária, horária, etc.
- Valor: Preço ou retorno do ativo.
- Grupos: Símbolos das ações.
Além disso, é necessário calcular os retornos percentuais dos preços de fechamento antes de aplicar as janelas móveis.
3. Criação das Janelas Móveis
Utilizamos a função tk.augment_expanding_apply()
e tk.augment_rolling_apply()
do pytimetk
para calcular a Correlação móvel entre os retornos das ações. A primeira computa a janela móvel cumulativa, enquanto a segunda calcula a janela móvel fixa.
4. Visualização dos Dados
Após o cálculo das métricas, geramos gráficos para entender o comportamento das séries ao longo do tempo.
Nos próximos passos, implementamos cada etapa no código.
1. Importação dos Dados de Preços de Fechamento
<class 'pandas.core.frame.DataFrame'>: 3675 rows of 8 columns
Date: datetime64[ns] [Timestamp('2020-01-02 00:00:00'), Timesta ...
Ticker: object ['MGLU3.SA', 'VALE3.SA', '^BVSP', 'MGLU3.S ...
Adj Close: float64 [115.01505279541016, 32.831024169921875, 1 ...
Close: float64 [115.34874725341797, 54.33000183105469, 11 ...
High: float64 [115.34874725341797, 54.439998626708984, 1 ...
Low: float64 [111.5606918334961, 53.75, 115649.0, 112.9 ...
Open: float64 [112.94029235839844, 53.97999954223633, 11 ...
Volume: int64 [3164766, 17509700, 5162700, 2858647, 1728 ...
2. Tratamento dos Dados
Calculamos a variação percentual da coluna de preço de fechamento (pct_change()) com o DataFrame no formato wide. Essa variação percentual mensal é os que chamamos de retorno.
Ticker | Date | MGLU3.SA | VALE3.SA | ^BVSP |
---|---|---|---|---|
1 | 2020-01-03 | -0.008920 | -0.007362 | -0.007304 |
2 | 2020-01-06 | 0.000818 | -0.005934 | -0.007043 |
3 | 2020-01-07 | -0.002861 | 0.007275 | -0.001848 |
4 | 2020-01-08 | 0.030744 | 0.000185 | -0.003557 |
5 | 2020-01-09 | 0.035594 | -0.013146 | -0.002581 |
E para os dados em formato long:
Date | Ticker | returns | |
---|---|---|---|
0 | 2020-01-03 | MGLU3.SA | -0.008920 |
1 | 2020-01-06 | MGLU3.SA | 0.000818 |
2 | 2020-01-07 | MGLU3.SA | -0.002861 |
3 | 2020-01-08 | MGLU3.SA | 0.030744 |
4 | 2020-01-09 | MGLU3.SA | 0.035594 |
3. Criação das Janelas Móveis
Correlação Móvel
A correlação móvel calcula a correlação entre duas séries temporais dentro de uma janela deslizante de tamanho especificado, movendo-se um período por vez. Na análise de ações, isso é frequentemente utilizado para avaliar:
- Diversificação: Ajuda a identificar como diferentes ações se movem em relação umas às outras, auxiliando na construção de um portfólio diversificado.
- Dependência do Mercado: Mede o grau de correlação de uma ação ou setor com um índice de mercado mais amplo.
- Gestão de Riscos: Permite identificar mudanças na estrutura de correlação ao longo do tempo, algo essencial para a avaliação e o gerenciamento de riscos.
Por exemplo, se a correlação móvel entre duas ações começa a aumentar, isso pode indicar que elas estão sendo influenciadas por fatores ou condições de mercado semelhantes.
Vamos aplicar a correlação móvel no Python. O primeiro passo será criar um DataFrame para aplicar o cálculo. Consiste em ter duas colunas de retornos e grupos em formato long, e para isso, juntamos com o dataframe em formato wide.
Date | Ticker | returns | comp | returns_comp | |
---|---|---|---|---|---|
0 | 2020-01-03 | MGLU3.SA | -0.008920 | MGLU3.SA | -0.008920 |
1 | 2020-01-06 | MGLU3.SA | 0.000818 | MGLU3.SA | 0.000818 |
2 | 2020-01-07 | MGLU3.SA | -0.002861 | MGLU3.SA | -0.002861 |
3 | 2020-01-08 | MGLU3.SA | 0.030744 | MGLU3.SA | 0.030744 |
4 | 2020-01-09 | MGLU3.SA | 0.035594 | MGLU3.SA | 0.035594 |
Agora, calculamos as correlações móveis utilizando tk.augment_expanding_apply()
para janelas expansivas e tk.augment_rolling_apply()
para janelas fixas, agrupando os dados por Ticker com groupby
.
Como temos dados diários (dias úteis), vamos computar a correlação móvel em 66 dias úteis (3 meses).
Janela Expandida
Date | Ticker | returns | comp | returns_comp | expanding_corr | |
---|---|---|---|---|---|---|
0 | 2020-01-03 | MGLU3.SA | -0.008920 | MGLU3.SA | -0.008920 | NaN |
1 | 2020-01-06 | MGLU3.SA | 0.000818 | MGLU3.SA | 0.000818 | NaN |
2 | 2020-01-07 | MGLU3.SA | -0.002861 | MGLU3.SA | -0.002861 | NaN |
3 | 2020-01-08 | MGLU3.SA | 0.030744 | MGLU3.SA | 0.030744 | NaN |
4 | 2020-01-09 | MGLU3.SA | 0.035594 | MGLU3.SA | 0.035594 | NaN |
Janela Fixa
Date | Ticker | returns | comp | returns_comp | rolling_corr_win_66 | |
---|---|---|---|---|---|---|
0 | 2020-01-03 | MGLU3.SA | -0.008920 | MGLU3.SA | -0.008920 | NaN |
1 | 2020-01-06 | MGLU3.SA | 0.000818 | MGLU3.SA | 0.000818 | NaN |
2 | 2020-01-07 | MGLU3.SA | -0.002861 | MGLU3.SA | -0.002861 | NaN |
3 | 2020-01-08 | MGLU3.SA | 0.030744 | MGLU3.SA | 0.030744 | NaN |
4 | 2020-01-09 | MGLU3.SA | 0.035594 | MGLU3.SA | 0.035594 | NaN |
Considerações
Neste tutorial aprendemos, através do framework do pytimetk a como computar janelas móveis utilizando como exemplo a correlação entre ações de empresas brasileiras.
Quer aprender mais?
Conheça nossa Formação do Zero à Análise de Dados Econômicos e Financeiros usando Python e Inteligência Artificial. Aprenda do ZERO a coletar, tratar, construir modelos e apresentar dados econômicos e financeiros com o uso de Python e IA.
Referencias