Inicio Trading Sistemático Publicación

Crea tu Asesor Experto con MQL5: Señales de Trading Basadas en Estrellas de la Mañana/Atardecer y CCI

Archivos adjuntos
322.zip (6.46 KB, Descargar 2 veces)

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 Cómo crear Asesores Expertos en MQL5 Wizard para más detalles). 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 están disponibles en el artículo MQL5 Wizard: Cómo Crear un Módulo de Señales de Trading.

La idea básica 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), donde se consideran 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 verificar la formación de patrones de velas. Para confirmar las señales de trading generadas por los patrones de velas, basta con escribir la clase, derivada de CCandlePattern y añadir las características necesarias (por ejemplo, confirmación por osciladores).

Aquí consideraremos las señales basadas en los patrones de velas de "Estrella de la Mañana/Estrella de la Tarde" (Estrella Doji de la Mañana/Estrella Doji de la Tarde), confirmadas por el indicador CCI. El módulo de señales de trading se basa en la clase CCandlePattern, es un ejemplo simple 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 Tarde"

1.1. Estrella de la Mañana

Este patrón indica la reversión de una tendencia bajista, se compone de tres velas (Fig. 1). Después de una larga vela negra, hay una vela (el color no es importante) con un cuerpo pequeño, que está por fuera del cuerpo de la vela negra. El cuerpo pequeño de la vela significa que las fuerzas de los toros y los osos son iguales y el mercado está listo para cambiar de tendencia.

La tercera vela del patrón es la 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). La vela resultante del modelo también se muestra en la Figura 1.

En caso de que la segunda vela sea una vela tipo doji, el modelo se denomina "Estrella Doji de la Mañana".

Fig. 1. Patrones de velas 'Estrella de la Mañana' y 'Estrella Doji de la Mañana'

Fig. 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:

//+------------------------------------------------------------------+
//| Verifica la 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 es mayor que el cuerpo promedio
      (MathAbs(Close(2)-Open(2)<AvgBody(1)*0.5) && // la segunda vela tiene un cuerpo pequeño (menor que la mitad del cuerpo promedio)
      (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)))                  // cierre de la última vela completada es mayor que el centro de la primera
      return(true);
//---
   return(false);
  }
//+------------------------------------------------------------------+
//| Verifica la 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 ascendente en la última vela completada
      (Close(1)>Close(2)))                 // cierre de la última vela completada es mayor que cierre de la segunda
      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 Tarde

Este patrón indica la reversión de una tendencia alcista, se compone de tres velas (Fig. 2). Después de una larga vela blanca, hay una vela (el color no es importante) con un cuerpo pequeño, que está por fuera del cuerpo de la vela blanca. El cuerpo pequeño de la vela significa que las fuerzas de los toros y los osos son iguales y el mercado está listo para cambiar de tendencia.

La tercera vela del patrón es la 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). La vela resultante del modelo también se muestra en la Figura 2.

En caso de que la segunda vela sea tipo doji, el modelo se denomina "Estrella Doji de la Tarde".

Fig. 2. Patrones de velas 'Estrella de la Tarde' y 'Estrella Doji de la Tarde'

Fig. 2. Patrones de velas 'Estrella de la Tarde' y 'Estrella Doji de la Tarde'

A continuación, se presentan los métodos para identificar los patrones de "Estrella de la Tarde" y "Estrella Doji de la Tarde":

//+------------------------------------------------------------------+
//| Verifica la formación del patrón "Estrella de la Tarde"                    |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternEveningStar()
  {
//--- Estrella de la Tarde
   if((Close(3)-Open(3)>AvgBody(1))             && // vela alcista con cuerpo mayor que el cuerpo promedio 
      (MathAbs(Close(2)-Open(2)<AvgBody(1)*0.5) && // la segunda vela tiene un cuerpo pequeño (menor que la mitad del promedio)
      (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)))                  // cierre de la última vela completada es menor que el centro de la primera 
      return(true);
//---
   return(false);
  }
//+------------------------------------------------------------------+
//| Verifica la formación del patrón "Estrella Doji de la Tarde"               |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternEveningDoji()
  {
//--- Estrella Doji de la Tarde
   if((Close(3)-Open(3)>AvgBody(1)) && // vela alcista 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 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 descendente en la última vela completada
      (Close(1)<Close(2)))                 // cierre de la última vela completada es menor que cierre de la segunda 
      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 Tarde" y "Estrella Doji de la Tarde".


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 niveles críticos (-50 para posiciones largas y 50 para posiciones cortas).

El cierre de posiciones abiertas depende de los valores del CCI. Esto puede hacerse en 2 casos:

  • si la línea CCI ha alcanzado el nivel crítico opuesto (80 para posiciones largas y -80 para posiciones cortas)
  • si la señal inversa no está confirmada (cuando CCI alcanza los siguientes niveles: -80 para posiciones largas y 80 para posiciones cortas)

Fig. 3. Patrón 'Estrella de la Tarde', confirmado por el indicador CCI

Fig. 3. Patrón 'Estrella de la Tarde', confirmado por el indicador CCI


  • int CMS_ES_CCI::LongCondition() - verifica las condiciones para abrir una posición larga (devuelve 80) y cerrar la posición corta (devuelve 40);
  • int CMS_ES_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

  1. La formación del patrón "Estrella de la Mañana" 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 las 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_CCI::LongCondition()
  {
   int result=0;
//--- idx puede ser utilizado para determinar el modo de trabajo del Asesor Experto
//--- idx=0 - en este caso EA verifica las condiciones de trading en cada tick
//--- idx=1 - en este caso EA verifica las condiciones de trading solo en barras de noticias
   int idx   =StartIndex();
//--- verificación de las condiciones para abrir posición larga
//--- formación del patrón de Estrella de la Mañana y CCI<-50
   if(CheckCandlestickPattern(CANDLE_PATTERN_MORNING_STAR) && (CCI(1)<-50))
     result=80;
//--- verificación de las condiciones para cerrar la posición corta
//--- cruce de la línea de señal de los 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 "Estrella de la Tarde" debe ser confirmada por el indicador CCI: CCI(1)>50 (el valor del CCI del último 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 las 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_CCI::ShortCondition()
  {
   int result=0;
//--- idx puede ser utilizado para determinar el modo de trabajo del Asesor Experto
//--- idx=0 - en este caso EA verifica las condiciones de trading en cada tick
//--- idx=1 - en este caso EA verifica las condiciones de trading solo en barras de noticias
   int idx   =StartIndex();
//--- verificación de las condiciones para abrir posición corta
//--- formación del patrón de Estrella de la Tarde y CCI>50
   if(CheckCandlestickPattern(CANDLE_PATTERN_EVENING_STAR) && (CCI(1)>50))
     result=80;
//--- verificación de las condiciones para cerrar la posición larga
//--- cruce de la línea de señal de los 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 Asesor Experto usando MQL5 Wizard

La clase CMS_ES_CCI no está incluida en las clases de la Biblioteca Estándar, para utilizarla, es necesario descargar el archivo acms_es_cci.mqh (ver adjuntos) y guardarlo en la carpeta 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 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 de eso, necesitamos seleccionar 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, usamos solo un módulo de señales de trading.

Agregando el módulo de Señales basadas en Estrellas de la Mañana/Atardecer 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 agregado:

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 usaremos "Trailing Stop no utilizado":

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_AMS_ES_CCI.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 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 las "votaciones" 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 utiliza, pero sus métodos LongCondition() y ShortCondition() siempre devuelven 0.

Los resultados de las votaciones del módulo principal también se utilizan en el promedio de "votaciones". En nuestro caso, tenemos: módulo principal + 1 módulo de señales de trading, por lo que necesitamos tener en cuenta este hecho al configurar 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 se realizará solo cuando las condiciones de cierre sean verdaderas.


2.4. Resultados de las pruebas de retroceso

Consideremos las pruebas de retroceso del Asesor Experto en datos históricos (EURUSD H1, período de prueba: 2009.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 utiliza el algoritmo de Trailing Stop (Trailing no utilizado).

Fig. 11. Resultados de las pruebas del Asesor Experto, basado en Estrellas de la Mañana/Atardecer + CCI

Fig. 11. Resultados de las pruebas del Asesor Experto, basado en Estrellas de la Mañana/Atardecer + CCI


El mejor conjunto de parámetros de entrada puede encontrarse utilizando el Probador de Estrategias del terminal cliente de MetaTrader 5.

El código del Asesor Experto, creado por MQL5 Wizard, se adjunta en expert_ams_es_cci.mq5.


Publicaciones relacionadas

Comentarios (0)