El MQL5 Wizard te permite crear Asesores Expertos listos para usar basados en las clases de la biblioteca estándar que vienen con el terminal cliente (puedes consultar más detalles en el artículo sobre Creación de Asesores Expertos en MQL5 Wizard). Esto te permite verificar 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 analizan diversas estrategias de trading. En este artículo nos enfocaremos en los patrones de velas de reversión, confirmados por el Estocástico, CCI, MFI y RSI como osciladores.
La mejor manera es crear una clase separada, derivada de CExpertSignal, para verificar la formación de los patrones de velas. Para confirmar las señales de trading generadas por los patrones de velas, es suficiente escribir la clase derivada de CCandlePattern y agregar las características necesarias (por ejemplo, confirmación por osciladores).
En este artículo consideraremos las señales basadas en los patrones de reversión de "Líneas de Reunión Alcista/Bajista", confirmadas por el Estocástico. 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 velas de "Líneas de Reunión"
1.1. Líneas de Reunión Alcistas
El patrón consiste en dos velas (bajista y alcista) con precios de cierre iguales (o muy cercanos). El cuerpo de las dos velas debe ser mayor que la longitud media del cuerpo.
El patrón de "Líneas de Reunión Alcistas" indica la reversión de una tendencia bajista.

Figura 1. Patrón de "Líneas de Reunión Alcistas"
El reconocimiento del patrón de "Líneas de Reunión Alcistas" se implementa en el método CheckPatternBullishMeetingLines() de la clase CCandlePattern:
//+--------------------------------------------------------------------+ //| Verifica la formación del patrón de "Líneas de Reunión Alcistas" candlestick | //+--------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBullishMeetingLines() { //--- Líneas de Reunión Alcistas if((Open(2)-Close(2)>AvgBody(1)) && // negra larga ((Close(1)-Open(1))>AvgBody(1)) && // blanca larga (MathAbs(Close(1)-Close(2))<0.1*AvgBody(1))) // doji cerra return(true); //--- return(false); }
El método CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_MEETING_LINES) de la clase CCandlePattern se utiliza para verificar la formación del patrón de "Líneas de Reunión Alcistas".
1.2. Líneas de Reunión Bajistas
El patrón consiste en dos velas (alcista y bajista) con precios de cierre iguales (o muy cercanos). El cuerpo de las dos velas debe ser mayor que la longitud media del cuerpo.
El patrón de "Líneas de Reunión Bajistas" indica la reversión de una tendencia alcista.

Figura 2. Patrón de "Líneas de Reunión Bajistas"
El reconocimiento del patrón de "Líneas de Reunión Bajistas" se implementa en el método CheckPatternBearishMeetingLines() de la clase CCandlePattern:
//+--------------------------------------------------------------------+ //| Verifica la formación del patrón de "Líneas de Reunión Bajistas" candlestick | //+--------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBearishMeetingLines() { //--- Líneas de Reunión Bajistas if((Close(2)-Open(2)>AvgBody(1)) && // blanca larga ((Open(1)-Close(1)>AvgBody(1)) && // negra larga (MathAbs(Close(1)-Close(2))<0.1*AvgBody(1))) // doji cerra return(true); //--- return(false); }
El método CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_MEETING_LINES) de la clase CCandlePattern se utiliza para verificar la formación del patrón de "Líneas de Reunión Bajistas".
2. Señales de Trading, confirmadas por el indicador Estocástico
Las señales de trading para abrir posiciones largas o cortas deben ser confirmadas por el oscilador Estocástico. La línea %D debe ser mayor/menor que el nivel crítico correspondiente (30 o 70).
El cierre de la posición abierta depende de los valores del indicador %D. Esto puede hacerse en 2 casos:
- si la línea %D ha alcanzado el nivel crítico opuesto (80 para la posición larga y 20 para la posición corta)
- si la señal de reversión no está confirmada (cuando la línea %D alcanza los siguientes niveles: 20 para la posición larga y 80 para la posición corta)

Fig. 3. Patrón de "Líneas de Reunión Bajistas" confirmado por el indicador Estocástico
- int CML_Stoch::LongCondition() - verifica las condiciones para abrir una posición larga (devuelve 80) y cerrar una posición corta (devuelve 40);
- int CML_Stoch::ShortCondition() - verifica las condiciones para abrir una posición corta (devuelve 80) y cerrar una posición larga (devuelve 40).
2.1. Abrir posición larga/Cerrar posición corta
La formación del patrón de "Líneas de Reunión Alcistas" debe ser confirmada por el Estocástico: StochSignal(1)<30 (el valor de la línea de señal del indicador Estocástico de la última barra completada debe ser menor que 30).
La posición corta debe cerrarse si la línea de señal del Estocástico ha cruzado hacia arriba los niveles 20 o 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 CML_Stoch::LongCondition() { int result=0; //--- idx puede ser utilizado para determinar el modo de trabajo del Asesor Experto //--- idx=0 - en este caso EA verifica condiciones de trading en cada tick //--- idx=1 - en este caso EA verifica condiciones de trading solo en barras de noticias int idx =StartIndex(); //--- verificación de condiciones para abrir posición larga //--- formación del patrón de Líneas de Reunión Alcistas y línea de señal<30 if (CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_MEETING_LINES) && (StochSignal(1)<30)) result=80; //--- verificación de condiciones para cerrar posición corta //--- cruce de la línea de señal de niveles de sobrecompra/sobreventa (hacia abajo 20, hacia arriba 80) if((((StochSignal(1)>20) && (StochSignal(2)<20)) || ((StochSignal(1)>80) && (StochSignal(2)<80)))) result=40; //--- devolver resultado return(result); }
2.2. Abrir posición corta/Cerrar posición larga
La formación del patrón de "Líneas de Reunión Bajistas" debe ser confirmada por el Estocástico: StochSignal(1)>70 (el valor de la línea de señal del indicador Estocástico de la última barra completada debe ser mayor que 70).
La posición larga debe cerrarse si la línea de señal del Estocástico ha cruzado hacia abajo los niveles 80 o 20.
//+------------------------------------------------------------------+ //| 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 CML_Stoch::ShortCondition() { int result=0; //--- idx puede ser utilizado para determinar el modo de trabajo del Asesor Experto //--- idx=0 - en este caso EA verifica condiciones de trading en cada tick //--- idx=1 - en este caso EA verifica condiciones de trading solo en barras de noticias int idx =StartIndex(); //--- verificación de condiciones para abrir posición corta //--- formación del patrón de Líneas de Reunión Bajistas y línea de señal>70 if (CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_MEETING_LINES) && (StochSignal(1)>70)) result=80; //--- verificación de condiciones para cerrar posición larga //--- cruce de la línea de señal de niveles de sobrecompra/sobreventa (hacia abajo 80, hacia arriba 20) if((((StochSignal(1)<80) && (StochSignal(2)>80)) || ((StochSignal(1)<20) && (StochSignal(2)>20)))) result=40; //--- devolver resultado return(result); }
2.3. Creando un Asesor Experto usando MQL5 Wizard
La clase CML_Stoch no está incluida en las clases de la biblioteca estándar. Para utilizarla, es necesario descargar el archivo acml_stoch.mqh (ver archivos adjuntos) y guardarlo en el client_terminal_data\folder\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
Especifica el nombre del Asesor Experto:

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

Fig. 6. Propiedades de señales del Asesor Experto
En nuestro caso, usamos solo un módulo de señales de trading.
Agregando el módulo de Señales basadas en Líneas de Reunión Alcistas/Bajistas confirmadas por Estocástico:

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

Fig. 8. Propiedades de señales del Asesor Experto
Puedes seleccionar cualquier propiedad de trailing, pero usaremos "Trailing Stop no utilizado":

Fig. 9. Propiedades de trailing del Asesor Experto
Con respecto a las propiedades de gestión de dinero, usaremos "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, que estará ubicado en Expert_AML_Stoch.mq5, guardado 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 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)
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 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 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 agregados) 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, por lo que debemos tener en cuenta este hecho al establecer los valores de umbral. Debido a esto, 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 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
Consideremos la prueba de retroceso del Asesor Experto en datos históricos (EURUSD H1, período de prueba: 2005.01.01-2010.03.16, PeriodK=6, PeriodD=3, PeriodSlow=36, MA_period=3).
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 (Trailing no utilizado).

Fig. 11. Resultados de la prueba del Asesor Experto, basado en Líneas de Reunión Alcistas/Bajistas + Estocástico
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, se adjunta en expert_aml_stoch.mq5.
Publicaciones relacionadas
- Señales de Trading con MQL5: Patrones de Estrellas y MFI
- 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
- MQL5 Wizard: Crea un Asesor Experto con Señales de Bullish Harami y Bearish Harami + CCI
- MQL5 Wizard: Crea EAs con Señales de Trading basadas en Dark Cloud Cover y Piercing Line