El MQL5 Wizard es una herramienta increíble que permite crear Asesores Expertos (EAs) listos para usar, basados en las clases de la librería estándar que vienen con el terminal de cliente (puedes encontrar más detalles en Crear EAs en MQL5 Wizard). Esta herramienta te permite validar 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 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.
Existen libros como "Estrategias de los Mejores Traders" (en ruso), que consideran muchas estrategias de trading; aquí nos enfocaremos en los patrones de velas de reversión, confirmados por osciladores como el Estocástico, CCI, MFI y el 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 la clase derivada de CCandlePattern y añadir las características necesarias (por ejemplo, confirmación por osciladores).
A continuación, analizaremos las señales basadas en el patrón de velas de reversión "Bullish Engulfing/Bearish Engulfing", confirmadas por el indicador RSI. El módulo de señales de trading se basa en la clase CCandlePattern, que es un ejemplo simple de su uso para crear señales de trading con patrones de velas.
1. Patrones 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 ("engulfa") 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 "Bullish Engulfing"
La identificación del patrón "Bullish Engulfing" se implementa en el método CheckPatternBullishEngulfing() de la clase CCandlePattern:
//+------------------------------------------------------------------+ //| Comprueba 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 valor promedio del cuerpo (Close(1)>Open(2)) && // El precio de cierre de la vela alcista es mayor que el precio de apertura de la vela bajista (MidOpenClose(2)<CloseAvg(2)) && // Tendencia bajista (Open(1)<Close(2))) // El precio de apertura de la vela alcista es menor que el precio 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 ("engulfa") 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. 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:
//+------------------------------------------------------------------+ //| Comprueba 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 valor promedio del cuerpo (Close(1)<Open(2)) && // El precio de cierre de la vela bajista es menor que el precio de 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 precio de 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 RSI
Las señales de trading para abrir posiciones largas o cortas deben ser confirmadas por el indicador RSI. El valor del RSI debe ser inferior/superior a los niveles críticos (40 para posición larga y 60 para posición corta).
El cierre de las posiciones abiertas depende de los valores del RSI. Esto puede hacerse en 2 casos:
- si el RSI ha alcanzado el nivel crítico opuesto (70 para posición larga y 30 para posición corta)
- si la señal inversa no está confirmada (cuando el RSI alcanza los siguientes niveles: 30 para posición larga y 70 para posición corta)

Fig. 3. Patrón "Bullish Engulfing" confirmado por RSI
- int CBE_BE_RSI::LongCondition() - comprueba las condiciones para abrir una posición larga (devuelve 80) y cerrar la posición corta (devuelve 40);
- int CBE_BE_RSI::ShortCondition() - comprueba 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 "Bullish Engulfing" debe ser confirmada por el indicador RSI: RSI(1)<40 (el valor del RSI de la última barra completada debe ser menor que 40).
La posición corta debe cerrarse si el indicador RSI ha cruzado hacia arriba los niveles críticos 70 o 30.
//+------------------------------------------------------------------+ //| Comprueba 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 CBE_BE_RSI::LongCondition() { int result=0; //--- idx puede usarse para determinar el modo de trabajo del EA //--- idx=0 - en este caso el EA comprueba condiciones de trading en cada tick //--- idx=1 - en este caso el EA comprueba condiciones de trading solo en barras de noticias int idx =StartIndex(); //--- comprobando condiciones para abrir posición larga //--- formación del patrón Bullish Engulfing y RSI<30 if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING) && (RSI(1)<40)) result=80; //--- comprobando condiciones para cerrar posición corta //--- cruce de niveles de sobrecompra/sobreventa (hacia arriba 30, hacia arriba 70) if(((RSI(1)>30) && (RSI(2)<30)) || ((RSI(1)>70) && (RSI(2)<70))) result=40; //--- devolver resultado return(result); }
2.2. Abrir posición corta/Cerrar posición larga
La formación del patrón "Bearish Engulfing" debe ser confirmada por el indicador RSI: RSI(1)>60 (el valor del indicador RSI de la última barra completada debe ser mayor que 60).
La posición larga debe cerrarse si el indicador RSI ha cruzado hacia abajo los niveles críticos 70 o 30.
//+------------------------------------------------------------------+ //| Comprueba 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 CBE_BE_RSI::ShortCondition() { int result=0; //--- idx puede usarse para determinar el modo de trabajo del EA //--- idx=0 - en este caso el EA comprueba condiciones de trading en cada tick //--- idx=1 - en este caso el EA comprueba condiciones de trading solo en barras de noticias int idx =StartIndex(); //--- comprobando condiciones para abrir posición corta //--- formación del patrón Bearish Engulfing y RSI>60 if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING) && (RSI(1)>60)) result=80; //--- comprobando condiciones para cerrar posición larga //--- cruce de niveles de sobrecompra/sobreventa (hacia abajo 70, hacia abajo 30) if(((RSI(1)<70) && (RSI(2)>70)) || ((RSI(1)<30) && (RSI(2)>30))) result=40; //--- devolver resultado return(result); }
2.3. Creando un Asesor Experto usando MQL5 Wizard
La clase CBE_BE_RSI no está incluida en las clases de la Librería Estándar, para usarla, es necesario descargar el archivo acml_rsi.mqh (ver adjuntos) y guardarlo en la carpeta client_terminal_data\MQL5\Include\Expert\Signal\MySignals. Lo mismo debe hacerse con el archivo acandlepatterns.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
Especifica el nombre del Asesor Experto:

Fig. 5. Propiedades generales del Asesor Experto
Después, selecciona los módulos de señales de trading que usarás.

Fig. 6. Propiedades de señal del Asesor Experto
En nuestro caso, solo utilizamos un módulo de señales de trading.
Añadiendo el módulo de Señales basadas en Bullish Engulfing/Bearish Engulfing confirmadas por RSI:

Fig. 7. Propiedades de señal del Asesor Experto
Módulo de señales de trading añadido:

Fig. 8. Propiedades de señal del Asesor Experto
Puedes seleccionar cualquier propiedad de trailing, pero utilizaremos "Sin Trailing":

Fig. 9. Propiedades de dinero del Asesor Experto
En cuanto a las propiedades de gestión de dinero, utilizaremos "Trading con volumen fijo":

Fig. 10. Propiedades de dinero del Asesor Experto
Al presionar el botón "Finalizar", obtendremos el código del Asesor Experto generado, ubicado en Expert_ABE_BE_RSI.mq5, que se guardará en terminal_data_folder\MQL5\Experts\.
Los parámetros de entrada predeterminados del Asesor Experto generado:
//--- entradas para la señal principal input int Signal_ThresholdOpen =10; // Valor del umbral de señal para abrir [0...100] input int Signal_ThresholdClose =10 // Valor del 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 Stop Loss (en puntos) input double Signal_TakeLevel =50.0 // Nivel Take Profit (en puntos)
deben ser reemplazados por:
//--- entradas para la señal principal input int Signal_ThresholdOpen =40; // Valor del umbral de señal para abrir [0...100] input int Signal_ThresholdClose =20 // Valor del 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 Stop Loss (en puntos) input double Signal_TakeLevel =0.0 // Nivel Take Profit (en puntos)
Los parámetros de entrada Signal_ThresholdOpen/Signal_ThresholdClose permiten especificar niveles 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 usando 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 de umbral. Por esta razón, 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 solo se hará cuando las condiciones de cierre sean verdaderas.
2.4. Resultados de la prueba de retroceso
Analicemos la prueba de retroceso del Asesor Experto con datos históricos (EURUSD H1, período de prueba: 2010.01.01-2011.03.04, PeriodRSI=11, MA_period=5).
En la creación del Asesor Experto, utilizamos un 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 + RSI
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_rsi.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 Dark Cloud Cover y Piercing Line
- Procesamiento Visual de Órdenes: Mejora tu Trading en MetaTrader 4
- 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