Como usar o Python para tratar e manipular dados financeiros

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:

  1. Coleta de dados usando yfinance
  2. Introdução ao pytimetk e visualização
  3. Análise dos retornos
    1. Análise descritiva e correlação
    2. 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?

  1. Definir o tamanho da janela: Escolhemos um número fixo de períodos (ex.: 30 dias para uma média móvel mensal).
  2. 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.
  3. 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. 

Compartilhe esse artigo

Facebook
Twitter
LinkedIn
WhatsApp
Telegram
Email
Print

Comente o que achou desse artigo

Outros artigos relacionados

Como criar janelas móveis de séries temporais usando o Python

Janelas Móveis/Deslizantes, ou Rolling Windows, são termos frequentes na análise de séries temporais. Mas o que são e como aplicá-las no Python? Neste tutorial, mostramos como essa ferramenta é essencial para a análise de dados utilizando como exemplo a correlação móvel de ações brasileiras.

Como incorporar choques em cenários de previsão?

Neste exercício mostramos como incorar choques no cenário de variáveis exógenas para fins de previsão. Usando como exemplo a previsão do IPCA, através de um modelo de machine learning, mostramos os cuidados a serem tomados e uma forma simples de definir o cenário com os choques. Ao final, apresentamos uma previsão com um suposto choque e uma previsão sem o choque para comparação.

Como preparar os dados para um modelo preditivo?

Modelos de previsão macroeconômica podem facilmente alcançar um número elevado de variáveis. Mesmo modelos simplificados, como o Modelo de Pequeno Porte (MPP) do Banco Central, usam cerca de 30 variáveis. Isso impõe um grande desafio ao nosso dia a dia: como fazer a gestão destes dados para uso em modelos, desde a coleta até o tratamento?

Boletim AM

Receba diretamente em seu e-mail gratuitamente nossas promoções especiais e conteúdos exclusivos sobre Análise de Dados!

Boletim AM

Receba diretamente em seu e-mail gratuitamente nossas promoções especiais e conteúdos exclusivos sobre Análise de Dados!

como podemos ajudar?

Preencha os seus dados abaixo e fale conosco no WhatsApp

Boletim AM

Preencha o formulário abaixo para receber nossos boletins semanais diretamente em seu e-mail.