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 selecionar variáveis para modelos de previsão no Python?

Em oposição à crença popular, grande parte dos modelos de machine learning não produzem previsões magicamente. É papel do cientista de dados executar uma boa engenharia de variáveis para não cair no clássico problema de “garbage in, garbage out” (GIGO) em aprendizado de máquina. Neste sentido, aprender a fazer uma boa seleção de variáveis é fundamental e neste artigo exploramos algumas possibilidades práticas usando o Python.

Resultado IPCA-15 - Novembro/2024

A Análise Macro apresenta os resultados do IPCA-15 de Novembro de 2024, com gráficos elaborados em Python para coleta, tratamento e visualização de dados. Todo o conteúdo, disponível exclusivamente no Clube AM, foi desenvolvido com base nos métodos ensinados nos cursos da Análise Macro, permitindo aos assinantes acesso aos códigos e replicação das análises.

Resultado PNADc Trimestral - 3° Trimestre/2024

A Análise Macro apresenta os resultados da PNADc Trimestral do 3º trimestre de 2024, com gráficos elaborados em Python para coleta, tratamento e visualização de dados. Todo o conteúdo, disponível exclusivamente no Clube AM, foi desenvolvido com base nos métodos ensinados nos cursos da Análise Macro, permitindo aos assinantes acesso aos códigos e replicação das análises.

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.