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

Criando Tabelas com o Python: mostrando o poder da linguagem sobre o Excel

Nos dias atuais, pessoas que trabalham com dados estão constantemente confrontados com um dilema: criar uma tabela não tão genial no Excel ou manter em um formato ainda pior, como um dataframe, mas mantendo a flexibilidade de obtenção dos dados. Podemos resolver esse grande problema, unindo a flexibilidade e beleza ao usar a biblioteca great_tables do Python.

Análise do Censo Demográfico com o R

Como podemos analisar dados do Censo Demográfico para produzir pesquisas e implementar políticas públicas? Mostramos nesta postagem o resultado de uma breve análise dos dados preliminares do Censo Demográfico de 2022 usando o R.

Deploy de modelos com Python + Shinylive + GitHub gastando ZERO reais

Colocar modelos em produção pode ser um grande desafio. Lidar com custos monetários, infraestrutura operacional e complexidades de códigos e ferramentas pode acabar matando potenciais projetos. Uma solução que elimina todos estes obstáculos é a recém lançada Shinylive. Neste artigo mostramos um exemplo com um modelo de previsão para o preço do petróleo Brent.

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.