Como calcular retornos históricos de ações no Python?

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 t-1 e t é dada por \Delta P_t = P_t - P_{t-1}.
- A variação relativa de preços ou retorno líquido simples deste ativo entre os mesmos instantes é definida como: R_t = \Delta P_t / P_{t-1}. É também chamada de Taxa de Retorno.
- Formulação matemática: R_t = \frac{P_t - P_{t-1}}{P_{t-1}}

Retornos Históricos Simples

2. Retorno Bruto Simples:

- Chamamos 1 + R_t = P_t / P_{t-1} 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: 1 + R_t = \frac{P_t}{P_{t-1}}

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: r_t = \ln\left(\frac{P_t}{P_{t-1}}\right)

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: \frac{1}{N-1}\Sigma_{i=1}^N R_t
onde N é 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: \text{Retorno Geométrico} = \left[(1 + R_t) \cdot (1 + R_{t-1}) \cdot \ldots \cdot (1 + R_1)\right]^{\frac{1}{N}} - 1

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: \text{Retorno Simples Multiperíodos} = \prod_{i=1}^{N} (1 + R_i) - 1

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:

Retornos Históricos Acumulados Simples

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: \text{Log-Retorno Multiperíodos} = \Sigma_{i=1}^Nr_t

Para o caso do Ibovespa, o Retorno Acumulado Continuadamente no período é de:

0.34545173080294256

Retornos Históricos Acumulados Contínuo

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: \text{Retorno Anualizado Simples} = \frac{1}{N-1}\Sigma_{i=1}^N R_t \times 252

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): \text{Retorno Anualizado Geométrico} = \left[(1 + R_t) \cdot (1 + R_{t-1}) \cdot \ldots \cdot (1 + R_1)\right]^{\frac{252}{N}} - 1

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:

\text{Retorno Anualizado Simples} = \frac{1}{T-1}\Sigma_{i=1}^N R_t \times 252

\text{Retorno Anualizado Geométrico} = \left[(1 + Retorno\,Geométrico)^{\frac{252}{T}} - 1\right]

Onde:

- T é o tamanho fixo da janela (por exemplo, 252 para um ano ou 22 para um mês).

Retornos Históricos Anualizados em Janelas DeslizantesRetornos Históricos Anualizados Geométricos em Janelas Deslizantes

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:

    \[\text{Desvio Padrão} = \sqrt{\frac{1}{N-1} \sum_{i=1}^{N} (R_i - \overline{R})^2}\]

Onde:

- N é o número de observações (dias, meses, anos, etc.).

- R_i é o retorno no período i.

- \overline{R} é 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).

    \[\text{Desvio Padrão Anualizado} = \text{Desvio Padrão} \times \sqrt{N}\]

Onde N é 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.

    \[\text{Desvio Padrão Móvel} = \sqrt{\frac{1}{T-1} \sum_{i=1}^{T} (R_i - \overline{R})^2}\]

Onde:

- T é o tamanho da janela (por exemplo, 252 para um ano ou 22 para um mês).

- R_i são os retornos dentro da janela.

- \overline{R} é 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:

desvio-padrão em janelas deslizantesdesvio-padrão em janelas deslizantes

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.

Compartilhe esse artigo

Facebook
Twitter
LinkedIn
WhatsApp
Telegram
Email
Print

Comente o que achou desse artigo

Outros artigos relacionados

O que são LLMs?

Anteriormente, aprendemos que cada Agente precisa de um Modelo de IA em seu núcleo, e que os LLMs são o tipo mais comum de modelos de IA para esse propósito.

Agora, vamos aprender o que são LLMs e como eles impulsionam os Agentes. Esta seção oferece uma explicação técnica concisa sobre o uso de LLMs.

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.