Como calcular retornos históricos de ações no Python?
Avaliar o desempenho de um ativo financeiro vai além de acompanhar sua valorização. Um dos pilares da gestão de investimentos é mensurar e entender o risco associado às flutuações de preço — e isso é feito, principalmente, por meio da análise dos retornos históricos dos ativos.
Em finanças, risco é geralmente interpretado como a variabilidade dos retornos. Essa variabilidade pode afetar significativamente o valor de uma carteira, sendo essencial para a construção de estratégias mais robustas de alocação. Para isso, trabalhamos preferencialmente com retornos históricos ao invés de preços absolutos, pois eles:
- Representam variações percentuais (taxas de crescimento);
- São livres de escala (comparáveis entre ativos com preços diferentes);
- Apresentam propriedades estatísticas desejáveis, como estacionariedade e ergodicidade;
- Permitem modelagem mais apropriada com técnicas estatísticas e econométricas.
Além disso, o uso de retornos históricos abre espaço para a aplicação de modelos como ARMA, ARCH, GARCH e modelos de volatilidade estocástica — ferramentas indispensáveis para previsão de risco, construção de portfólios e avaliação de estratégias de investimento sob diferentes cenários de mercado.
Usando Python para calcular retornos históricos
Com o Python, é possível calcular todas as métricas abaixo de forma simples e eficiente. Vamos ilustrar com um exemplo prático utilizando o Ibovespa, coletando dados diários do Yahoo Finance (ticker ^BVSP
) no período de 2018 até o final de 2022.
Esse tipo de análise pode ser estendido para qualquer ativo ou portfólio e serve como base para:
- Comparar ativos em termos de desempenho ajustado ao risco;
- Estimar métricas históricas que alimentam modelos de otimização de carteiras;
- Avaliar a estabilidade dos retornos históricos em diferentes regimes de mercado.
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.
Retornos Históricos:
1. Retorno Simples:
- A variação de preços entre os instantes e
é dada por
.
- A variação relativa de preços ou retorno líquido simples deste ativo entre os mesmos instantes é definida como: . É também chamada de Taxa de Retorno.
- Formulação matemática:
2. Retorno Bruto Simples:
- Chamamos de retorno bruto simples.
- O retorno bruto simples representa a variação de preços de um ativo sem a representação de taxas percentuais.
- Formulação matemática:
retorno_simples | retorno_bruto_simples | |
---|---|---|
Date | ||
2018-01-02 | NaN | NaN |
2018-01-03 | 0.001335 | 1.001335 |
2018-01-04 | 0.008360 | 1.008360 |
2018-01-05 | 0.005391 | 1.005391 |
2018-01-08 | 0.003895 | 1.003895 |
... | ... | ... |
2022-12-23 | 0.022187 | 1.022187 |
2022-12-26 | -0.008751 | 0.991249 |
2022-12-27 | -0.003596 | 0.996404 |
2022-12-28 | 0.017444 | 1.017444 |
2022-12-29 | -0.001869 | 0.998131 |
1238 rows × 2 columns
3. Retorno Composto Continuadamente (Log-Retorno):
- Usado para avaliar o desempenho de um investimento ao longo de um período contínuo.
- Calculado usando logaritmos naturais e a fórmula:
retorno_simples | retorno_bruto_simples | log_retorno | |
---|---|---|---|
Date | |||
2018-01-02 | NaN | NaN | NaN |
2018-01-03 | 0.001335 | 1.001335 | 0.001334 |
2018-01-04 | 0.008360 | 1.008360 | 0.008325 |
2018-01-05 | 0.005391 | 1.005391 | 0.005377 |
2018-01-08 | 0.003895 | 1.003895 | 0.003888 |
... | ... | ... | ... |
2022-12-23 | 0.022187 | 1.022187 | 0.021944 |
2022-12-26 | -0.008751 | 0.991249 | -0.008790 |
2022-12-27 | -0.003596 | 0.996404 | -0.003602 |
2022-12-28 | 0.017444 | 1.017444 | 0.017294 |
2022-12-29 | -0.001869 | 0.998131 | -0.001870 |
1238 rows × 3 columns
4. Retorno Médio Aritmético:
- Calcula para obter o retorno médio de uma determinado período em um intervalo. Exemplo: em média, qual foi o retorno diário de uma ação durante um período?
- Calcula através de uma média simples:
onde é tamanho da amostra/série.
Através do cálculo usando Python, para o caso do Ibovespa no período temos o valor de:
0.000427414617205675
5. Retorno Médio Geométrico:
- Calculado para investimentos de longo prazo, levando em consideração o reinvestimento de ganhos. Basicamente, é o retorno médio composto em todo o período de investimento
- Representa o crescimento composto e é calculado como:
Através do cálculo usando Python, para o caso do Ibovespa no período temos o valor de:
0.00027930474673532046
Retornos Acumulados:
6. Retorno Simples Multiperíodos:
- Calculado para avaliar o desempenho de um investimento ao longo de vários períodos.
- Usado para somar os retornos simples em cada período.
- Formulação matemática:
Para o caso do Ibovespa, o Retorno Acumulado no período é de:
0.41262790309535013
É possível acumular os valores em cada período até o fim da amostra, como demonstra o gráfico abaixo:
7. Retorno Composto Continuadamente (Log-Retorno) Multiperíodos:
- Usado para avaliar o desempenho de um investimento ao longo de múltiplos períodos de forma contínua.
- Calculado somando os log-retornos de cada período.
- Formulação matemática:
Para o caso do Ibovespa, o Retorno Acumulado Continuadamente no período é de:
0.34545173080294256
Retorno Anualizado:
8. Retorno Anualizado para Retornos Simples:
- Utilizado para expressar o retorno de um investimento em uma base anual, mesmo que o período de investimento seja menor que um ano.
- Calculado multiplicando o retorno simples pelo número de períodos em um ano.
- Formulação matemática:
Para o caso do Ibovespa no período, temos o seguinte valor:
0.1077084835358301
9. Retorno Anualizado para Retornos Geométricos:
- Usado para calcular o retorno anualizado de investimentos de longo prazo que consideram o reinvestimento de ganhos.
- Calculado usando a fórmula (para o caso de diário, com 252 dias úteis):
Para o caso do Ibovespa no período, temos o seguinte valor:
0.07291041355654992
10. Retorno Anualizado em Janelas Deslizantes
- Calcula a taxa de retorno média anualizada em períodos móveis, útil para análise de tendências e volatilidade ao longo do tempo.
- Para calcular o retorno anualizado móvel em uma janela deslizante, você calcula o retorno anualizado para cada janela e move a janela ao longo do conjunto de dados.
- A fórmula é a seguinte para o aritmético e geométrico, respectivamente:
Onde:
- é o tamanho fixo da janela (por exemplo, 252 para um ano ou 22 para um mês).
Volatilidade
1. Desvio Padrão (Volatilidade):
O desvio padrão é uma medida de dispersão que indica a variabilidade dos retornos de um ativo ou investimento. Ele mede o grau de volatilidade do ativo.
Fórmula:
O desvio padrão é calculado da seguinte maneira para uma série de retornos:
Onde:
- é o número de observações (dias, meses, anos, etc.).
- é o retorno no período
.
- é a média dos retornos.
O desvio padrão diário em toda a amostra dos retornos do Ibovespa no período foi de:
0.017108656414304535
2. Desvio Padrão Anualizado:
O desvio padrão anualizado é o desvio padrão dos retornos ajustado para um período anual. Isso é útil para comparar a volatilidade em uma base anual.
Fórmula:
Para anualizar o desvio padrão, você multiplica o desvio padrão da série de retornos por uma raiz quadrada do número de períodos em um ano (geralmente 252 para dias de negociação ou 12 para meses).
Onde é o número de períodos de observação em um ano (por exemplo, 252 para dados diários e 12 para meses).
0.2715915008321991
3. Desvio Padrão Móvel (ou Desvio Padrão em Janelas Deslizantes):
O desvio padrão móvel é usado para avaliar a volatilidade ao longo do tempo, calculando o desvio padrão em janelas deslizantes (móveis) de dados.
Fórmula:
Para calcular o desvio padrão móvel em uma janela deslizante, você calcula o desvio padrão para cada janela e move a janela ao longo do conjunto de dados.
Onde:
- é o tamanho da janela (por exemplo, 252 para um ano ou 22 para um mês).
- são os retornos dentro da janela.
- é a média dos retornos dentro da janela.
Para o caso do Ibovespa, os seguintes valores para o desvio padrão em janelas deslizantes de 44 dias, tanto diário, quanto anualizado se encontram nos respectivos gráficos abaixo:
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.
Referências
ELTON, Edwin J.; GRUBER, Martin J.; BROWN, Stephen J.; GOETZMANN, William N.
Modern portfolio theory and investment analysis. 9. ed. Hoboken: Wiley, 2014.
TSAY, Ruey S.
Analysis of financial time series. 3. ed. Hoboken: Wiley-Interscience, 2010.
Morettin, P. A..
Econometria financeira: um curso em séries temporais financeiras. Editora Blucher. 3 ed. 2017.