Inicio Trading Sistemático Publicación

Crea tu Asesor Experto con MQL5: Señales de Trading Basadas en Dark Cloud Cover y Piercing Line

Archivos adjuntos
297.zip (6.61 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. Así podrás comprobar 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 lo puedes 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. A continuación, es necesario sobrescribir los métodos virtuales LongCondition() y ShortCondition() con tus propios métodos.

Un libro interesante es "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 el Stochastic, CCI, MFI y RSI osciladores.

La mejor forma de proceder 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 estos patrones de velas, solo es necesario escribir una clase derivada de CCandlePattern y añadir las características necesarias (por ejemplo, la confirmación por osciladores).

En este artículo, consideraremos las señales basadas en el patrón de velas de reversión "Dark Cloud Cover/Piercing Line", confirmado por el Stochastic. 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: "Dark Cloud Cover" y "Piercing Line"

1.1. Dark Cloud Cover

Es un patrón de reversión bajista que ocurre al final de una tendencia alcista. Se forma una larga vela blanca en el primer día y se genera una brecha al alza en el segundo día. Sin embargo, el segundo día cierra por debajo del punto medio del primer día.

Fig. 1. Patrón de velas 'Dark Cloud Cover'

Fig. 1. Patrón de velas 'Dark Cloud Cover'

El reconocimiento del patrón "Dark Cloud Cover" se realiza a través del método CheckPatternDarkCloudCover() de la clase CCandlePattern:

//+------------------------------------------------------------------+
//| Verifica la formación del patrón de velas "Dark Cloud Cover"   |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternDarkCloudCover()
  {
//--- Dark Cloud Cover 
   if((Close(2)-Open(2)>AvgBody(1))  && // (larga blanca)
      (Close(1)<Close(2))            && // 
      (Close(1)>Open(2))            && // (cierra dentro del cuerpo anterior)
      (MidOpenClose(2)>CloseAvg(1))  && // (tendencia alcista)
      (Open(1)>High(2)))                // (abre en un nuevo máximo)
      return(true);
//---
   return(false);
  }

El método CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER) de la clase CCandlePattern se usa para verificar la formación del patrón de velas "Dark Cloud Cover".


1.2. Piercing Line

La brecha a la baja del segundo día perpetúa la tendencia bajista. Sin embargo, el cierre del segundo día está por encima del punto medio del cuerpo del primer día. Esto sugiere a los osos que podría estar formándose un fondo. Esta acción de precio no es tan discernible usando gráficos de barras como sí lo es con gráficos de velas. Cuanto más penetra el cierre del segundo día en el cuerpo del primer día, más probable será que el señal de reversión tenga éxito.

Fig. 2. Patrón de velas 'Piercing Line'

Fig. 2. Patrón de velas 'Piercing Line'

El reconocimiento del patrón "Piercing Line" se realiza a través del método CheckPatternPiercingLine() de la clase CCandlePattern:

//+------------------------------------------------------------------+
//| Verifica la formación del patrón de velas "Piercing Line"     |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternPiercingLine()
  {
//--- Piercing Line
   if((Close(1)-Open(1)>AvgBody(1)) && // (larga blanca)
      (Open(2)-Close(2)>AvgBody(1)) && // (larga negra)
      (Close(1)>Close(2))           && //  
      (Close(1)<Open(2))            && // (cierra dentro del cuerpo anterior) 
      (MidOpenClose(2)<CloseAvg(2)) && // (tendencia bajista)
      (Open(1)<Low(2)))                // (abre por debajo del mínimo anterior) 
      return(true);
//---
   return(false);
  }

El método CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE) de la clase CCandlePattern se usa para verificar la formación del patrón de velas "Piercing Line".


2. Señales de Trading Confirmadas por el Indicador Stochastic

Las señales de trading para abrir posiciones largas o cortas deben ser confirmadas por el oscilador Stochastic. 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:

  1. si la línea %D ha alcanzado el nivel crítico opuesto (80 para posición larga y 20 para posición corta)
  2. si la señal de reversión no está confirmada (cuando la línea %D alcanza los siguientes niveles: 20 para posición larga y 80 para posición corta)

Fig. 3. Patrón 'Dark Cloud Cover' confirmado por el indicador Stochastic

Fig. 3. Patrón 'Dark Cloud Cover', confirmado por el indicador Stochastic


2.1. Abrir posición larga/Cerrar posición corta

  1. La formación del patrón "Piercing Line" debe ser confirmada por el indicador Stochastic: StochSignal(1)<30 (el valor de la línea de señal del indicador Stochastic de la última barra completada debe ser menor que 30).

  2. La posición corta debe cerrarse si la línea de señal del indicador Stochastic 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 CDC_PL_Stoch::LongCondition()
  {
   int result=0;
//--- idx puede ser usado 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 nuevas barras
  int idx   =StartIndex();
//--- verificando condiciones para abrir posición larga
//--- formación del patrón Piercing Line y línea de señal<30
  if (CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE) && (StochSignal(1)<30))
     result=80;
//--- verificando condiciones para cerrar posición corta
//--- cruce de la línea de señal de niveles sobrecomprados/sobrevendidos (hacia abajo 20, hacia arriba 80)
   if((((StochSignal(1)>20) && (StochSignal(2)<20)) ||
       ((StochSignal(1)>80) && (StochSignal(2)<80))))
     result=40;
//--- retornar resultado
   return(result);
  }

2.2. Abrir posición corta/Cerrar posición larga

  1. La formación del patrón "Dark Cloud Cover" debe ser confirmada por el indicador Stochastic: StochSignal(1)>70 (el valor de la línea de señal del indicador Stochastic de la última barra completada debe ser mayor que 70).

  2. La posición larga debe cerrarse si la línea de señal del indicador Stochastic 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 CDC_PL_Stoch::ShortCondition()
  {
   int result=0;
//--- idx puede ser usado 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 nuevas barras
  int idx   =StartIndex();
//--- verificando condiciones para abrir posición corta
//--- formación del patrón Dark Cloud Cover y línea de señal>70
  if (CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER) && (StochSignal(1)>70))
     result=80;
//--- verificando condiciones para cerrar posición larga
//--- cruce de la línea de señal de niveles sobrecomprados/sobrevendidos (hacia abajo 80, hacia arriba 20)
   if((((StochSignal(1)<80) && (StochSignal(2)>80)) ||
       ((StochSignal(1)<20) && (StochSignal(2)>20))))
     result=40;
//--- retornar resultado
   return(result);
  }


2.3. Creando un Asesor Experto usando MQL5 Wizard

La clase CDC_PL_Stoch no está incluida en las clases de la Biblioteca Estándar, para usarla, es necesario descargar el archivo adc_pl_stoch.mqh (ver adjuntos) y guardarlo en la carpeta terminal_cliente_datos\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, selecciona los módulos de señales de trading que usarás.

Fig. 6. Propiedades de las señales del Asesor Experto

Fig. 6. Propiedades de las señales del Asesor Experto

En nuestro caso, utilizamos solo un módulo de señales de trading.

Añadiendo el módulo de Señales basadas en Dark Cloud Cover/Piercing Line confirmadas por Stochastic:

Fig. 7. Propiedades de las señales del Asesor Experto

Fig. 7. Propiedades de las señales del Asesor Experto

Módulo de señales de trading añadido:

Fig. 8. Propiedades de las señales del Asesor Experto

Fig. 8. Propiedades de las señales del Asesor Experto

Puedes seleccionar cualquier propiedad de trailing, pero nosotros usaremos "Trailing Stop no utilizado":

Fig. 9. Propiedades de gestión del dinero del Asesor Experto

Fig. 9. Propiedades de gestión del dinero del Asesor Experto

En cuanto a las propiedades de gestión del dinero, usaremos "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, que estará ubicado en Expert_ADC_PL_Stoch.mq5, y se guardará en terminal_datos_carpeta\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 un trato
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 un trato
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 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 usan 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, 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: 2010.01.01-2011.02.02, PeriodK=9, PeriodD=5, PeriodSlow=20, MA_period=27).

En la creación del Asesor Experto utilizamos el volumen fijo (Trading Fixed Lot, 0.1), el algoritmo de Trailing Stop no se utiliza (Trailing no utilizado).

Fig. 11. Resultados de la prueba del Asesor Experto basado en Dark Cloud Cover/Piercing Line + Stochastic

Fig. 11. Resultados de la prueba del Asesor Experto basado en Dark Cloud Cover/Piercing Line + Stochastic


El mejor conjunto de parámetros de entrada se puede encontrar utilizando el Strategy Tester del terminal cliente MetaTrader 5.

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

Publicaciones relacionadas

Comentarios (0)