Avaliando performance de portfólios com o Python
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:
- Comparação direta
- 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