¿Eres trader y buscas optimizar tus estrategias en MetaTrader 5? El MQL5 Wizard te permite crear Asesores Expertos (EAs) listos para usar, basados en las clases de la biblioteca estándar que viene con el terminal de cliente. Esto te permitirá verificar tus ideas de trading rápidamente, solo necesitas crear tu propia clase de señales de trading.
La idea general es la siguiente: la clase de señales de trading 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), donde se consideran muchas estrategias de trading. En este artículo, nos enfocaremos en los patrones de velas de reversión, confirmados por Estocástico, CCI, MFI y RSI.
Lo ideal es crear una clase separada, derivada de CExpertSignal, para comprobar la formación de patrones de velas. Para la confirmación de señales de trading generadas por estos patrones, es suficiente escribir una clase derivada de CCandlePattern y añadir las características necesarias (como la confirmación por osciladores).
En este artículo, analizaremos las señales basadas en los patrones de velas de "Estrella de la Mañana" y "Estrella de la Noche" (Morning Doji Star/Evening Doji Star), confirmados por el indicador Estocástico. El módulo de señales de trading se basa en la clase CCandlePattern, y aquí te mostramos un ejemplo sencillo de su uso para crear señales de trading con patrones de velas.
1. Patrones de velas de reversión: "Estrella de la Mañana" y "Estrella de la Noche"
1.1. Estrella de la Mañana
Este patrón indica la reversión de una tendencia bajista, y consiste en tres velas (Fig. 1). Después de una larga vela negra, aparece una vela (su color no es importante) con un cuerpo pequeño, que se encuentra fuera del cuerpo de la vela negra. Un cuerpo pequeño significa que la fuerza de los compradores y vendedores es igual, y el mercado está listo para cambiar la tendencia.
La tercera vela del patrón es una vela alcista, su cuerpo no se superpone con el cuerpo de la segunda vela, y el precio de cierre se encuentra dentro del cuerpo de la primera (vela bajista). El resultado del patrón se muestra en la Figura 1.
En caso de que la segunda vela sea tipo doji, el patrón se denomina "Estrella Doji de la Mañana".

Figura 1. Patrones de velas 'Estrella de la Mañana' y 'Estrella Doji de la Mañana'
La identificación del patrón "Estrella de la Mañana" se implementa en los métodos CheckPatternMorningStar() y CheckPatternMorningDoji() de la clase CCandlePattern:
//+------------------------------------------------------------------+ //| Comprobar formación del patrón "Estrella de la Mañana" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternMorningStar() { //--- Estrella de la Mañana if((Open(3)-Close(3)>AvgBody(1)) && // vela bajista, su cuerpo mayor que el cuerpo promedio (MathAbs(Close(2)-Open(2)<AvgBody(1*0.5) && // la segunda vela tiene un cuerpo pequeño (Close(2)<Close(3)) && // cierre de la segunda vela es menor que el cierre de la primera (Open(2)<Open(3)) && // apertura de la segunda vela es menor que la apertura de la primera (Close(1)>MidOpenClose(3))) return(true); //--- return(false); } //+------------------------------------------------------------------+ //| Comprobar formación del patrón "Estrella Doji de la Mañana" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternMorningDoji() { //--- Estrella Doji de la Mañana if((Open(3)-Close(3)>AvgBody(1)) && // vela bajista con cuerpo mayor que el cuerpo promedio (AvgBody(2)<AvgBody(1*0.1) && // la segunda vela tiene un cuerpo muy pequeño (doji) (Close(2)<Close(3)) && // cierre de la segunda vela es menor que el cierre de la primera (Open(2)<Open(3)) && // apertura de la segunda vela es menor que la apertura de la primera (Open(1)>Close(2)) && // brecha alcista en la última vela (Close(1)>Close(2))) return(true); //--- return(false); }
Los métodos CheckCandlestickPattern(CANDLE_PATTERN_MORNING_STAR) y CheckCandlestickPattern(CANDLE_PATTERN_MORNING_DOJI) de la clase CCandlePattern se utilizan para verificar la formación de los patrones de velas "Estrella de la Mañana" y "Estrella Doji de la Mañana".
1.2. Estrella de la Noche
Este patrón indica la reversión de una tendencia alcista y también consiste en tres velas (Fig. 2). Después de una larga vela blanca, aparece una vela (su color no es importante) con un cuerpo pequeño, que se encuentra fuera del cuerpo de la vela blanca. Esto indica que la fuerza de los toros y osos es igual y el mercado está listo para cambiar de tendencia.
La tercera vela del patrón es una vela bajista, su cuerpo no se superpone con el cuerpo de la segunda vela, y el precio de cierre se encuentra dentro del cuerpo de la primera (vela alcista). El resultado del patrón se muestra en la Figura 2.
En caso de que la segunda vela sea tipo doji, el patrón se denomina "Estrella Doji de la Noche".

Figura 2. Patrones de velas 'Estrella de la Noche' y 'Estrella Doji de la Noche'
Aquí están los métodos para identificar los patrones "Estrella de la Noche" y "Estrella Doji de la Noche":
//+------------------------------------------------------------------+ //| Comprobar formación del patrón "Estrella de la Noche" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternEveningStar() { //--- Estrella de la Noche if((Close(3)-Open(3)>AvgBody(1)) && // vela alcista con cuerpo mayor que el promedio (MathAbs(Close(2)-Open(2)<AvgBody(1*0.5) && // la segunda vela tiene un cuerpo pequeño (Close(2)>Close(3)) && // cierre de la segunda vela es mayor que el cierre de la primera (Open(2)>Open(3)) && // apertura de la segunda vela es mayor que la apertura de la primera (Close(1)<MidOpenClose(3))) return(true); //--- return(false); } //+------------------------------------------------------------------+ //| Comprobar formación del patrón "Estrella Doji de la Noche" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternEveningDoji() { //--- Estrella Doji de la Noche if((Close(3)-Open(3)>AvgBody(1)) && // vela alcista con cuerpo mayor que el promedio (AvgBody(2)<AvgBody(1*0.1) && // la segunda vela tiene un cuerpo muy pequeño (doji) (Close(2)>Close(3)) && // cierre de la segunda vela es mayor que el cierre de la primera (Open(2)>Open(3)) && // apertura de la segunda vela es mayor que la apertura de la primera (Open(1)<Close(2)) && // brecha bajista en la última vela (Close(1)<Close(2))) return(true); //--- return(false); }
Los métodos CheckCandlestickPattern(CANDLE_PATTERN_EVENING_STAR) y CheckCandlestickPattern(CANDLE_PATTERN_EVENING_DOJI) de la clase CCandlePattern se utilizan para verificar la formación de los patrones de velas "Estrella de la Noche" y "Estrella Doji de la Noche".
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 o menor que el nivel crítico correspondiente (30 o 70).
El cierre de las posiciones abiertas depende de los valores del indicador %D. Puede hacerse en dos casos:
- si la línea %D ha alcanzado el nivel crítico opuesto (80 para posiciones largas y 20 para posiciones cortas)
- si la señal de reversa no está confirmada (cuando la línea %D alcanza los niveles siguientes: 20 para posiciones largas y 80 para posiciones cortas)

Figura 3. Patrón 'Estrella de la Noche', confirmado por el indicador Estocástico
- int CH_HM_Stoch::LongCondition() - verifica condiciones para abrir posición larga (devuelve 80) y cerrar posición corta (devuelve 40);
- int CH_HM_Stoch::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
La formación del patrón "Estrella de la Mañana" debe ser confirmada por el indicador 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 indicador Estocástico ha cruzado hacia arriba los niveles 20 o 80.
//+------------------------------------------------------------------+ //| Verifica 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 CMS_ES_Stoch::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(); //--- verificación de condiciones para abrir posición larga //--- formación del patrón de Estrella de la Mañana y línea de señal<30 if (CheckCandlestickPattern(CANDLE_PATTERN_MORNING_STAR) && (StochSignal(1)<30)) result=80; //--- verificación de condiciones para cerrar posición corta //--- cruce de la línea de señal de niveles sobrecomprados/sobrevendidos (bajista 20, alcista 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 "Estrella de la Noche" debe ser confirmada por el indicador 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 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 CMS_ES_Stoch::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(); //--- verificación de condiciones para abrir posición corta //--- formación de Estrella de la Noche y línea de señal>70 if (CheckCandlestickPattern(CANDLE_PATTERN_EVENING_STAR) && (StochSignal(1)>70)) result=80; //--- verificación de condiciones para cerrar posición larga //--- cruce de la línea de señal de niveles sobrecomprados/sobrevendidos (bajista 80, alcista 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 CMS_ES_Stoch no está incluida en las clases de la biblioteca estándar, para usarla, es necesario descargar el archivo acms_es_stoch.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. Podrás 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 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 señales del Asesor Experto
En nuestro caso, usamos solo un módulo de señales de trading.
Añadiendo el módulo de Señales basadas en Estrellas de la Mañana/Noche por Estocástico:

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
Puedes seleccionar cualquier propiedad de trailing, pero usaremos "Trailing Stop no utilizado":

Fig. 9. Propiedades de trailing del Asesor Experto
En cuanto 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, ubicado en Expert_AMS_ES_Stoch.mq5, que se guardará en terminal_data_folder\MQL5\Experts\.
Los parámetros de entrada predeterminados del Asesor Experto generado:
//--- entradas para 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 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 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 el 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 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 los umbrales. Debido a este hecho, los valores 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 configurados en 0, lo que significa que el cierre de las posiciones solo se realizará cuando se cumplan las condiciones de cierre.
2.4. Resultados de la retroalimentación histórica
Consideremos la retroalimentación del Asesor Experto sobre datos históricos (EURUSD H1, período de prueba: 2000.01.01-2011.03.16, PeriodK=12, PeriodD=8, PeriodSlow=29, MA_period=4).
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 not used).

Fig. 11. Resultados de prueba del Asesor Experto, basado en Estrellas de la Mañana/Noche + 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_ams_es_stoch.mq5.
Publicaciones relacionadas
- Señales de Trading con MQL5: Patrones de Estrellas y MFI
- Crea tu Asesor Experto con MQL5: Señales de Trading Basadas en Dark Cloud Cover y Piercing Line
- Señales de Trading con Patrón Hammer/Hanging Man y Estocástico en MetaTrader 5
- 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