Início Negociação Sistemática Postagem

Sinais de Trading: Crossover de Preços com Média Móvel no MQL5

Anexo
248.zip (3.15 KB, Baixar 0 vezes)

O MQL5 Wizard permite criar o código de Sistemas de Trading automaticamente. Confira Criando Sistemas de Trading Prontos no MQL5 Wizard para mais detalhes.

Neste artigo, vamos explorar uma estratégia baseada no crossover de preços com o indicador de Média Móvel. Essa estratégia é chamada de "Sinais baseados no crossover de preços com MA" quando criamos um EA automaticamente no MQL5 Wizard.

Sinais de Trading:

  • Compra: crossover ascendente do preço com a Média Móvel.
  • Venda: crossover descendente do preço com a Média Móvel.
  • A verificação do aumento/diminuição da MA é utilizada para filtrar sinais falsos.

Essa estratégia é implementada na classe CSignalMA da biblioteca padrão MQL5 (localizada em MQL5\Include\Expert\Signal\SignalMA.mqh).

Figura 1. Sinais de Trading baseados no crossover de preços com Média Móvel

Figura 1. Sinais de Trading baseados no crossover de preços com Média Móvel

Sinais de Trading

A estratégia de trading é implementada na classe CSignalMA, que possui alguns métodos protegidos para simplificar o acesso a indicadores e valores de preço:

double  MA(int ind)          // retorna o valor da média móvel da barra
double  Open(int ind)        // retorna o preço de abertura da barra
double  Close(int ind)       // retorna o preço de fechamento da barra
double  StateMA(int ind)     // retorna valor positivo se a média aumenta e negativo se diminui
double  StateOpen(int ind)   // retorna a diferença entre o preço de abertura e a média móvel 
double  StateClose(int ind)   // retorna a diferença entre o preço de fechamento e a média móvel
Os valores de preço e indicador da barra 0 (não completada) podem mudar, portanto é necessário realizar a verificação das condições de trading utilizando os dados das barras completadas (formadas).

1. Abrir posição longa

Condições para abrir uma posição longa (crossover de preço com MA e verificação do aumento da MA):

  • Open(1)<MA(1): preço de abertura é menor que a média móvel;
  • Close(1)>MA(1): preço de fechamento é maior que a média móvel;
  • MA(1)>MA(2): verificar aumento da média móvel (para filtrar sinais falsos).
//+------------------------------------------------------------------+
//| Verifica as condições para abrir posição longa (compra)                    |
//+------------------------------------------------------------------+
bool CSignalMA::CheckOpenLong(double& price,double& sl,double& tp,datetime& expiration)
  {
   price=0.0;
   sl   =0.0;
   tp   =0.0;
//--- o preço cruzou a MA para cima e a MA aumenta
   return(StateOpen(1)<0 && StateClose(1)>0 && StateMA(1)>0);
  }

2. Fechar posição longa

Condições para fechar posição longa (crossover de preço com MA e verificação da diminuição da MA):

  • Open(1)>MA(1): preço de abertura é maior que a média móvel;
  • Close(1)<MA(1): preço de fechamento é menor que a média móvel;
  • MA(1)<MA(2): verificar diminuição da média móvel (para filtrar sinais falsos).
//+------------------------------------------------------------------+
//| Verifica as condições para fechar posição longa                         |
//+------------------------------------------------------------------+
bool CSignalMA::CheckCloseLong(double& price)
  {
   price=0.0;
//--- o preço cruzou a média móvel para baixo e a média móvel diminui
  return(StateOpen(1)>0 && StateClose(1)<0 && StateMA(1)<0);
  }


3. Abrir posição curta

As condições para abrir uma posição curta são as mesmas das condições de fechamento da posição longa.

//+------------------------------------------------------------------+
//| Verifica as condições para abrir posição curta (venda)                  |
//+------------------------------------------------------------------+
bool CSignalMA::CheckOpenShort(double& price,double& sl,double& tp,datetime& expiration)
  {
   price=0.0;
   sl   =0.0;
   tp   =0.0;
//--- o preço cruzou a média móvel para cima e a média móvel diminui 
   return(StateOpen(1)>0 && StateClose(1)<0 && StateMA(1)<0);
  }


4. Fechar posição curta

As condições para fechar uma posição curta são as mesmas das condições de abertura da posição longa.

//+------------------------------------------------------------------+
//| Verifica as condições para fechar posição curta                        |
//+------------------------------------------------------------------+
bool CSignalMA::CheckCloseShort(double& price)
  {
   price=0.0;
//--- o preço cruzou a média móvel para cima e a média móvel aumenta
   return(StateOpen(1)<0 && StateClose(1)>0 && StateMA(1)>0);
  }
//+------------------------------------------------------------------+

Criando um Expert Advisor com o MQL5 Wizard

Para criar um robô de trading baseado na estratégia, você precisa escolher as propriedades do sinal como "Sinais baseados no crossover de preços com MA" na opção "Criando Sistemas de Trading Prontos" do MQL5 Wizard:

Figura 2. Escolha os sinais baseados no crossover de preços com MA no MQL5 Wizard

Figura 2. Escolha "Sinais baseados no crossover de preços com MA" no MQL5 Wizard

Em seguida, você deve especificar o algoritmo de trailing stop necessário e o sistema de gestão de dinheiro e risco. O código do Expert Advisor será criado automaticamente, e você pode compilá-lo e testá-lo no Testador de Estratégia do terminal MetaTrader 5.


Resultados dos Testes

Vamos considerar o backtest do Expert Advisor em dados históricos (EURUSD H1, período personalizado: 01.01.2010-05.01.2011, MA_period=12, MA_Shift=0).

Na criação do Expert Advisor, utilizamos um volume fixo (Trading Fixed Lot, 0.1), e o algoritmo de Trailing Stop não foi utilizado (Trailing não utilizado).

Crossover com Média Móvel

Figura 3. Resultados de backtesting históricos do Expert Advisor, baseado no crossover de preços com MA

Anexos: O SignalMA.mqh com a classe CSignalMA (incluída na biblioteca padrão MQL5) está localizado na pasta MQL5\Include\Expert\Signal. O arquivo crossoverma.mq5 contém o código do Expert Advisor, criado usando o MQL5 Wizard.

Publicações relacionadas

Comentário (0)