El MQL5 Wizard es una herramienta poderosa que permite crear Asesores Expertos (EAs) listos para usar, basados en las clases de la biblioteca estándar que se entregan con el terminal de cliente. Con esta herramienta, puedes comprobar rápidamente tus ideas de trading creando 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 general es la siguiente: la clase de señales de trading se deriva de CExpertSignal. Luego, es necesario sobreescribir 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 Estocástico, CCI, MFI y RSI.
La mejor manera es crear una clase separada, derivada de CExpertSignal para comprobar la formación de patrones de velas. Para confirmar las señales de trading generadas por los patrones de velas, es suficiente con escribir una clase, derivada de CCandlePattern y añadir las características necesarias (por ejemplo, la confirmación mediante osciladores).
Aquí consideraremos las señales basadas en el patrón de velas de reversión "Hammer/Hanging Man", confirmado por el indicador CCI. El módulo de señales de trading se basa en la clase CCandlePattern, y 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: "Hammer" y "Hanging Man"
1.1. Hammer
El "Hammer" es una vela con un cuerpo pequeño y una larga mecha inferior, formada después de un movimiento de precios a la baja. El patrón "Hammer" indica el final de una tendencia bajista.
El color del cuerpo de la vela no es importante, pero un hammer alcista indica un mayor potencial alcista. El cuerpo del patrón "Hammer" se forma a menudo cerca del mínimo de la vela anterior. Una mecha inferior más larga y una mecha superior más corta conducen a un mayor potencial de reversión.

Fig. 1. Patrón de vela 'Hammer'
El reconocimiento del patrón "Hammer" se implementa en el método CheckPatternHammer() de la clase CCandlePattern:
//+------------------------------------------------------------------+ //| Comprueba la formación del patrón de vela "Hammer" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternHammer() { //--- Hammer if((MidPoint(1)<CloseAvg(2)) && // tendencia bajista (MathMin(Open(1),Close(1))>(High(1)-(High(1)-Low(1))/3.0)) && // cuerpo en el tercio superior (Close(1)<Close(2)) && (Open(1)<Open(2))) // separación del cuerpo return(true); //--- return(false); }
El método CheckCandlestickPattern(CANDLE_PATTERN_HAMMER) de la clase CCandlePattern se utiliza para comprobar la formación del patrón de vela "Hammer".
1.2. Hanging Man
El "Hanging Man" es una vela con un cuerpo pequeño y una larga mecha inferior, formada después de un movimiento de precios al alza. El patrón "Hanging Man" indica el final de una tendencia alcista.
El color del cuerpo de la vela no es importante, pero una vela bajista indica un mayor potencial bajista. El cuerpo del patrón "Hanging Man" a menudo se forma cerca del máximo de la vela anterior. Una mecha inferior más larga y una mecha superior más corta llevan a un mayor potencial de reversión.

Fig. 2. Patrón de vela 'Hanging Man'
El reconocimiento del patrón "Hanging Man" se implementa en el método CheckPatternHangingMan() de la clase CCandlePattern:
//+------------------------------------------------------------------+ //| Comprueba la formación del patrón de vela "Hanging Man" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternHangingMan() { //--- Hanging man if((MidPoint(1)>CloseAvg(2)) && // tendencia alcista (MathMin(Open(1),Close(1)>(High(1)-(High(1)-Low(1))/3.0)) && // cuerpo en el tercio superior (Close(1)>Close(2)) && (Open(1)>Open(2)))) // separación del cuerpo return(true); //--- return(false); }
El método CheckCandlestickPattern(CANDLE_PATTERN_HANGING_MAN) de la clase CCandlePattern se utiliza para comprobar la formación del patrón de vela "Hanging Man".
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 la posición larga y 50 para la posición corta).
El cierre de una posición abierta depende de los valores del CCI. Esto puede hacerse en 2 casos:
- si la línea del CCI ha alcanzado el nivel crítico opuesto (80 para la posición larga y -80 para la posición corta)
- si la señal inversa no está confirmada (cuando el CCI alcanza los siguientes niveles: -80 para la posición larga y 80 para la posición corta)

Fig. 3. Patrón 'Hammer' confirmado por el indicador CCI
- int CH_HM_CCI::LongCondition() - verifica las condiciones para abrir una posición larga (devuelve 80) y cerrar la posición corta (devuelve 40);
- int CH_HM_CCI::ShortCondition() - verifica las condiciones para abrir una posición corta (devuelve 80) y cerrar la posición larga (devuelve 40).
2.1. Abrir posición larga/Cerrar posición corta
La formación del patrón "Hammer" debe ser confirmada por el indicador CCI: CCI(1)<-50 (el valor del CCI de la última barra completada debe ser menor que -50).
La posición corta debe cerrarse si el indicador CCI ha cruzado hacia arriba el nivel crítico -80 o cruzado hacia abajo el nivel crítico 80.
//+------------------------------------------------------------------+ //| Comprueba condiciones para entrar y salir del mercado | //| 1) Entrada al mercado (abrir posición larga, resultado=80) | //| 2) Salida del mercado (cerrar posición corta, resultado=40) | //+------------------------------------------------------------------+ int CH_HM_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(); //--- comprobando condiciones para abrir posición larga //--- formación del patrón Hammer y CCI<-50 if(CheckCandlestickPattern(CANDLE_PATTERN_HAMMER) && (CCI(1)<-50)) result=80; //--- comprobando condiciones para cerrar posición corta //--- cruce de la línea de señal de niveles de sobrecompra/sobreventa (abajo -80, 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
La formación del patrón "Hanging Man" debe ser confirmada por el indicador CCI: CCI(1)>50 (el valor del indicador CCI de la última barra completada debe ser mayor que 50).
La posición larga debe cerrarse si el indicador CCI ha cruzado hacia abajo los niveles -80 o 80.
//+------------------------------------------------------------------+ //| Comprueba condiciones para entrar y salir del mercado | //| 1) Entrada al mercado (abrir posición corta, resultado=80) | //| 2) Salida del mercado (cerrar posición larga, resultado=40) | //+------------------------------------------------------------------+ int CH_HM_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(); //--- comprobando condiciones para abrir posición corta //--- formación del patrón Hanging Man y CCI>50 if(CheckCandlestickPattern(CANDLE_PATTERN_HANGING_MAN) && (CCI(1)>50)) result=80; //--- comprobando condiciones para cerrar posición larga //--- cruce de la línea de señal de niveles de sobrecompra/sobreventa (abajo -80, arriba 80) if(((CCI(1)<80) && (CCI(2)>80)) || ((CCI(1)<-80) && (CCI(2)>-80))) result=40; //--- devolver resultado return(result); }
2.3. Creando un Asesor Experto usando MQL5 Wizard
La clase CH_HM_CCI no está incluida en las clases de la Biblioteca Estándar; para usarla, es necesario descargar el archivo ach_hm_cci.mqh (ver adjuntos) y guardarlo en la carpeta terminal_datos_cliente\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 MQL5 Wizard:

Fig. 4. Creando un Asesor Experto con MQL5 Wizard
Especifica el nombre del Asesor Experto:

Fig. 5. Propiedades generales del Asesor Experto
Después, necesitamos seleccionar los módulos de señales de trading utilizados.

Fig. 6. Propiedades de las señales del Asesor Experto
En nuestro caso, solo utilizamos un módulo de señales de trading.
Agregando el módulo de Señales basadas en Hammer/Hanging Man confirmadas por CCI:

Fig. 7. Propiedades de las señales del Asesor Experto
Módulo de señales de trading agregado:

Fig. 8. Propiedades de las señales del Asesor Experto
Puedes seleccionar cualquier propiedad de trailing, pero nosotros utilizaremos "Trailing Stop no usado":

Fig. 9. Propiedades de trailing del Asesor Experto
En cuanto 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
Al presionar el botón "Finalizar", obtendremos el código del Asesor Experto generado, ubicado en Expert_AH_HM_CCI.mq5, que se guardará en terminal_datos_carpeta\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 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)
debe ser reemplazado 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 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 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, consiste en todos los módulos añadidos) también se usa, 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 "votos". En nuestro caso, tenemos: módulo principal + 1 módulo de señales de trading, así que debemos tener en cuenta este hecho al establecer los valores de umbral. Debido a este hecho, los valores de 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 se establecen en 0, lo que significa que el cierre de las posiciones solo se realizará cuando las condiciones de cierre sean verdaderas.
2.4. Resultados de la Prueba de Retroceso
Veamos la prueba de retroceso del Asesor Experto en datos históricos (EURUSD H1, periodo de prueba: 2010.01.01-2011.03.16, PeriodCCI=25, MA_period=5).
En la creación del Asesor Experto utilizamos el volumen fijo (Trading con Lote Fijo, 0.1), no se utilizó el algoritmo de Trailing Stop (Sin Trailing).

Fig. 11. Resultados de la prueba del Asesor Experto, basado en Hammer/Hanging Man + CCI
El mejor conjunto de parámetros de entrada se puede encontrar utilizando el Tester de Estrategias del terminal cliente de MetaTrader 5.
El código del Asesor Experto, creado por MQL5 Wizard, está adjunto en expert_ah_hm_cci.mq5.
Publicaciones relacionadas
- Señales de Trading con Patrón Hammer/Hanging Man y Estocástico en MetaTrader 5
- Crea tu Asesor Experto con MQL5: Señales de Trading Basadas en Estrellas de la Mañana/Atardecer y CCI
- Cómo Crear un Asesor Experto con MQL5: Señales de Trading Basadas en Estrellas y Estocástico
- Señales de Trading con MQL5: Patrones de Estrellas y MFI
- Crea tu Asesor Experto con MQL5: Señales de Trading Basadas en Harami y Estocástico