Teoria Moderna do Portfólio em Python

Julia Pocciotti
Turing Talks
Published in
6 min readApr 11, 2021

Otimize a sua carteira de investimentos com a teoria de Harry Markowitz

Texto escrito por Julia Pocciotti

Quando falamos sobre "Otimização de Portfólios", estamos comentando sobre o processo utilizado para selecionarmos a melhor distribuição de ativos em uma carteira a fim de atingirmos um objetivo comum. Esse objetivo pode variar de acordo com o perfil de cada tipo de investidor, pode ser que para um seja preferível maximizar o retorno esperado de seu portfólio, enquanto, para outro, o objetivo seria investir em uma carteira com o menor risco possível, por exemplo.

Hoje, vamos falar sobre todos esses conceitos e como otimizar um portfólio utilizando a chamada Teoria Moderna do Portfólio, do laureado com o prêmio Nobel da Economia, Harry Markowitz.

Introdução

A essência da Teoria Moderna do Portfólio está ligada ao trade off existente entre o Retorno e Risco. Segundo Markowitz, os investidores seriam avessos ao risco, e, por isso, só estariam dispostos a aumentar o risco de sua carteira a fim de alcançarem um retorno esperado mais alto.

Faz sentido, certo? Então a pergunta que iremos trabalhar aqui vai ser a seguinte: "Considerando um certo nível de risco, qual carteira me dará o maior retorno?".

Para isso, vamos antes entender melhor como calcular o Retorno e o Risco de um portfólio.

Retorno

Para calcularmos os retornos simples dos nossos ativos em python, podemos simplesmente utilizar a função pct_change() da biblioteca pandas. Aqui, para exemplificar o nosso portfólio, estaremos usando uma carteira composta por ações da Amazon, Google, Microsoft e Netflix:

Porém, como não estamos lidando as ações unicamente, precisamos calcular o retorno do portfólio como um todo. Para isso, vamos distribuir a porcentagem que cada ativo receberá na nossa carteira criando um vetor de pesos (w) e multiplicando-o pelos retornos simples dos ativos:

Risco

Existem várias formas diferentes para se calcular o risco de um ativo, mas no geral, essas métricas estarão relacionadas a quão volátil é uma ação. A ideia principal é que ativos muitos voláteis, ou seja, que variam muito, não são muito seguros. Sendo assim, a forma mais comum de se obter esse tipo de métrica para uma ação é através do cálculo de seu desvio padrão:

Intuitivamente, poderíamos pensar que para calcular o risco de uma carteira, bastaria multiplicar o risco de cada uma de suas ações pelo vetor de pesos de seu portfólio, mas é aí que entra a grande sacada de Markowitz.

Em um portfólio, o seu risco não será igual à média do risco de cada um de seus ativos, pois nesse caso precisamos levar em conta como que todas as ações estão se movimentando em conjunto. Para isso, precisamos antes calcular a matriz de covariância das médias dos retornos:

Tendo calculado a matriz de covariância ( C ), e com os nossos vetores de pesos (w), em seguida, vamos utilizar esta fórmula para calcular o risco do portfólio:

Fórmula para cálculo do risco do portfólio

Sua implementação em Python fica assim:

Sharpe Ratio

Todo investimento possui uma certa taxa de risco associada a ele, mas é certo que alguns investimentos são mais seguros do que outros, certo?

O Sharpe Ratio é uma métrica utilizada para nos ajudar a analisar se estamos sendo devidamente recompensados por uma taxa adicional de risco assumido. Para isso, ele compara o retorno de um investimento que possui um risco associado com um outro de "risco livre". No caso de uma carteira de ações na bolsa brasileira, ele poderia comparar o retorno dela com um o retorno de um investimento em renda fixa, por exemplo.

Para calcular o sharpe ratio subtraimos o taxa de risco livre do retorno do portfólio e dividimos esse valor pelo risco do portfólio:

Fórmula do Sharpe Ratio

Quanto maior for o valor do Sharpe Ratio, mais atraente será esse investimento dado o risco associado. Porém, um valor negativo significa que a taxa livre de risco é maior que o retorno do portfólio. De maneira geral, um sharpe ratio maior que 1 é considerado bom.

Simulando Portfólios

Agora que já entendemos como calcular o retorno e o risco de um portfólio, vamos simular várias carteiras com pesos diferentes e observar qual delas irá nos retornar o portfólio com o maior Sharpe Ratio.

Com o código acima estamos gerando várias carteiras com vetores de pesos diferentes. Nessa função, ela retorna um dicionário com todos os pesos, retornos, riscos e sharpe ratios de todos os portfólios. Para descobrirmos qual carteira obteve o melhor Sharpe Ratio, utilizamos a seguinte função:

Fazendo uma simulação com as funções que descrevemos acima, a carteira que nos retornaria o maior Sharpe Ratio seria a com a seguinte distribuição de pesos:

Lembre-se que a simulação dos pesos que estamos utilizando é aleatória! Então se você tentar reproduzir esse código, os resultados dos pesos serão diferentes!

A Fronteira Eficiente

Se pegarmos todos os portfólios que foram gerados e plotarmos em um gráfico, tendo como referência os retornos no eixo y, e os riscos no eixo x, temos um esquema que é conhecido como a "Fronteira Eficiente". Antes de entrarmos a fundo na sua interpretação, vamos implementá-lo em Python utilizando o Matplotlib:

Utilizando a função com a carteira que estamos usando de exemplo até agora, temos o seguinte gráfico:

Mas afinal, o que é a fronteira eficiente?

A fronteira eficiente nada mais é do que a linha que representa os retornos máximos que podemos obter com um portfólio dado um certo nível de risco. Portfólios ótimos sempre devem estar na linha da fronteira, pois, para qualquer portfólio abaixo da linha, há uma carteira disponível com o mesmo risco associado, porém com um retorno maior. Qualquer portfólio acima da fronteira é impossível.

Afinal, o que é um bom portfólio?

Para calcular o nosso melhor portfólio, utilizamos como métrica o maior Sharpe Ratio, porém, analisando o que acabamos de ver sobre a fronteira eficiente, você pode estar se perguntando o que constituiria um bom portfólio no final das contas, e a resposta é: depende!

Um bom portfólio vai depender do tipo de investidor e o que ele espera ganhar com os seus investimentos. Para uma pessoa que está próxima da aposentadoria, talvez seja preferível um portfólio que oferece um risco menor, já para uma pessoa mais jovem, talvez aumentar seus retornos com um portfólio um pouco mais arriscado seja uma opção mais atraente.

Independente do nível de risco que o investidor estará disponível a aceitar, o importante é estar na linha da fronteira.

Tendo isso em mente, podemos modificar o nosso código para adicionar métodos para retornar a carteira com o menor risco e o maior retorno:

À esquerda temos o gráfico gerado com o portfólio de maior retorno indicado, e à direita, o portfólio de menor risco.

Conclusões

Hoje você deu seus primeiros passos com otimização de investimentos conhecendo um pouco mais sobre a teoria de Harry Markowitz.

A Teoria Moderna do Portfólio abriu espaço depois para que outras teses de otimização de portfólios também fossem desenvolvidas. Também temos um Turing Talks que comenta uma outra estratégia para tal, chamada Paridade de Risco Hierárquica, você pode conferi-lo aqui:

Caso tenha perdido alguma parte do código, a implementação está toda disponível na biblioteca turingquant:

Por fim, não deixe de acompanhar o Grupo Turing no Facebook, Linkedin, Instagram e, claro, nossos posts do Medium!

Bons estudos e até a próxima!

--

--