Inicio Trading Sistemático Publicación

Crea tu Asesor Experto en MQL5: Señales de Trading con Bullish y Bearish Engulfing + CCI

Archivos adjuntos
306.zip (6.48 KB, Descargar 0 veces)

El MQL5 Wizard es una herramienta increíble que te permite crear Asesores Expertos listos para usar, basados en las clases de la biblioteca estándar que vienen con el terminal del cliente (puedes ver más detalles en Crear Asesores Expertos en MQL5 Wizard). Esta herramienta te permite validar tus ideas de trading rápidamente, solo necesitas crear tu propia clase de señales de trading. La estructura de esta clase y un ejemplo se pueden encontrar en el artículo MQL5 Wizard: Cómo Crear un Módulo de Señales de Trading.

La idea básica es la siguiente: la clase de señales de trading se deriva de CExpertSignal. Luego, es necesario sobrescribir los métodos virtuales LongCondition() y ShortCondition() con tus propios métodos.

Hay un libro titulado "Estrategias de los mejores traders" (en ruso) que considera muchas estrategias de trading. En este artículo nos enfocaremos en los patrones de velas de reversión, confirmados por los osciladores como el Estocástico, CCI, MFI y RSI.

La mejor forma es crear una clase separada, derivada de CExpertSignal, para verificar la formación de patrones de velas. Para confirmar las señales de trading generadas por estos patrones de velas, es suficiente con escribir la clase derivada de CCandlePattern y añadir las características necesarias (por ejemplo, confirmación por osciladores).

En este artículo, consideraremos las señales basadas en el patrón de reversión de "Bullish Engulfing/Bearish Engulfing", confirmadas por el indicador CCI. El módulo de señales de trading se basa en la clase CCandlePattern, que es un ejemplo sencillo de su uso para crear señales de trading con patrones de velas.

1. Patrones de velas de reversión: "Bullish Engulfing" y "Bearish Engulfing"

1.1. Bullish Engulfing

El patrón de reversión "Bullish Engulfing" se forma en una tendencia bajista cuando una pequeña vela negra es seguida por una gran vela blanca que eclipsa completamente la vela del día anterior. Las sombras (colas) de la pequeña vela son cortas, lo que permite que el cuerpo de la gran vela cubra toda la vela del día anterior.

Fig. 1. Patrón de vela

Fig. 1. Patrón de vela "Bullish Engulfing"

La identificación del patrón "Bullish Engulfing" se implementa en el método CheckPatternBullishEngulfing() de la clase CCandlePattern:

//+------------------------------------------------------------------+
//| Verifica la formación del patrón de vela "Bullish Engulfing"   |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBullishEngulfing()
  {
//--- Bullish Engulfing
   if((Open(2)>Close(2)) && // la vela anterior es bajista
      (Close(1)-Open(1)>AvgBody(1)) && // el cuerpo de la vela alcista es mayor que el promedio del cuerpo
      (Close(1)>Open(2)) && // el cierre de la vela alcista es mayor que la apertura de la vela bajista
      (MidOpenClose(2)<CloseAvg(2)) && // tendencia bajista
      (Open(1)<Close(2)))            // el precio de apertura de la vela alcista es inferior al de cierre de la bajista
      return(true);
//---
   return(false);
  }

El método CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING) de la clase CCandlePattern se utiliza para verificar la formación del patrón "Bullish Engulfing".


1.2. Bearish Engulfing

El patrón de reversión "Bearish Engulfing" se forma en una tendencia alcista cuando una pequeña vela blanca es seguida por una gran vela negra que eclipsa completamente la vela del día anterior. Las sombras (colas) de la pequeña vela son cortas, permitiendo que el cuerpo de la gran vela cubra toda la vela del día anterior.

Fig. 2. Patrón de vela

Fig. 2. Patrón de vela "Bearish Engulfing"

La identificación del patrón "Bearish Engulfing" se implementa en el método CheckPatternBearishEngulfing() de la clase CCandlePattern:

//+------------------------------------------------------------------+
//| Verifica la formación del patrón de vela "Bearish Engulfing"   |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBearishEngulfing()
  {
//--- Bearish Engulfing
   if((Open(2)<Close(2)) && // la vela anterior es alcista
      (Open(1)-Close(1)>AvgBody(1)) && // el cuerpo de la vela es mayor que el promedio del cuerpo
      (Close(1)<Open(2)) && // el cierre de la vela bajista es menor que la apertura de la vela alcista
      (MidOpenClose(2)>CloseAvg(2)) && // tendencia alcista
      (Open(1)>Close(2)))            // el precio de apertura de la vela bajista es mayor que el cierre de la alcista
      return(true);
//---
   return(false);
  }

El método CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING) de la clase CCandlePattern se utiliza para verificar la formación del patrón "Bearish Engulfing".


2. Señales de Trading Confirmadas por el Indicador CCI

Las señales de trading para abrir posiciones largas o cortas deben ser confirmadas por el indicador CCI. El valor del CCI debe ser mayor o menor que los niveles críticos (-50 para posiciones largas y 50 para posiciones cortas).

El cierre de una posición abierta depende de los valores del CCI. Esto puede realizarse en dos casos:

  • Si la línea de CCI ha alcanzado el nivel crítico opuesto (80 para posición larga y -80 para posición corta).
  • Si la señal inversa no está confirmada (cuando el CCI alcanza los niveles: -80 para posición larga y 80 para posición corta).

Fig. 3. Patrón

Fig. 3. Patrón "Bullish Engulfing", confirmado por el indicador CCI


  • int CBE_BE_CCI::LongCondition() - verifica las condiciones para abrir una posición larga (retorna 80) y cerrar la posición corta (retorna 40);
  • int CBE_BE_CCI::ShortCondition() - verifica las condiciones para abrir una posición corta (retorna 80) y cerrar la posición larga (retorna 40).

2.1. Abrir posición larga/Cerrar posición corta

  1. La formación del patrón "Bullish Engulfing" debe ser confirmada por el indicador CCI: CCI(1)<-50 (el valor del CCI de la última barra completada debe ser menor que -50).

  2. La posición corta debe cerrarse si el indicador CCI ha cruzado hacia arriba el nivel crítico -80 o hacia abajo el nivel crítico 80.

//+------------------------------------------------------------------+
//| Verifica condiciones de entrada y salida del mercado               |
//| 1) Entrada al mercado (abrir posición larga, resultado=80)      |
//| 2) Salida del mercado (cerrar posición corta, resultado=40)     |
//+------------------------------------------------------------------+
int CBE_BE_CCI::LongCondition()
  {
   int result=0;
//--- idx puede ser usado para determinar el modo de trabajo del EA
//--- idx=0 - en este caso el EA verifica condiciones de trading en cada tick
//--- idx=1 - en este caso el EA verifica condiciones de trading solo en barras de noticias
   int idx =StartIndex();
//--- verificando condiciones para abrir posición larga
//--- formación del patrón Bullish Engulfing y CCI<-50
   if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING) && (CCI(1)<-50))
     result=80;
//--- verificando condiciones para cerrar posición corta
//--- cruce de las líneas del CCI entre los niveles de sobrecompra/sobreventa (hacia abajo -80, hacia abajo -80)
   if(((CCI(1)>-80) && (CCI(2)<-80)) || ((CCI(1)<80) && (CCI(2)>80)))
     result=40;
//--- retornar resultado
   return(result);
  }

2.2. Abrir posición corta/Cerrar posición larga

  1. La formación del patrón "Bearish Engulfing" debe ser confirmada por el indicador CCI: CCI(1)>50 (el valor del CCI de la última barra completada debe ser mayor que 50).

  2. La posición larga debe cerrarse si el indicador CCI ha cruzado hacia abajo los niveles -80 o 80.

//+------------------------------------------------------------------+
//| Verifica condiciones de entrada y salida del mercado               |
//| 1) Entrada al mercado (abrir posición corta, resultado=80)      |
//| 2) Salida del mercado (cerrar posición larga, resultado=40)     |
//+------------------------------------------------------------------+
int CBE_BE_CCI::ShortCondition()
  {
   int result=0;
//--- idx puede ser usado para determinar el modo de trabajo del EA
//--- idx=0 - en este caso el EA verifica condiciones de trading en cada tick
//--- idx=1 - en este caso el EA verifica condiciones de trading solo en barras de noticias
   int idx =StartIndex();
//--- verificando condiciones para abrir posición corta
//--- formación del patrón Bearish Engulfing y CCI>50
   if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING) && (CCI(1)>50))
     result=80;
//--- verificando condiciones para cerrar posición larga
//--- cruce de las líneas del CCI entre los niveles de sobrecompra/sobreventa (hacia abajo -80, hacia arriba 80)
   if(((CCI(1)<80) && (CCI(2)>80)) || ((CCI(1)<-80) && (CCI(2)>-80)))
     result=40;
//--- retornar resultado
   return(result);
  }


2.3. Creando un Asesor Experto usando MQL5 Wizard

La clase CBE_BE_CCI no está incluida en las clases de la Biblioteca Estándar, para usarla, es necesario descargar el archivo acbe_be_cci.mqh (ver adjuntos) y guardarlo en la carpeta client_terminal_data\MQL5\Include\Expert\Signal\MySignals. Lo mismo debe hacerse con el archivo candlepatterns.mqh. Puedes usarlo en MQL5 Wizard después de reiniciar el MetaEditor.

Para crear un Asesor Experto, lanza el MQL5 Wizard:

Fig. 4. Creando un Asesor Experto usando MQL5 Wizard

Fig. 4. Creando un Asesor Experto usando MQL5 Wizard

Especifica el nombre del Asesor Experto:

Fig. 5. Propiedades generales del Asesor Experto

Fig. 5. Propiedades generales del Asesor Experto

Después, selecciona los módulos de señales de trading que utilizarás.

Fig. 6. Propiedades de señal del Asesor Experto

Fig. 6. Propiedades de señal del Asesor Experto

En nuestro caso, utilizamos solo un módulo de señales de trading.

Agregando el módulo de Señales basadas en Bullish Engulfing/Bearish Engulfing confirmado por CCI:

Fig. 7. Propiedades de señal del Asesor Experto

Fig. 7. Propiedades de señal del Asesor Experto

Módulo de señales de trading agregado:

Fig. 8. Propiedades de señal del Asesor Experto

Fig. 8. Propiedades de señal del Asesor Experto

Puedes seleccionar cualquier propiedad de trailing, pero utilizaremos "Trailing Stop no usado":

Fig. 9. Propiedades de trailing del Asesor Experto

Fig. 9. Propiedades de trailing del Asesor Experto

Con respecto a las propiedades de gestión de dinero, utilizaremos "Trading con volumen de operación fijo":

Fig. 10. Propiedades de gestión de dinero del Asesor Experto

Fig. 10. Propiedades de gestión de dinero del Asesor Experto

Al presionar el botón "Finalizar", obtendremos el código del Asesor Experto generado, que se ubicará en Expert_ABE_BE_CCI.mq5, guardado en terminal_data_folder\MQL5\Experts\.

Los parámetros de entrada predeterminados del Asesor Experto generado son:

//--- entradas para la señal principal
input int            Signal_ThresholdOpen   =10;     // Valor de umbral de señal para abrir [0...100]
input int            Signal_ThresholdClose  =10;     // Valor de umbral de señal para cerrar [0...100]
input double         Signal_PriceLevel      =0.0;    // Nivel de precio para ejecutar una operación
input double         Signal_StopLevel       =50.0;   // Nivel de Stop Loss (en puntos)
input double         Signal_TakeLevel       =50.0// Nivel de Take Profit (en puntos)

deben ser reemplazados por:

//--- entradas para la señal principal
input int            Signal_ThresholdOpen   =40;     // Valor de umbral de señal para abrir [0...100]
input int            Signal_ThresholdClose  =20;     // Valor de umbral de señal para cerrar [0...100]
input double         Signal_PriceLevel      =0.0;    // Nivel de precio para ejecutar una operación
input double         Signal_StopLevel       =0.0;    // Nivel de Stop Loss (en puntos)
input double         Signal_TakeLevel       =0.0    // Nivel de Take Profit (en puntos)

Los parámetros de entrada Signal_ThresholdOpen/Signal_ThresholdClose permiten especificar niveles de umbral para abrir y cerrar posiciones.

En el código de los métodos LongCondition() y ShortCondition() de la clase de señales de trading, hemos especificado los valores fijos de los umbrales:

  • Abrir posición: 80;
  • Cerrar posición: 40.

El Asesor Experto generado por MQL5 Wizard abre y cierra posiciones utilizando los "votos" de los módulos de señales de trading. El voto del módulo principal (como contenedor, consiste en todos los módulos añadidos) también se utiliza, pero sus métodos LongCondition() y ShortCondition() siempre retornan 0.

Los resultados de los votos del módulo principal también se utilizan en el promedio de los "votos". En nuestro caso, tenemos: módulo principal + 1 módulo de señales de trading, así que necesitamos tener en cuenta este hecho al establecer los valores de los umbrales. Debido a este hecho, el ThresholdOpen y ThresholdClose deben establecerse como 40=(0+80)/2 y 20=(0+40)/2.

Los valores de los parámetros de entrada Signal_StopLevel y Signal_TakeLevel están establecidos en 0, lo que significa que el cierre de las posiciones se realizará solo cuando se cumplan las condiciones de cierre.


2.4. Resultados de retroceso de la historia

Veamos la retrocesión del Asesor Experto sobre datos históricos (EURUSD H1, periodo de prueba: 2010.01.01-2011.03.16, PeriodCCI=49, MA_period=11).

En la creación del Asesor Experto utilizamos el volumen fijo (Trading Fixed Lot, 0.1), no se utiliza el algoritmo de Trailing Stop (Trailing no utilizado).

Fig. 11. Resultados de la prueba del Asesor Experto, basado en Bullish Engulfing/Bearish Engulfing + CCI

Fig. 11. Resultados de la prueba del Asesor Experto, basado en Bullish Engulfing/Bearish Engulfing + CCI


El mejor conjunto de parámetros de entrada se puede encontrar utilizando el Strategy Tester del terminal cliente de MetaTrader 5.

El código del Asesor Experto, creado por MQL5 Wizard, se adjunta en expert_abe_be_cci.mq5.

Publicaciones relacionadas

Comentarios (0)