Médias Móveis Simples para Trading com o Python

A estratégia de trading por Médias Móveis Simples é um método bem conhecido, isto por conta da sua facilidade de construção. No post de hoje abordaremos a estratégia, realizando a sua construção no Python.

O que é Média Móvel?

Média Móvel é um cálculo estatístico que permite obter a média de uma amostra a medida que "novos" dados são inseridos, substituindo os dados mais "antigos". É comum a sua utilização em séries temporais com o objetivo de deixar a série mais "suavizada", permitindo estabelecer pontos de tendência.

Em séries temporais financeiras, principalmente de preços de ações, é notável entender que a MM de períodos curtos (curto prazo) são mais voláteis daquelas comparadas a períodos longos (longo prazo). E o interessante é que elas estabelecem uma relação entre si.

Uma média móvel crescente indica que a ação está em tendência de alta, enquanto uma média móvel decrescente indica que está em tendência de baixa. Da mesma forma, um impulso ascendente é confirmado com um cruzamento de alta, que ocorre quando uma média móvel de curto prazo cruza acima de uma média móvel de longo prazo. Por outro lado, o momento descendente é confirmado com um cruzamento de baixa, que ocorre quando uma média móvel de curto prazo cruza abaixo de uma média móvel de longo prazo.

Estratégia

Através das regras citadas, podemos construir um código em Python realizando a estratégia para a compra e venda de ações. Aqui, utilizaremos os dados do preço de fechamento da ITUB4 no período de 2019-01-01 até 2022-07-11.

Após importar a série com a biblioteca pandas_datareader, utilizando a função get_data_yahoo, selecionamos apenas a coluna Close. Em seguida, definimos as janelas das MMs - para a de curto prazo, escolhemos 42 dias, e para a de longo prazo, 252 dias.

Para criar as média móveis, selecionamos os dados do preço de fechamento, aplicamos o método rolling (que permite criar uma janela móvel) com o número de dias como argumento e em seguida, utilizamos mean() para criar a média móvel.

Com as MMs criadas, devemos criar as posições de compra e venda com base em uma condição estabelecida. Veja que podemos realizar o procedimento aplicando np.where com a condição:

  • Comprado (=+1)  se MM de curto prazo estiver acima da MM de longo prazo
  • Vendido (=-1) se MM de curto prazo estiver abaixo da MM de longo prazo

Com a estratégia criada, podemos enfim calcular o retorno do método a partir das posições. Primeiro calculamos o retorno logaritmo. Em seguida, multiplicamos o retorno pela posição (para saber quando estamos comprados e vendidos a partir do sinal da posição)

Por fim, calculamos o retorno acumulado.

Estratégia com vectorbt

Outra forma interessante de construir a estratégia é a partir da biblioteca vectorbt.

Pegamos os dados de fechamento novamente, entretanto, em formato de series. Para criar as médias móveis, utilizamos os métodos MA.run() com a série de preço e os dias da MM.

Para aplicar as regras, utilizamos ma_above, para avisar que quando fast_ma estiver acima de slow_ma é um call de entrada, e ma_below para o contrário.

Para aplicar os sinais na série de preços, utilizamos o método Portfolio.from_signals() colocando dentro a série de preço, a entrada e a saída.

Por fim, visualizamos graficamente a estratégia. O interessante é que ao invés de se manter posicionado em venda quando a linha de curto prazo está abaixo da de longo, o algoritmo realiza o lucro/prejuízo, mantendo o valor do retorno constate no período, ao invés de se manter vendido no ativo. Só há movimentação no retorno quando ocorre novamente a compra.

Abaixo, temos três gráficos construídos por padrão com o método plot().show(). O primeiro indica os momentos de compra e venda com base na série do preço da ação. O segundo indica os pontos de mudança do Profit and Loss. O terceiro indica o retorno acumulado da estratégia comparado com o retorno acumulado do ativo sem estratégia (se tivesse mantido comprado desde o começo).

_____________________________________

Quer saber mais?

Veja nosso curso de Python para Investimentos.

 

Compartilhe esse artigo

Facebook
Twitter
LinkedIn
WhatsApp
Telegram
Email
Print

Comente o que achou desse artigo

Outros artigos relacionados

Como Construir um Monitor de Política Monetária Automatizado com Python?

Descubra como transformar dados do Banco Central em inteligência de mercado com um Monitor de Política Monetária Automatizado. Neste artigo, exploramos o desenvolvimento de uma solução híbrida (Python + R) que integra análise de sentimento das atas do COPOM, cálculo da Regra de Taylor e monitoramento da taxa Selic. Aprenda a estruturar pipelines ETL eficientes e a visualizar insights econômicos em tempo real através de um dashboard interativo criado com Shiny, elevando o nível das suas decisões de investimento.

Qual o efeito de um choque de juros sobre a inadimplência?

Neste exercício, exploramos a relação dinâmica entre o custo do crédito (juros na ponta) e o risco realizado (taxa de inadimplência) através de uma análise exploratória de dados e modelagem econométrica utilizando a linguagem de programação R.

Qual a relação entre benefícios sociais e a taxa de participação do mercado de trabalho?

Este exercício apresenta uma investigação econométrica sobre a persistente estagnação da taxa de participação no mercado de trabalho brasileiro no período pós-pandemia. Utilizando a linguagem R e dados públicos do IBGE e Banco Central, construímos um modelo de regressão linear múltipla com correção de erros robustos (Newey-West). A análise testa a hipótese de que o aumento real das transferências de renda (Bolsa Família/Auxílio Brasil) elevou o salário de reserva, desincentivando o retorno à força de trabalho.

Boletim AM

Receba diretamente em seu e-mail gratuitamente nossas promoções especiais e conteúdos exclusivos sobre Análise de Dados!

Boletim AM

Receba diretamente em seu e-mail gratuitamente nossas promoções especiais e conteúdos exclusivos sobre Análise de Dados!

como podemos ajudar?

Preencha os seus dados abaixo e fale conosco no WhatsApp

Boletim AM

Preencha o formulário abaixo para receber nossos boletins semanais diretamente em seu e-mail.