Markowitz em Python

Maisa Kely de Melo
4 min readJul 18, 2021

--

Harry Markowitz, considerado pai da Moderna Teoria de Portfólios

Harry Markowitz mudou o mundo dos investimentos em 1952 quando publicou o seminal Portfolio Selection no The Journal of Finance. Markowitz trouxe uma metodologia para definir um portfólio de investimento. Ele mostrou que com base na diversificação do portfólio é possível diminuir o risco do investimento, isto é, o risco de uma carteira de investimento é menor do que o menos arriscado dos ativos que a compõe. Este trabalho inaugurou uma trilha de publicações envolvendo o risco de portfólio e o aprimoramento da relação risco x retorno.

A seguir são exibidas as fórmulas de risco e retorno definidas por Markowitz.

Retorno

O retorno esperado do portfólio é dado como a média dos retornos passados dos ativos, ponderada pela respectiva participação de cada ativo na composição do portfólio. Considerando-se um portfólio com N ativos, o retorno esperado é representado por:

Retorno Esperado do Portfólio

em que,

peso do ativo i no portfólio
média dos retornos passados do ativo i

Risco

O risco esperado do portfólio é dado pela variância que é obtida através da covariância entre os ativos no período considerado.

Risco Esperado do portfólio

Sendo,

Covariância entre os ativos i e j

Restrições

As restrições assumidas neste problema são somente o autofinanciamento (não há entrada nem retirada de dinheiro do investimento) e o limite de investimento por ativo.

Restrição de autofinanciamento
Restrição de limite de investimento por ativo

Em essência o modelo de Markowitz se resume a estas medida de retorno, medida de risco e restrições. O problema de otimização (que origina a fronteira de Pareto) pode ser definido de várias formas. Eu escolhi apresentar aqui a formulação mono-objetivo ponderada:

Problema de otimização para seleção de portfólio dado por Markowitz
Escalar que define o peso que cada função objetivo possui no problema de otimização.

Para cada valor de lambda é obtida uma única solução ótima. A imagem de cada solução ótima pelas funções objetivo gera um único ponto não dominado na fronteira de Pareto. Para construir a fronteira de Pareto é necessário resolver o problema de otimização atribuindo vários valores para lambda.

Note que se lambda = 0, o problema se resume em maximizar o retorno e se lambda = 1, o problema se resume em minimizar o risco.

Veja agora como fica a implementação deste problema em Python:

Instalação das bibliotecas que serão utilizadas
Definição dos parâmetros utilizados

Serão considerados:

  • Um universo de dez ativos.
  • Um conjunto de dados com o preço de fechamento dos 60 dias anteriores.
  • Uma fronteira com 400 pontos uniformemente distribuídos.
Obtenção dos retornos
Definição das restrições

Lembre-se que em geral, trabalha-se apenas com a restrição ≤, por isso, é necessário fazer uma “adaptação” na maneira de escrever as restrições definidas por ≥.

Solução inicial utilizada: carteira ingênua
Definição do problema de otimização

É necessário a escolha de um método para realizar a otimização. Foi escolhido o método SLSQP que utiliza programação quadrática sequencial, que está de acordo com as funções e restrições definidas para este problema.

Definição do retorno e risco
Construção da fronteira de Pareto
Comando para executar o algoritmo
Comando para plotar o gráfico da fronteira de Pareto
Fronteira de Pareto deste problema considerando dez ativos e 60 dias como base histórica.

Referência

MARKOWITZ, H. M. Portfolio Selection/Harry Markowitz. The Journal of Finance, v. 7, 1952.

O script desse código em .ipynb (Python) e a base de dados utilizada neste exemplo estão disponibilizados neste link

Espero que este material tenha ajudado de alguma maneira.

Vamos nos conectar também pelo Instagram @maisakmelo.

--

--

Maisa Kely de Melo
Maisa Kely de Melo

Written by Maisa Kely de Melo

I am a Mathematics teacher, I study mathematical models applied in finance, I believe in Education to change the world.

No responses yet