Markowitz com rebalanceamento diário em Python

Maisa Kely de Melo
3 min readOct 20, 2021

--

O problema de seleção de portfólio dado por Markowitz é um método clássico de investimento. Os princípios envolvidos podem ser vistos neste outro post.

Em geral, o método de Markowitz utiliza a estratégia Buy and Hold. Neste post, eu disponibilizo um código em Python do método de Markowitz com a estratégia de rebalanceamento diário.

Basicamente são utilizados os mesmos princípios do método de Markowitz clássico, com a diferença de que o método é repetido diariamente.

Em cada dia é gerada uma fronteira de Pareto com o trade-off retorno versus risco do portfólio previsto para o dia seguinte. Cada ponto da fronteira representa a composição de uma carteira com base nos ativos utilizados.

É necessário escolher um ponto da fronteira de Pareto com a composição da carteira que será investida no dia em questão. No dia seguinte, o rendimento da carteira investida no dia anterior é contabilizado. A informação preço de fechamento dos ativos do dia anterior é incluída na base de dados para fazer a previsão dos retornos e construção de uma nova fronteira de Pareto. De onde é escolhido um novo ponto (carteira). O processo se repete continuamente.

Fronteira de Pareto cujos pontos representam carteiras de investimentos. Cada ponto (carteira) está associado com uma previsão de risco e retorno. O ponto escolhido é a carteira efetivamente aplicada no investimento.

Neste caso o ponto escolhido para definir a carteira aplicada diariamente é o ponto médio da fronteira de Pareto. Este ponto foi escolhido porque ele representa um valor intermediário entre risco e retorno, que tende a representar um investidor com perfil moderado.

Outros critérios de escolha podem ser utilizados, como o ponto inferior da fronteira (perfil conservador), o ponto superior (perfil agressivo) ou algum critério mais elaborado, que leve em consideração mais informações do investidor, como por exemplo, uma meta do investimento.

Para verificar como o método funciona na prática foi realizado um backtesting com as ações VALE3, ITUB4, PETR4, BBDC4, B3SA3, PETR3, MGLU3, ABEV3, WEGE3, ITSA4, BBAS3 e PCAR3 negociadas no mercado fracionário no ano 2020 tendo um capital inicial de R$100.000,00.

Foi considerada a restrição de auto-financiamento, que significa que após o instante inicial nenhum dinheiro é aportado ou retirado do investimento e os rendimentos são reinvestidos.

Comparação da riqueza acumulada utilizando a estratégia do Markowitz dinâmico e do Ibovespa no ano 2020.

Como pode ser observado, o desempenho do Markowitz dinâmico é superior ao desempenho ao principal benchmark do mercado financeiro brasileiro, o que indica que a estratégia de Markowitz tem potencial tanto na sua versão tradicional (Buy and Hold) quanto com rebalanceamento diário.

Você pode fazer simulações considerando outros ativos. O código está definido para fazer a busca automatizada em tempo real dos ativos. Para isto basta atualizar a variável ASSETS com os nomes dos tickers do seu interesse. Você também pode alterar o período de deste, informando as datas inicial e final do seu período de interesse.

Faça download do código pelo link abaixo:

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.

Responses (1)