Inicio Trading Sistemático Publicación

Genera Señales de Trading con el Indicador Alligator en MetaTrader 5

Archivos adjuntos
267.zip (3.41 KB, Descargar 0 veces)

MQL5 Wizard permite crear de forma automática Asesores Expertos (EA) sin necesidad de programar (ver MQL5 Wizard: Creando Asesores Expertos sin Programación).

Hoy vamos a hablar sobre las señales de trading basadas en el indicador técnico Alligator, presentado por B. Williams en su libro "Trading Chaos". La estrategia que utilizamos se llama "Señales basadas en el Alligator" y se puede crear de manera automática en MQL5 Wizard.

Este sistema se basa en tres medias móviles (las líneas de Labios, Dientes y Mandíbula), y utiliza osciladores calculados a partir de la diferencia entre estas. Las señales de trading se generan cuando hay un cruce de las líneas del Alligator, dependiendo de la tendencia que se determina por el orden de dichas líneas. En una tendencia alcista, la línea de Labios (con el periodo más corto) es la más alta, seguida por la línea de Dientes, y por último la línea de Mandíbula. En una tendencia bajista, el orden es el inverso.

Las señales de trading son:

  • Abrir posición larga: cruce de las líneas del Alligator y aumento de la distancia entre ellas en caso de tendencia alcista;
  • Cerrar posición larga: cruce ascendente de la línea de Labios con la línea de Mandíbula;
  • Abrir posición corta: cruce de las líneas del Alligator y aumento de la distancia entre ellas en caso de tendencia bajista;
  • Cerrar posición corta: cruce descendente de la línea de Labios con la línea de Mandíbula;

Esta estrategia está implementada en la clase CSignalAlligator.

Figura 1. Señales de trading basadas en el indicador técnico Alligator

Figura 1. Señales de trading basadas en el indicador técnico Alligator


Señales de Trading

La estrategia de trading está implementada en CSignalAlligator y cuenta con métodos protegidos que facilitan el acceso a los valores de los indicadores:

double   Mandíbula(int ind)              // devuelve el valor de la línea de Mandíbula de la barra 
double  Dientes(int ind)           // devuelve el valor de la línea de Dientes de la barra
double  Labios(int ind)            // devuelve el valor de la línea de Labios de la barra
double  DiffLabiosDientes(int ind)   // devuelve la diferencia entre las líneas de Labios y Dientes
double  DiffDientesMandíbula(int ind)    // devuelve la diferencia entre las líneas de Dientes y Mandíbula
double  DiffLabiosMandíbula(int ind)     // devuelve la diferencia entre las líneas de Labios y Mandíbula
bool     CheckCross();             // usado para verificar el cruce de las líneas del Alligator


1. Abrir posición larga

La verificación de las condiciones de trading tiene algunas características, ocasionadas por el desplazamiento de las líneas de Labios, Dientes y Mandíbula.

Condiciones para abrir una posición larga:

  • Se utiliza CheckCross para determinar el cruce y el posterior aumento de la diferencia entre las líneas;
  • DiffLabiosDientes(-2)>=DiffLabiosDientes(-1) y DiffLabiosDientes(-1)>=DiffLabiosDientes(0); verificar el aumento de la diferencia entre las líneas de Labios y Dientes;
  • DiffLabiosDientes(0)>=0.0;  la línea de Labios está por encima de la línea de Dientes;
  • DiffDientesMandíbula(-2) >=DiffDientesMandíbula(-1)  y DiffDientesMandíbula(-1) >=DiffDientesMandíbula(0); verificar el aumento de la diferencia entre las líneas de Dientes y Mandíbula;
  • DiffDientesMandíbula(0) >=0.0; la línea de Dientes está por encima de la línea de Mandíbula.
//+------------------------------------------------------------------+ 
//| Verifica condiciones para abrir posición larga (comprar) |

//+------------------------------------------------------------------+
bool CSignalAlligator::CheckOpenLong(double& precio,double& sl,double& tp,datetime& expiracion)
  {
   if(CheckCross()) return(false);
//---
   precio=0.0;
   sl   =0.0;
   tp   =0.0;
//---
   if(DiffLabiosDientes(-2)>=DiffLabiosDientes(-1) && DiffLabiosDientes(-1)>=DiffLabiosDientes(0) && DiffLabiosDientes(0)>=0.0 &&
      DiffDientesMandíbula(-2) >=DiffDientesMandíbula(-1)  && DiffDientesMandíbula(-1) >=DiffDientesMandíbula(0)  && DiffDientesMandíbula(0) >=0.0)
      m_crossed=true;
//---
   return(m_crossed);
  }


2. Cerrar posición larga

Condiciones para cerrar la posición larga (ten en cuenta el desplazamiento de las líneas):

  • DiffLabiosDientes(-1)<0; la línea de Labios de la siguiente barra (debido al desplazamiento) está por debajo de la línea de Dientes;
  • DiffLabiosDientes(0)>=0; la línea de Labios de la barra actual está por encima/igual a la línea de Dientes;
  • DiffLabiosDientes(1)>0; la línea de Labios de la barra anterior (completada) está por encima de la línea de Dientes.
//+------------------------------------------------------------------+ 
//| Verifica condiciones para cerrar posición larga |
//+------------------------------------------------------------------+
bool CSignalAlligator::CheckCloseLong(double& precio)
  {
   precio=0.0;
//---
   return(DiffLabiosDientes(-1)<0 && DiffLabiosDientes(0)>=0 && DiffLabiosDientes(1)>0);
  }


3. Abrir posición corta

Condiciones para abrir una posición corta:

  • Se utiliza CheckCross para determinar el cruce y el posterior aumento de la diferencia entre las líneas;
  • DiffLabiosDientes(-2)<=DiffLabiosDientes(-1) y DiffLabiosDientes(-1)<=DiffLabiosDientes(0); verificar el aumento de la diferencia entre las líneas de Labios y Dientes;
  • DiffLabiosDientes(0)<=0.0; la línea de Labios de la barra actual está por debajo de la línea de Dientes;
  • DiffDientesMandíbula(-2)<=DiffDientesMandíbula(-1) y DiffDientesMandíbula(-1)<=DiffDientesMandíbula(0); verificar el aumento de la diferencia entre las líneas de Dientes y Mandíbula;
  • DiffDientesMandíbula(0) <=0.0; la línea de Dientes de la barra actual está por debajo de la línea de Mandíbula;
//+------------------------------------------------------------------+ 
//| Verifica condiciones para abrir posición corta (vender) |

//+------------------------------------------------------------------+
bool CSignalAlligator::CheckOpenShort(double& precio,double& sl,double& tp,datetime& expiracion)
  {
   if(CheckCross()) return(false);
//---
   precio=0.0;
   sl   =0.0;
   tp   =0.0;
//---
   if(DiffLabiosDientes(-2)<=DiffLabiosDientes(-1) && DiffLabiosDientes(-1)<=DiffLabiosDientes(0) && DiffLabiosDientes(0)<=0.0 &&
      DiffDientesMandíbula(-2) <=DiffDientesMandíbula(-1)  && DiffDientesMandíbula(-1) <=DiffDientesMandíbula(0)  && DiffDientesMandíbula(0) <=0.0)
      m_crossed=true;
//---
   return(m_crossed);
  }


4. Cerrar posición corta

Condiciones para cerrar una posición corta:

  • DiffLabiosDientes(-1)>0; la línea de Labios de la siguiente barra (debido al desplazamiento) está por encima de la línea de Dientes;
  • DiffLabiosDientes(0)<=0; la línea de Labios de la barra actual está por debajo/igual a la línea de Dientes;
  • DiffLabiosDientes(1)<0; la línea de Labios de la barra anterior (completada) está por debajo de la línea de Dientes.
//+------------------------------------------------------------------+ 
//| Verifica condiciones para cerrar posición corta |
//+------------------------------------------------------------------+
bool CSignalAlligator::CheckCloseShort(double& precio)
  {
   precio=0.0;
//---
   return(DiffLabiosDientes(-1)>0 && DiffLabiosDientes(0)<=0 && DiffLabiosDientes(1)<0);
  }

Creando un Asesor Experto usando MQL5 Wizard

Para crear un robot de trading basado en esta estrategia, necesitas seleccionar las propiedades de señal como "Señales basadas en el Alligator" en la opción "Creación de Asesores Expertos Listos" de MQL5 Wizard:

Figura 2. Selecciona

Figura 2. Selecciona "Señales basadas en el Alligator" en MQL5 Wizard

Después, deberás especificar el algoritmo de trailing stop necesario y el sistema de gestión de dinero y riesgo. El código del Asesor Experto se generará automáticamente, podrás compilarlo y probarlo en el Tester de Estrategias del terminal MetaTrader 5.


Resultados de Pruebas

Veamos el backtesting del Asesor Experto en datos históricos (EURUSD H1, periodo de prueba: 1.1.2010-05.01.2011, JawPeriod=13, JawShift=8, TeethPeriod=8, TeethShift=5, LipsPeriod=5, LipsShift=3, MaMethod=2, Applied=5, CrossMeasure=5).

En la creación del Asesor Experto utilizamos un volumen fijo (Trading Fixed Lot, 0.1), y no se utilizó algoritmo de Trailing Stop (Trailing no usado).

Figura 3. Resultados de la prueba del Asesor Experto con señales de trading basadas en el indicador Alligator

Figura 3. Resultados de la prueba del Asesor Experto con señales de trading basadas en el indicador Alligator


El beneficio puede incrementarse si usas la filtración de operaciones y tomas en cuenta las características del mercado según el tiempo. La clase CSignalITF te permitirá agregar un filtro de tiempo intradía. Los mejores momentos se pueden encontrar utilizando el Tester de Estrategias del terminal MetaTrader 5. Puedes ver un ejemplo en MQL5 Wizard - Señales de Trading Basadas en el Cruce de Dos EMA con filtro de tiempo intradía.


Adjuntos: El archivo SignalAlligator.mqh con la clase CSignalAlligator debe ser colocado en terminal_data_folder\MQL5\Include\Expert\Signal.

El archivo expert_alligator.mq5 contiene el código del Asesor Experto, creado usando MQL5 Wizard.


Publicaciones relacionadas

Comentarios (0)