Inicio Trading Sistemático Publicación

MQL5 Wizard: Crea un Asesor Experto con Señales de Bullish Harami y Bearish Harami + CCI

Archivos adjuntos
311.zip (6.48 KB, Descargar 2 veces)

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

La idea principal es la siguiente: la clase de señales de trading se deriva de CExpertSignal. A continuación, es necesario sobreescribir los métodos virtuales LongCondition() y ShortCondition() con tus propios métodos.

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

La mejor manera 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 los patrones de velas, solo es necesario escribir la clase derivada de CCandlePattern y añadir las características necesarias (por ejemplo, la confirmación por osciladores).

Aquí consideraremos las señales basadas en el patrón de velas de reversión "Bullish Harami/Bearish Harami", confirmadas por el indicador CCI. El módulo de señales de trading se basa en la clase CCandlePattern, que es un ejemplo simple de su uso para la creación de señales de trading con patrones de velas.

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

1.1. Bullish Harami

El patrón de reversión Bullish Harami se forma en una tendencia bajista cuando una vela grande es seguida por una vela más pequeña cuyo cuerpo está ubicado dentro del rango vertical del cuerpo más grande. Este patrón indica que la tendencia bajista puede estar invirtiéndose, señalando que es un buen momento para entrar en una posición larga. La segunda vela se abre con un gap al alza. Cuanto más pequeña sea la segunda (blanca), más probable es la reversión.

Patrón de reversión Bullish Harami

Fig. 1. Patrón de velas "Bullish Harami"

El reconocimiento del patrón "Bullish Harami" se implementa en el método CheckPatternBullishHarami() de la clase CCandlePattern:

//+------------------------------------------------------------------+
//| Verifica la formación del patrón de velas "Bullish Harami" |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBullishHarami() 
  { 
//--- Bullish Harami 
   if((Close(1)>Open(1))              && // la última barra completada es alcista (día blanco) 
     ((Open(2)-Close(2)>AvgBody(1))  && // la vela anterior es bajista, su cuerpo es mayor que el promedio (largo negro) 
     ((Close(1)<Open(2))              && // el precio de cierre de la vela alcista es menor que el precio de apertura de la vela bajista 
      (Open(1)>Close(2)))             && // el precio de apertura de la vela alcista es mayor que el precio de cierre de la vela bajista 
      (MidPoint(2)<CloseAvg(2)))         // tendencia bajista 
      return(true); 
//--- 
   return(false); 
  }

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


1.2. Bearish Harami

El patrón de reversión Bearish Harami se forma en una tendencia alcista cuando una vela grande es seguida por una vela más pequeña cuyo cuerpo está ubicado dentro del rango vertical del cuerpo más grande. Este patrón indica que la tendencia alcista puede estar invirtiéndose, señalando que es un buen momento para entrar en una posición corta. La segunda vela se abre con un gap a la baja.

Cuanto más pequeña sea la segunda (negra), más probable es la reversión.

Patrón de reversión Bearish Harami

Fig. 2. Patrón de velas "Bearish Harami"

El reconocimiento del patrón "Bearish Harami" se implementa en el método CheckPatternBearishHarami() de la clase CCandlePattern:

//+------------------------------------------------------------------+
//| Verifica la formación del patrón de velas "Bearish Harami" |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBearishHarami() 
  { 
//--- Bearish Harami 
   if((Close(1)<Open(1))              && // la última barra completada es bajista (día negro) 
     ((Close(2)-Open(2)>AvgBody(1))  && // la vela anterior es alcista, su cuerpo es mayor que el promedio (largo blanco) 
     ((Close(1)>Open(2))              && // el precio de cierre de la vela bajista es mayor que el precio de apertura de la vela alcista 
      (Open(1)<Close(2)))             && // el precio de apertura de la vela bajista es menor que el precio de cierre de la vela alcista 
      (MidPoint(2)>CloseAvg(2)))         // tendencia alcista 
      return(true); 
//--- 
   return(false); 
  }

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


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/menor que los niveles críticos (-50 para posición larga y 50 para posición corta).

El cierre de la posición abierta depende de los valores del CCI. Esto puede hacerse en 2 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 de reversión no se confirma (cuando el CCI alcanza los siguientes niveles: -80 para posición larga y 80 para posición corta)

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

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

  • int CBH_BH_CCI::LongCondition() - verifica condiciones para abrir posición larga (devuelve 80) y cerrar posición corta (devuelve 40);
  • int CBH_BH_CCI::ShortCondition() - verifica condiciones para abrir posición corta (devuelve 80) y cerrar posición larga (devuelve 40).

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

  1. La formación del patrón "Bullish Harami" 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 ha cruzado hacia abajo el nivel crítico 80.

//+------------------------------------------------------------------+
//| Verifica condiciones para 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 CBH_BH_CCI::LongCondition() 
  { 
   int result=0; 
//--- idx puede ser usado para determinar el modo de trabajo del Asesor Experto 
//--- 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(); 
//--- comprobación de condiciones para abrir posición larga 
//--- formación del patrón Bullish Harami y CCI<-50 
   if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI) && (CCI(1)<-50)) 
     result=80; 
//--- comprobación de condiciones para cerrar posición corta 
//--- cruce de línea de señal de 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; 
//--- devolver resultado 
   return(result); 
  }

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

  1. La formación del patrón "Bearish Harami" 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 para 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 CBH_BH_CCI::ShortCondition() 
  { 
   int result=0; 
//--- idx puede ser usado para determinar el modo de trabajo del Asesor Experto 
//--- 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(); 
//--- comprobación de condiciones para abrir posición corta 
//--- formación del patrón Bearish Harami y CCI>50 
   if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI) && (CCI(1)>50)) 
     result=80; 
//--- comprobación de condiciones para cerrar posición larga 
//--- cruce de línea de señal de 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; 
//--- devolver resultado 
   return(result); 
  }


2.3. Crear un Asesor Experto utilizando MQL5 Wizard

La clase CBH_BH_CCI no está incluida en las clases de la Librería Estándar, para usarla es necesario descargar el archivo acbh_bh_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 utilizarlo en MQL5 Wizard después de reiniciar el MetaEditor.

Para crear un Asesor Experto, lanza el MQL5 Wizard:

Fig. 4. Creando Asesor Experto usando MQL5 Wizard

Fig. 4. Creando 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 utilizados.

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

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

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

Añadiendo el módulo de Señales basadas en Bullish Harami/Bearish Harami, confirmadas por CCI:

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

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

Módulo de señales de trading añadido:

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

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

Puedes seleccionar cualquier propiedad de trailing, pero nosotros usaremos "Sin Trailing Stop":

Fig. 9. Propiedades de trailing del Asesor Experto

Fig. 9. Propiedades de trailing del Asesor Experto

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

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

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

Al presionar el botón "Finalizar", obtendremos el código del Asesor Experto generado, ubicado en Expert_ABH_BH_CCI.mq5, que se guardará 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 umbral de señal para abrir [0...100]
input int            Signal_ThresholdClose  =10     // Valor umbral de señal para cerrar [0...100]
input double         Signal_PriceLevel      =0.0    // Nivel de precio para ejecutar un trato
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 umbral de señal para abrir [0...100]
input int            Signal_ThresholdClose  =20     // Valor umbral de señal para cerrar [0...100]
input double         Signal_PriceLevel      =0.0    // Nivel de precio para ejecutar un trato
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 los 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 del umbral:

  • 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, que consiste en todos los módulos añadidos) también se utiliza, pero sus métodos LongCondition() y ShortCondition() siempre devuelven 0.

Los resultados de los votos del módulo principal también se utilizan en el promedio de "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 del umbral. Debido a esto, el ThresholdOpen y el 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 se establecen en 0, lo que significa que el cierre de las posiciones se realizará solo cuando las condiciones de cierre sean verdaderas.


2.4. Resultados de las pruebas de retroceso

Consideremos la prueba de retroceso del Asesor Experto en datos históricos (EURUSD H1, periodo de prueba: 01/01/2010 - 16/03/2011, PeriodCCI=11, MA_period=5).

En la creación del Asesor Experto utilizamos el volumen fijo (Trading con Lote Fijo, 0.1), no se utiliza el algoritmo de Trailing Stop (No se utiliza Trailing).

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

Fig. 11. Resultados de la prueba del Asesor Experto, basado en Bullish Harami/Bearish Harami + 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_abh_bh_cci.mq5.


Publicaciones relacionadas

Comentarios (0)