Início Negociação Sistemática Postagem

Sinais de Negócios com o Indicador Alligator no MetaTrader 5

Anexo
267.zip (3.41 KB, Baixar 0 vezes)

O MQL5 Wizard facilita a criação automática de Sistemas de Trading, permitindo que até quem não sabe programar possa criar seus próprios robôs de negociação.

Neste post, vamos explorar como os sinais de trading, baseados no indicador técnico Alligator, desenvolvido por B. Williams em "Trading Chaos", podem ser utilizados. A estratégia, chamada "Sinais baseados no Alligator", pode ser facilmente configurada no MQL5 Wizard.

Este sistema utiliza três médias móveis (as linhas de Lábios, Dentes e Maxilar), além de osciladores que calculam a diferença entre elas. Os sinais de trading são gerados quando ocorre o cruzamento das linhas do Alligator, que determina a tendência, baseada na ordem dessas linhas. Durante uma tendência de alta, a linha de Lábios (com o período mais curto) é a mais alta, seguida pela linha de Dentes e, por último, a linha de Maxilar. O contrário acontece durante uma tendência de baixa.

Sinais de trading:

  • Abrir posição longa: cruzamento das linhas do Alligator e aumento da distância entre elas em uma tendência de alta;
  • Fechar posição longa: cruzamento ascendente da linha de Lábios com a linha de Maxilar;
  • Abrir posição curta: cruzamento das linhas do Alligator e aumento da distância entre elas em uma tendência de baixa;
  • Fechar posição curta: cruzamento descendente da linha de Lábios com a linha de Maxilar.

Essa estratégia é implementada na classe CSignalAlligator.

Sinais de Trading com o Indicador Alligator

Figura 1. Sinais de Trading com o Indicador Alligator


Sinais de Trading

A estratégia de trading é implementada em CSignalAlligator, que possui métodos protegidos para facilitar o acesso aos valores do indicador:

double  Jaw(int ind)              // retorna o valor da linha de Maxilar da barra
double  Teeth(int ind)           // retorna o valor da linha de Dentes da barra
double  Lips(int ind)            // retorna o valor da linha de Lábios da barra
double  LipsTeethDiff(int ind)   // retorna a diferença entre as linhas de Lábios e Dentes
double  TeethJawDiff(int ind)    // retorna a diferença entre as linhas de Dentes e Maxilar
double  LipsJawDiff(int ind)     // retorna a diferença entre as linhas de Lábios e Maxilar
bool     CheckCross();             // utilizado para verificar o cruzamento das linhas do Alligator


1. Abrir posição longa

As condições para abertura de posição longa têm algumas particularidades, devido ao deslocamento das linhas de Lábios, Dentes e Maxilar.

Condições para abrir posição longa:

  • O CheckCross é usado para determinar o cruzamento e o aumento da diferença entre as linhas;
  • LipsTeethDiff(-2)>=LipsTeethDiff(-1) e LipsTeethDiff(-1)>=LipsTeethDiff(0); verificar se há aumento da diferença entre as linhas de Lábios e Dentes;
  • LipsTeethDiff(0)>=0.0; a linha de Lábios está acima da linha de Dentes;
  • TeethJawDiff(-2) >=TeethJawDiff(-1) e TeethJawDiff(-1) >=TeethJawDiff(0); verificar se há aumento da diferença entre as linhas de Dentes e Maxilar;
  • TeethJawDiff(0) >=0.0; a linha de Dentes está acima da linha de Maxilar.
//+------------------------------------------------------------------+
//| Verifica condições para abrir posição longa (compra)              |
//+------------------------------------------------------------------+
bool CSignalAlligator::CheckOpenLong(double& price,double& sl,double& tp,datetime& expiration)
  {
   if(CheckCross()) return(false);
//---
   price=0.0;
   sl   =0.0;
   tp   =0.0;
//---
   if(LipsTeethDiff(-2)>=LipsTeethDiff(-1) && LipsTeethDiff(-1)>=LipsTeethDiff(0) && LipsTeethDiff(0)>=0.0 &&
      TeethJawDiff(-2) >=TeethJawDiff(-1)  && TeethJawDiff(-1) >=TeethJawDiff(0)  && TeethJawDiff(0) >=0.0)
      m_crossed=true;
//---
   return(m_crossed);
  }


2. Fechar posição longa

Condições para fechar posição longa (note o deslocamento das linhas):

  • LipsTeethDiff(-1)<0; a linha de Lábios da próxima barra (devido ao deslocamento) está abaixo da linha de Dentes;
  • LipsTeethDiff(0)>=0; a linha de Lábios da barra atual está acima ou igual à linha de Dentes;
  • LipsTeethDiff(1)>0; a linha de Lábios da barra anterior (completada) está acima da linha de Dentes.
//+------------------------------------------------------------------+

//| Verifica condições para fechar posição longa                     |
//+------------------------------------------------------------------+
bool CSignalAlligator::CheckCloseLong(double& price)
  {
   price=0.0;
//---
   return(LipsTeethDiff(-1)<0 && LipsTeethDiff(0)>=0 && LipsTeethDiff(1)>0);
  }


3. Abrir posição curta

Condições para abrir posição curta:

  • O CheckCross é usado para determinar o cruzamento e o aumento da diferença entre as linhas;
  • LipsTeethDiff(-2)<=LipsTeethDiff(-1) e LipsTeethDiff(-1)<=LipsTeethDiff(0); verificar se há aumento da diferença entre as linhas de Lábios e Dentes;
  • LipsTeethDiff(0)<=0.0; a linha de Lábios da barra atual está abaixo da linha de Dentes;
  • TeethJawDiff(-2)<=TeethJawDiff(-1) e TeethJawDiff(-1)<=TeethJawDiff(0); verificar se há aumento da diferença entre as linhas de Dentes e Maxilar;
  • TeethJawDiff(0) <=0.0; a linha de Dentes da barra atual está abaixo da linha de Maxilar;
//+------------------------------------------------------------------+
//| Verifica condições para abrir posição curta (venda)             |
//+------------------------------------------------------------------+
bool CSignalAlligator::CheckOpenShort(double& price,double& sl,double& tp,datetime& expiration)
  {
   if(CheckCross()) return(false);
//---
   price=0.0;
   sl   =0.0;
   tp   =0.0;
//---
   if(LipsTeethDiff(-2)<=LipsTeethDiff(-1) && LipsTeethDiff(-1)<=LipsTeethDiff(0) && LipsTeethDiff(0)<=0.0 &&
      TeethJawDiff(-2) <=TeethJawDiff(-1)  && TeethJawDiff(-1) <=TeethJawDiff(0)  && TeethJawDiff(0) <=0.0)
      m_crossed=true;
//---
   return(m_crossed);
  }


4. Fechar posição curta

Condições para fechar posição curta:

  • LipsTeethDiff(-1)>0; a linha de Lábios da próxima barra (devido ao deslocamento) está acima da linha de Dentes;
  • LipsTeethDiff(0)<=0; a linha de Lábios da barra atual está abaixo ou igual à linha de Dentes;
  • LipsTeethDiff(1)<0; a linha de Lábios da barra anterior (completada) está abaixo da linha de Dentes.
//+------------------------------------------------------------------+

//| Verifica condições para fechar posição curta                      |
//+------------------------------------------------------------------+
bool CSignalAlligator::CheckCloseShort(double& price)
  {
   price=0.0;
//---
   return(LipsTeethDiff(-1)>0 && LipsTeethDiff(0)<=0 && LipsTeethDiff(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 Alligator" na opção de "Criar Experts Prontos" no MQL5 Wizard:

Selecione 'Sinais baseados no Alligator' no MQL5 Wizard

Figura 2. Selecione 'Sinais baseados no Alligator' no MQL5 Wizard

Em seguida, você deve especificar o algoritmo de trailing stop desejado e o sistema de gestão de risco e capital. O código do Expert Advisor será gerado automaticamente, e você poderá compilá-lo e testá-lo no Strategy Tester do terminal MetaTrader 5.


Resultados dos Testes

Vamos considerar o backtest do Expert Advisor em dados históricos (EURUSD H1, período de teste: 1.1.2010-05.01.2011, JawPeriod=13, JawShift=8, TeethPeriod=8, TeethShift=5, LipsPeriod=5, LipsShift=3, MaMethod=2, Applied=5, CrossMeasure=5).

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

Resultados dos Testes do Expert Advisor

Figura 3. Resultados dos Testes do Expert Advisor com sinais de trading baseados no indicador Alligator


O lucro pode ser aumentado se você utilizar a filtragem de negócios e levar em consideração as particularidades do mercado, dependendo do horário. A classe CSignalITF permitirá que você adicione o filtro de tempo intradia. Os melhores horários podem ser encontrados usando o Strategy Tester do terminal MetaTrader 5. Veja um exemplo em MQL5 Wizard - Sinais de Trading Baseados no Cruzamento de Duas EMA com filtro de tempo intradia.


Anexos: O arquivo SignalAlligator.mqh com a classe CSignalAlligator deve ser colocado na pasta terminal_data_folder\MQL5\Include\Expert\Signal.

O arquivo expert_alligator.mq5 contém o código do Expert Advisor, criado usando o MQL5 Wizard.

Publicações relacionadas

Comentário (0)