Avaliando performance de portfólios com o Python

TC
TC - Tecnologia e Produtos
9 min readJan 10, 2022

Cálculo de retorno anormal

Se você ainda não conhece os comandos básicos do Python, é interessante ler os primeiros tópicos da série Quant & Investimentos.

Importando bibliotecas

Inicialmente, importaremos as bibliotecas necessárias para o desenvolvimento deste estudo:

Funções Úteis

Em seguida, declararemos as algumas funções úteis que usaremos durante o estudo.

Patrimônio, benchmark e taxa Selic

No decorrer deste estudo, utilizaremos constantemente esses dados. Tais informações terão frequência mensal neste artigo.

  • O patrimônio consiste no volume de dinheiro existente nas nossas carteiras de ações (utilizaremos duas: um com aportes mensais e outro sem);
  • O benchmark é o retorno do mercado, representado pelo Ibovespa; e
  • A taxa básica de juros do Brasil, ou taxa Selic.

Dessa forma, declararemos as variáveis de patrimônio e benchmark:

A taxa Selic precisa de um processamento maior nos dados, pois a buscaremos através da API do Banco Central do Brasil e o formato de entrega é diferente do utilizado neste estudo.

Cálculo de retornos absolutos

Carteira sem aportes mensais

Suponha que o temos uma carteira de investimentos e que nosso patrimônio evoluiu da seguinte forma durante os últimos 12 meses:

Para calcular os retornos mensais absolutos de uma carteira, basta utilizar a equação:

Retorno = patrimônio atual / patrimônio anterior -1

Com isso, podemos calcular as rentabilidades mensais aplicando a função retornos_mensais (que implementa a fórmula acima).

Além disso, para verificar a rentabilidade acumulada do nosso patrimônio, iremos aplicar a fórmula do retorno considerando sempre o patrimônio anterior como o inicial (patrimônio do mês 1). Essa descrição está implementada na função retornos_acumulados e, ao aplicá-la, obtemos:

Medição com aportes mensais

Para tornar o caso mais realista, iremos modificar nossa regra de aportes patrimônio para um aporte mensal de R$ 1000,00, sendo realizado após o cálculo da rentabilidade de cada mês. Agora, temos um patrimônio que obteve a seguinte evolução:

Se utilizarmos a função criada previamente para calcular os retornos, obteremos o seguinte resultado:

O retorno acumulado dos últimos 12 meses é 79,81%.

Contudo, obtivemos aqui um resultado falso, pois há o efeito do incremento de R$ 12 mil pela sucessão de aportes. Sabendo disso, deveremos, portanto, desconsiderar o valor do aporte do mês seguinte, conforme a equação:

retorno = (patrimônio atual — aporte) / patrimônio anterior -1

Tal equação está implementada na função retornos_com_aportes.

Aplicando a função, obtemos o seguintes resultados mensais:

Para mensurar os retornos acumulados, aplicaremos a função já criada.

Comparando os resultados, observamos que:

O retorno acumulado ilusório foi 79,81%. Já o retorno acumulado é, na verdade, 67,16%.

Retorno ajustado ao risco

Já somos capazes de calcular no Python os retornos mensais e acumulados da nossa carteira de investimentos. Agora vamos aplicar uma série de métricas para avaliar se a performance encontrada anteriormente é razoável para o risco assumido.

Risco

A definição de risco é bastante discutida e pode variar de acordo com o tipo de investidor. Consideraremos, neste artigo, risco como a volatilidade do portfólio, que, por sua vez, será calculada pelo desvio padrão dos retornos.

Métrica 1: Risco-Retorno

A medida mais simples de retorno ajustado é o coeficiente de risco-retorno, calculado pela razão entre o retorno e o risco, conforme a equação:

Risco-Retorno = Retorno acumulado / risco do portfólio

Aplicando-a, obtemos:

A medida de risco-retorno para o portfólio sem aportes é 6.76, sendo o retorno = 0.486 e o risco = 0.072.

A medida de risco-retorno para o portfólio com aportes é 8.72, sendo o retorno = 0.672 e o risco = 0.077.

Métrica 2: Índice de Sharpe

William Sharpe considera que o prêmio pelo risco da carteira é medido pelo seu excesso de retorno, ou seja, pela diferença entre o retorno do período e o retorno de uma taxa livre de risco. Com isso, o Índice de Sharpe (IS) é calculado pela razão entre o excesso de retorno e o risco do portfólio.

IS = excesso de retorno / risco do portfólio

excesso de retorno = retorno do portfólio — taxa livre de risco

A taxa livre de risco é aproximada pela taxa de juros de curto prazo do país, pois tende a ser a taxa de mais baixo risco. No caso do Brasil — e para facilitar os cálculos — utilizaremos a taxa Selic mensal entre março de 2020 e fevereiro de 2021 (considerando que os retornos do portfólio são referentes ao mesmo período).

A partir disso, podemos calcular o Índice Sharp (IS).

O Índice de Sharpe para o portfólio sem aportes é 6.45, sendo o excesso de retorno = 0.463 e o risco = 0.072. Já o Índice de Sharpe para o portfólio com aportes é 8.43, sendo o excesso de retorno = 0.649 e o risco = 0.077.

Métrica 3: Índice de Treynor

Índice de Treynor (IT) é bastante parecido com o de Sharpe, entretanto, a sua medida de risco é o beta(β) do portfólio. Para calcular o β, basta aplicar a equação [6] — como discutido em Calculando o Beta em Python — e, em seguida, calculamos a razão entre o excesso de retorno e o β, conforme ilustra a equação [7].

β = cov(Rp, Rm) / var(Rm) [6]

IT = excesso de retorno / β [7]

Sendo Rm os retornos do mercado e Rp os retornos do portfólio.

Consideraremos o Ibovespa como aproximação do mercado. Portanto, calcularemos seus retornos mensais (Rm) com as cotações já adquiridas. Além disso, criaremos uma função — utilizando lambda expression — para o cálculo do beta.

O Índice de Treynor para o portfólio sem aportes é 0.48, sendo o excesso de retorno = 0.463 e o β = 0.972. Já o Índice de Treynor para o portfólio com aportes é 0.63, sendo o excesso de retorno = 0.649 e o β = 1.025.

Retornos relativos

O conceito de retorno relativo surge a partir da comparação da rentabilidade do portfólio com os índices disponíveis no mercado (benchmarks), como Ibovespa, SMLL, IBrX100, IBrA, S&P500, NASD100, entre outros. Existem várias formas calcular os retornos relativos ao mercado e neste artigo abordaremos:

  1. Comparação direta
  2. Information Ratio

Comparação direta

A forma mais simples de calcular retornos relativos é avaliar a razão entre o retorno acumulado da carteira e do mercado. Em outras palavras, avaliar quantas vezes o seu portfólio “bateu” o benchmark, conforme ilustrado na equação.

retorno relativo = retorno acumulado do portfólio / retorno acumulado do benchmark

Com essa informação, já é possível calcular os retornos dos portfólios relativos ao Ibovespa.

O retorno da carteira sem aportes foi 95.79% do retorno do Ibovespa. Já o retorno da carteira com aportes foi 132.49% do retorno do Ibovespa.

Information Ratio

O Information Ratio é outra forma de se calcular uma relação risco-retorno. O indicador utiliza, como medida de retorno, a diferença média entre as rentabilidades do portfólio e do benchmark e, como medida de risco, o tracking error (desvio padrão das diferenças).

Em que:

  • Rpi é o retorno do portfólio para o mês i;
  • Rmi é o retorno do benchmark para o mês i; e
  • n é o número total de meses.

Sabendo disso, podemos calcular o Information Ratio das nossas carteiras de ações.

O Information Ratio da carteira sem aportes foi de -0.079; com retorno = -0.001 e tracking_error = 0.016. Já o Information Ratio da carteira sem aportes foi de 0.431; com retorno = 0.009 e tracking_error = 0.022.

Retorno anormal: Alfa de Jensen

O Alfa de Jensen (α) é uma medida de retorno anormal, ou seja, parte do retorno do portfólio não explicado pelo risco assumido (medido pelo beta do portfólio — ver Calculando o Beta em Python).

O α é o coeficiente linear do modelo CAPM — discutido em Python: Modelo de Precificação de Ativos (CAPM) — o qual é utilizado para estimar o retorno teórico esperado de um portfólio [9]. Para encontrar esse valor, devemos realizar a regressão linear dos excessos de retorno da carteira com os do benchmark.

E[Rp] — Rf = α + β(E[Rm] -Rf) [9]

Em que,

  • E[Rp] — Rf representa os excessos de retorno do portfólio;
  • E[Rm] — Rf representa os excessos de retorno do mercado.
  • α — significa o retorno anormal do portfólio (Alfa de Jensen)
  • β — significa o beta do portfólio

Com isso, podemos aplicar a função OLS da biblioteca statsmodels — que realiza uma regressão linear utilizando o método dos Mínimos Quadrados Ordinários — nos dados dos retornos das carteiras e do Ibovespa para descobrirmos o beta e o alfa dos portfólios.

Portfólio sem aportes

Portfólio com aportes

Para tais resultados das regressões, obtemos os seguintes modelos para os portfólios:

Portfólio sem aporte: α = -0.02% ao mês.

Portfólio com aporte: α = 0.84% ao mês.

Considerações finais

Neste artigo aprendemos a calcular os retornos periódicos e acumulados para carteiras com e sem aportes mensais e ajustá-los ao risco utilizando 3 métricas: risco-retorno, Índice de Sharpe e Índice de Treynor. Além disso, aprendemos a avaliar o desempenho do portfólio com base em um benchmark, calculando retornos relativos. Por fim, revisamos o CAPM para calcular o retorno anormal (α) do portfólio.

Referências

CFA Institute Investment Foundations®, Third Edition — Chapter 19. Performance Evaluation.

Notebook do Google Colaboratory

Autor: Vitor B. Diniz — Engenheiro de Software do TC School

--

--

TC
TC - Tecnologia e Produtos

A maior plataforma de educação, informação e inteligência do mercado financeiro. Baixe agora o app: https://bit.ly/BaixeOAppTC