Avaliando performance de portfólios com o Python - TC

TC School / Quant & Investimentos

Avaliando performance de portfólios com o Python

25/03/2021 às 15:00

TC School

Hoje trazemos mais uma aplicação da linguagem de programação Python no campo dos investimentos e análise de carteira de ações. Dessa vez, iremos aplicar as métricas de avaliação de performance trazidas pelo 19º capítulo da sequência de e-books do CFA Institute Investment Foundations®.

Com isso, iremos – abordando prática e teoria – entender os seguintes tópicos:

  • Cálculo de retornos absolutos
  • Patrimônio, benchmark e taxa Selic
  • Métricas de retornos ajustados ao risco
  • Métricas de retornos relativos

Bons estudos!

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

Vitor Braga Diniz
Estagiário do TC Matrix. Graduando em Ciência da Computação pela Universidade Federal de Campina Grande (UFCG)

TC School

A sua escola como investidor.

Disclaimer: Este material é produzido e distribuído somente com os propósitos de informar e educar, e representa o estado do mercado na data da publicação, sendo que as informações estão sujeitas a mudanças sem aviso prévio. Este material não constitui declaração de fato ou recomendação de investimento ou para comprar, reter ou vender quaisquer títulos ou valores mobiliários. O usuário não deve utilizar as informações disponibilizadas como substitutas de suas habilidades, julgamento e experiência ao tomar decisões de investimento ou negócio. Essas informações não devem ser interpretadas como análise ou recomendação de investimentos e não há garantia de que o conteúdo apresentado será uma estratégia efetiva para os seus investimentos e, tampouco, que as informações poderão ser aplicadas em quaisquer condições de mercados. Investidores não devem substituir esses materiais por serviços de aconselhamento, acompanhamento ou recomendação de profissionais certificados e habilitados para tal função. Antes de investir, por favor considere cuidadosamente a sua tolerância ou a sua habilidade para riscos. A administradora não conduz auditoria nem assume qualquer responsabilidade de diligência (due diligence) ou de verificação independente de qualquer informação disponibilizada neste espaço. Administradora: TradersNews Informação & Educação Ltda. Todos os direitos reservados.

TradersClub

O app essencial para investidores do mercado financeiro brasileiro.

Uma comunidade com milhares de investidores, ferramentas e serviços que vão ajudar você a investir melhor!

TradersClub