Introdução
O principal objetivo de um analista de dados é, obviamente, analisar dados. Porém, uma dúvida comum é: as análises são iguais para todos os tipos de dados?
Essa é uma pergunta válida, pois cada área possui sua própria teoria, características subjacentes e fatos estilizados. No entanto, boa parte do processo de análise segue um formato semelhante, e isso não é diferente para os dados financeiros.
Dados financeiros referem-se a informações relacionadas às finanças de uma empresa, e, no contexto deste exercício, estamos falando dos preços das ações de empresas listadas na bolsa de valores.
Esses preços podem ter diferentes frequências, como diária, semanal, mensal, trimestral ou até mesmo em intervalos de minutos. Geralmente, os dados financeiros são organizados no formato OHLCV, onde as colunas representam: Abertura (Open), Máximo (High), Mínimo (Low), Fechamento (Close), Volume (Volume), além de um preço ajustado.
Com esses dados de preços, podemos calcular a variação percentual do preço de fechamento (ou ajustado), também conhecida como retorno (o ganho percentual da ação em determinado período).
Com os dados de preço, é possível criar uma série de indicadores técnicos para analisar a tendência da série. Já com os retornos, podemos calcular estatísticas sobre a empresa, como média, mediana e desvio padrão, ou realizar análises mais avançadas, como regressão linear para calcular o risco de mercado, conhecido como Beta.
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.
Passos
Neste tutorial, vamos explorar a facilidade de trabalhar com dados financeiros no Python, focando na análise de retornos dos preços mensais de quatro empresas brasileiras: “PETR4.SA”, “ITUB4.SA”, “VALE3.SA” e “MGLU3.SA”, com dados mensais de 2020 até o final de 2024.
Os passos são os seguintes:
- Coleta de dados usando
yfinance
- Introdução ao
pytimetk
e visualização - Análise dos retornos
- Análise descritiva e correlação
- Janelas Móveis: Análise de estatísticas descritivas móveis de 60 meses
Ao final, você entenderá como o Python facilita a criação de análises corriqueiras de ações. Essa análise é apenas a ponta do iceberg, pois a biblioteca permite realizar análises mais robustas e complexas.
Dados Financeiros
Os dados financeiros de fontes como openbb
ou yfinance
são fornecidos no formato OHLCV (Open, High, Low, Close, Volume) e geralmente incluem um preço “ajustado” (corrigido para desdobramentos de ações). Esses dados possuem três propriedades essenciais de séries temporais:
- Timestamp: Frequências diárias, horárias, etc.
- Valor: Um preço (ou retornos).
- Grupos: Símbolos das ações.
Vamos explorar essas propriedades usando a função tk.glimpse()
.
<class 'pandas.core.frame.DataFrame'>: 4900 rows of 8 columns
Date: datetime64[ns] [Timestamp('2020-01-02 00:00:00'), Timesta ...
Ticker: object ['ITUB4.SA', 'MGLU3.SA', 'PETR4.SA', 'VALE ...
Adj Close: float64 [26.232112884521484, 115.01505279541016, 9 ...
Close: float64 [34.57272720336914, 115.34874725341797, 30 ...
High: float64 [34.57272720336914, 115.34874725341797, 30 ...
Low: float64 [33.62727355957031, 111.5606918334961, 30. ...
Open: float64 [33.890907287597656, 112.94029235839844, 3 ...
Volume: int64 [22732710, 3164766, 37774500, 17509700, 27 ...
Visualizando dados
Análise de Retornos
Na área financeira, a análise de retornos envolve a avaliação dos ganhos ou perdas de um investimento em relação ao capital investido. Essa análise é fundamental para a gestão de investimentos e carteiras:
- Desempenho: A análise de retornos determina o desempenho e o perfil risco-retorno de ativos financeiros, carteiras ou estratégias de investimento.
- Tomada de decisão informada: Permite que investidores, analistas e gestores de portfólio tomem decisões embasadas sobre alocação de ativos, gerenciamento de risco e estratégias de investimento.
Análise de Retornos ao Longo do Tempo
Os retornos NÃO são estáticos (portanto, devem ser analisados ao longo do tempo).
- Podemos usar cálculos de janelas móveis com
tk.augment_rolling()
para calcular, em larga escala, métricas como média móvel, desvio padrão e amplitude (spread). - Podemos expandir os cálculos usando
tk.augment_rolling_apply()
para incluir Correlação Móvel e Regressão Móvel, permitindo comparações ao longo do tempo.
Aplicação: Análise Estatística Descritiva
Muitos traders calculam estatísticas descritivas como média, mediana, moda, assimetria, curtose e desvio padrão para entender a tendência central, a dispersão e o formato da distribuição dos retornos.
Passo 1: Retornos
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. É a partir dela que realizamos diversas análises quants.
Ticker | ITUB4.SA | MGLU3.SA | PETR4.SA | VALE3.SA |
---|---|---|---|---|
Date | ||||
2020-01-03 | -0.010518 | -0.008919 | -0.008143 | -0.007362 |
2020-01-06 | -0.014882 | 0.000818 | 0.011823 | -0.005934 |
2020-01-07 | -0.023200 | -0.002861 | -0.003895 | 0.007275 |
2020-01-08 | -0.016294 | 0.030744 | -0.006191 | 0.000185 |
2020-01-09 | -0.019933 | 0.035594 | -0.003279 | -0.013145 |
... | ... | ... | ... | ... |
2024-11-25 | -0.000293 | 0.062633 | -0.006088 | -0.000172 |
2024-11-26 | 0.019062 | 0.062937 | -0.001276 | -0.012721 |
2024-11-27 | -0.024460 | -0.093985 | -0.003578 | 0.012189 |
2024-11-28 | -0.035988 | -0.067427 | -0.010259 | -0.010322 |
2024-11-29 | -0.002448 | 0.004449 | 0.008033 | 0.021728 |
1224 rows × 4 columns
Passo 2: Estatísticas Descritivas
Utilizamos o método describe()
para obter estatísticas básicas, como média, mediana, desvio padrão e percentis. Esses resultados ajudam a entender a tendência central e a dispersão dos dados.
Para selecionar os melhores ativos, priorizamos aqueles com média e mediana mais altas (positivas), menor desvio padrão e uma distribuição que favoreça retornos positivos (assimetria à direita) em vez de negativos (assimetria à esquerda).
Essa escolha deve ser tomada com cuidado, afinal, o passado pode não representar o futuro.
Ticker | ITUB4.SA | MGLU3.SA | PETR4.SA | VALE3.SA |
---|---|---|---|---|
count | 1224.000000 | 1224.000000 | 1224.000000 | 1224.000000 |
mean | 0.000258 | -0.001103 | 0.001475 | 0.000700 |
std | 0.020268 | 0.044231 | 0.028267 | 0.023751 |
min | -0.179643 | -0.228311 | -0.296978 | -0.151984 |
25% | -0.010482 | -0.027122 | -0.010542 | -0.011918 |
50% | 0.000000 | -0.003622 | 0.001024 | -0.000474 |
75% | 0.010907 | 0.022103 | 0.015235 | 0.012000 |
max | 0.110593 | 0.251429 | 0.222222 | 0.213579 |
Passo 3: Correlação
A correlação entre os retornos dos ativos mede o grau de relação entre eles, indicando como se movem em conjunto.
Uma correlação positiva sugere que os ativos tendem a se mover na mesma direção, enquanto uma correlação negativa indica que se movem em direções opostas. Analisar a correlação ajuda a diversificar a carteira, reduzindo riscos e melhorando a eficiência do portfólio.
A escolha se dá para ativos que possuem direções opostas, significando diversificação.
Ticker | ITUB4.SA | MGLU3.SA | PETR4.SA | VALE3.SA |
---|---|---|---|---|
Ticker | ||||
ITUB4.SA | 1.000000 | 0.321841 | 0.505726 | 0.365955 |
MGLU3.SA | 0.321841 | 1.000000 | 0.275473 | 0.242866 |
PETR4.SA | 0.505726 | 0.275473 | 1.000000 | 0.469650 |
VALE3.SA | 0.365955 | 0.242866 | 0.469650 | 1.000000 |
Janelas Deslizantes
O problema é que o mercado de ações está em constante mudança. Essas estatísticas descritivas não representam as flutuações mais recentes. É aqui que o pytimetk
entra em cena, permitindo o cálculo de estatísticas descritivas em janelas móveis.
O que são Janelas Móveis?
O conceito de janelas móveis (rolling window) é uma técnica utilizada para calcular estatísticas ou métricas ao longo do tempo, analisando subconjuntos contínuos dos dados. Em vez de calcular uma estatística com base em todo o conjunto de dados, aplicamos o cálculo dentro de uma janela deslizante de tamanho fixo.
Como Funciona?
- Definir o tamanho da janela: Escolhemos um número fixo de períodos (ex.: 30 dias para uma média móvel mensal).
- Calcular a métrica dentro da janela: Aplicamos uma função estatística (como média, desvio padrão, correlação) apenas aos dados dentro desse intervalo.
- Deslocar a janela: Movemos a janela um período à frente e repetimos o cálculo. Isso gera uma sequência de valores da métrica ao longo do tempo.
Aplicação: Análise de Estatísticas Descritivas Móveis de 60 meses
Vamos calcular e visualizar as estatísticas móveis de 60 meses com base no método tk.augment_rolling()
. Para essa tarefa usamos um DataFrame de retornos em formato long.
Date | Ticker | returns | |
---|---|---|---|
0 | 2020-01-03 | ITUB4.SA | -0.010518 |
1 | 2020-01-06 | ITUB4.SA | -0.014882 |
2 | 2020-01-07 | ITUB4.SA | -0.023200 |
3 | 2020-01-08 | ITUB4.SA | -0.016294 |
4 | 2020-01-09 | ITUB4.SA | -0.019933 |
Agora vamos criar as métricas em janelas de deslizantes. Podemos fazer a criação de diversas métricas para diversos ativos de uma única vez. Criamos janelas deslizantes para a média, mediana, desvio-padrão, percentil 25 e 75 e valores mínimos e máximos.
Date | Ticker | returns | returns_rolling_mean_win_60 | returns_rolling_std_win_60 | returns_rolling_min_win_60 | returns_rolling_q25_win_60 | returns_rolling_median_win_60 | returns_rolling_q75_win_60 | returns_rolling_max_win_60 | |
---|---|---|---|---|---|---|---|---|---|---|
59 | 2020-03-30 | ITUB4.SA | 0.049630 | -0.006600 | 0.038014 | -0.098204 | -0.021304 | -0.005764 | 0.010419 | 0.110593 |
60 | 2020-03-31 | ITUB4.SA | -0.042306 | -0.007130 | 0.038290 | -0.098204 | -0.021398 | -0.005764 | 0.010419 | 0.110593 |
61 | 2020-04-01 | ITUB4.SA | -0.072529 | -0.008091 | 0.039200 | -0.098204 | -0.022009 | -0.005764 | 0.010419 | 0.110593 |
62 | 2020-04-02 | ITUB4.SA | 0.004673 | -0.007626 | 0.039183 | -0.098204 | -0.021398 | -0.003755 | 0.010419 | 0.110593 |
63 | 2020-04-03 | ITUB4.SA | -0.039070 | -0.008006 | 0.039378 | -0.098204 | -0.022451 | -0.003755 | 0.010419 | 0.110593 |
Agora vamos visualizar os dados. Para isso, transformamos os DataFrame de wide para long. E em seguida criamos os gráficos para todas as métricas.
Ticker | Date | statistic_type | value | |
---|---|---|---|---|
0 | ITUB4.SA | 2020-03-30 | returns | 0.049630 |
1 | ITUB4.SA | 2020-03-31 | returns | -0.042306 |
2 | ITUB4.SA | 2020-04-01 | returns | -0.072529 |
3 | ITUB4.SA | 2020-04-02 | returns | 0.004673 |
4 | ITUB4.SA | 2020-04-03 | returns | -0.039070 |
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.