MQL5 Wizard: Crea EAs con Señales de Trading basadas en Dark Cloud Cover y Piercing Line

Mike 2011.02.25 19:49 118 0 0
Archivos adjuntos

El MQL5 Wizard te permite crear Asesores Expertos listos para usar, basados en las clases de la librería estándar que vienen con el terminal del cliente. Si quieres 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 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.

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 los patrones de velas. Para la confirmación de las señales de trading generadas por los patrones de velas, es suficiente escribir la clase, derivada de CCandlePattern y añadir las características necesarias (por ejemplo, la confirmación por osciladores).

Aquí consideraremos las señales basadas en los patrones de reversión de velas "Dark Cloud Cover" y "Piercing Line", confirmadas por el indicador Market Facilitation Index (MFI). El módulo de señales de trading se basa en la clase CCandlePattern, que es un ejemplo simple de su uso para la creación de señales de trading con patrones de velas.

1. Patrones de reversión de velas: "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 crea un hueco alcista en el segundo día. Sin embargo, el segundo día cierra por debajo del punto medio del primer día.

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 implementa en el 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 nuevo máximo)
      return(true);
//---
   return(false);
  }

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

1.2. Piercing Line

El hueco a la baja en el 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 bajistas que podría estar formándose un mínimo. Esta acción del precio no es tan discernible utilizando gráficos de barras como lo es con gráficos de velas. Cuanto más profundo sea 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.

Patrón de velas 'Piercing Line'

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

El reconocimiento del patrón "Piercing Line" se implementa en el 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 utiliza para verificar la formación del patrón "Piercing Line".

2. Señales de trading confirmadas por el indicador MFI

Las señales de trading para abrir posiciones largas o cortas deben ser confirmadas por el indicador MFI. El valor del indicador MFI debe ser inferior a 40 (para posiciones largas) o superior a 60 (para posiciones cortas).

El cierre de posiciones abiertas depende de los valores del indicador MFI. Puede hacerse en 2 casos:

  1. Si el MFI ha alcanzado el nivel crítico opuesto (70 para posición larga y 30 para posición corta).
  2. Si la señal de reversión no está confirmada (cuando el indicador MFI alcanza los siguientes niveles: 30 para posición larga y 70 para posición corta).

Patrón 'Dark Cloud Cover' confirmado por MFI

Fig. 3. Patrón "Dark Cloud Cover", confirmado por el indicador MFI

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

  1. La formación del patrón "Morning Star" debe ser confirmada por el indicador MFI: MFi(1)<40 (el valor del indicador MFI de la última barra completada debe ser menor a 40).

  2. La posición corta debe cerrarse si el indicador MFI ha cruzado hacia arriba los niveles críticos (70 o 30).

//+------------------------------------------------------------------+
//| 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 CDC_PL_MFI::LongCondition()
  {
   int result=0;
//--- idx puede usarse 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 las nuevas barras
  int idx   =StartIndex();
//--- verificación de condiciones para abrir posición larga
//--- formación del patrón de Piercing Line y MFI<40
  if(CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE) && (MFI(1)<40))
     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 arriba 30, hacia arriba 70)
  if(((MFI(1)>30) && (MFI(2)<30)) || ((MFI(1)>70) && (MFI(2)<70)))
     result=40;
//--- devolver 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 MFI: MFI(1)>60 (el valor del indicador MFI de la última barra completada debe ser mayor a 60).

  2. La posición larga debe cerrarse si el indicador MFI ha cruzado hacia arriba los niveles críticos (70 o 30).

//+------------------------------------------------------------------+
//| 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 CDC_PL_MFI::ShortCondition()
  {
   int result=0;
//--- idx puede usarse 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 las nuevas barras
  int idx   =StartIndex();
//--- verificación de condiciones para abrir posición corta
//--- formación del patrón de Dark Cloud Cover y MFI>60
  if(CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER) && (MFI(1)>60))
     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 arriba 70, hacia abajo 30)
  if(((MFI(1)>70) && (MFI(2)<70)) || ((MFI(1)<30) && (MFI(2)>30)))
     result=40;
//--- devolver resultado
   return(result);
  }

2.3. Creando un Asesor Experto usando MQL5 Wizard

La clase CDC_PL_MFI no está incluida en las clases de la Librería Estándar, para usarla, es necesario descargar el archivo adc_pl_mfi.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 tras reiniciar el MetaEditor.

Para crear un Asesor Experto, lanza el MQL5 Wizard:

Creando un Asesor Experto usando MQL5 Wizard

Fig. 4. Creando un Asesor Experto usando MQL5 Wizard

Especifica el nombre del Asesor Experto:

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 que se utilizarán.

Propiedades de señales del Asesor Experto

Fig. 6. Propiedades de 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:
Señales basadas en Dark Cloud Cover/Piercing Line confirmadas por MFI:

Propiedades de señales del Asesor Experto

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

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

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":

Propiedades de trailing del Asesor Experto

Fig. 9. Propiedades de trailing del Asesor Experto

Con respecto a las propiedades de gestión del dinero, usaremos "Trading con volumen de operación fijo":

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_ADC_PL_MFI.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 los niveles umbrales 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 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 necesitamos tener en cuenta este hecho al establecer los valores de umbral. Debido a este hecho, los 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 pruebas de retroceso

Consideremos las pruebas de retroceso del Asesor Experto en datos históricos (EURUSD H1, período de prueba: 2010.01.01-2011.03.16, PeriodMFI=49, MA_period=11).

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 no utilizado).

Resultados de prueba del Asesor Experto

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

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_adc_pl_mfi.mq5.

Lista
Comentarios 0