Crea tu Asesor Experto en MetaTrader 5: Señales de Trading con Patrones de Velas Engulfing y Estocástico

Mike 2011.03.10 19:54 12 0 0
Archivos adjuntos

El MQL5 Wizard es una herramienta increíble que te permite crear Asesores Expertos listos para usar, basados en las clases de la biblioteca estándar que se entrega 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 ejemplos los puedes encontrar 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.

Un libro interesante es "Estrategias de los mejores traders" (en ruso), que considera varias estrategias de trading. Aquí nos centraremos en los patrones de velas de reversión, confirmados por el Estocástico, CCI, MFI y RSI.

Lo mejor 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, basta con escribir la clase derivada de CCandlePattern y agregar las características necesarias (por ejemplo, la confirmación por osciladores).

En este artículo, vamos a considerar las señales basadas en el patrón de velas de reversión "Bullish Engulfing/Bearish Engulfing", confirmadas por el indicador Estocástico. El módulo de señales de trading se basa en la clase CCandlePattern, que es un ejemplo sencillo de su uso para crear señales de trading con patrones de velas.


1. Patrones de Velas de Reversión "Bullish Engulfing" y "Bearish Engulfing"

1.1. Bullish Engulfing

El patrón de reversión "Bullish Engulfing" se forma en una tendencia bajista cuando una pequeña vela negra es seguida por una gran vela blanca que eclipsa completamente la vela del día anterior. Las sombras (mechas) de la pequeña vela son cortas, permitiendo que el cuerpo de la gran vela cubra toda la vela del día anterior.

Fig. 1. Patrón de vela Bullish Engulfing

Fig. 1. Patrón de vela "Bullish Engulfing"

El reconocimiento del patrón "Bullish Engulfing" se implementa en el método CheckPatternBullishEngulfing() de la clase CCandlePattern:

//+------------------------------------------------------------------+
//| Verifica la formación del patrón de vela "Bullish Engulfing" |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBullishEngulfing()
  {
//--- Bullish Engulfing
   if((Open(2)>Close(2))             &&  // la vela anterior es bajista
      (Close(1)-Open(1)>AvgBody(1))  &&  // el cuerpo de la vela alcista es mayor que el promedio del cuerpo
      (Close(1)>Open(2))             &&  // el precio de cierre de la vela alcista es mayor que el precio de apertura de la vela bajista
      (MidOpenClose(2)<CloseAvg(2))  &&  // tendencia bajista
      (Open(1)<Close(2)))                // el precio de apertura de la vela alcista es menor que el precio de cierre de la vela bajista
      return(true);
//---
   return(false);
  }

El método CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING) se utiliza para verificar la formación del patrón "Bullish Engulfing".


1.2. Bearish Engulfing

El patrón de reversión "Bearish Engulfing" se forma en una tendencia alcista cuando una pequeña vela blanca es seguida por una gran vela negra que eclipsa completamente la vela del día anterior. Las sombras (mechas) de la pequeña vela son cortas, permitiendo que el cuerpo de la gran vela cubra toda la vela del día anterior.

Fig. 2. Patrón de vela Bearish Engulfing

Fig. 2. Patrón de vela "Bearish Engulfing"

El reconocimiento del patrón "Bearish Engulfing" se implementa en el método CheckPatternBearishEngulfing() de la clase CCandlePattern:

//+------------------------------------------------------------------+
//| Verifica la formación del patrón de vela "Bearish Engulfing" |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBearishEngulfing()
  {
//--- Bearish Engulfing
   if((Open(2)<Close(2))            &&  // la vela anterior es alcista
      (Open(1)-Close(1)>AvgBody(1)) &&  // el cuerpo de la vela es mayor que el promedio del cuerpo
      (Close(1)<Open(2))            &&  // el precio de cierre de la vela bajista es menor que el precio de apertura de la vela alcista
      (MidOpenClose(2)>CloseAvg(2)) &&  // tendencia alcista
      (Open(1)>Close(2)))               // el precio de apertura de la vela bajista es mayor que el precio de cierre de la vela alcista
      return(true);
//---
   return(false);
  }

El método CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING) se utiliza para verificar la formación del patrón "Bearish Engulfing".


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. 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 inversa 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 Bullish Engulfing, confirmado por el indicador Estocástico

Fig. 3. Patrón "Bullish Engulfing", confirmado por el indicador Estocástico


La verificación de las condiciones de entrada y salida se implementa en dos métodos:

  • int CBE_BE_Stoch::LongCondition() - verifica las condiciones para abrir una posición larga (devuelve 80) y cerrar la posición corta (devuelve 40);
  • int CBE_BE_Stoch::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 "Bullish Engulfing" 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 a 30).

  2. 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 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 CBE_BE_Stoch::LongCondition()
  {
   int result=0;
//--- idx se puede usar 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 las barras de noticias
  int idx   =StartIndex();
//--- verificación de condiciones para abrir posición larga
//--- formación del patrón Bullish Engulfing y línea de señal<30
  if (CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING) && (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;
//--- devuelve resultado
   return(result);
  }

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

  1. La formación del patrón "Bearish Engulfing" 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 a 70).

  2. La posición larga debe cerrarse si la línea de señal del indicador 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 CBE_BE_Stoch::ShortCondition()
  {
   int result=0;
//--- idx se puede usar 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 las barras de noticias
  int idx   =StartIndex();
//--- verificación de condiciones para abrir posición corta
//--- formación del patrón Bearish Engulfing y línea de señal>70
  if (CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING) && (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;
//--- devuelve resultado
   return(result);
  }


2.3. Crear Asesor Experto usando MQL5 Wizard

La clase CBE_BE_Stoch no está incluida en las clases de la Biblioteca Estándar. Para usarla, es necesario descargar el archivo acbe_be_stoch.mqh (ver adjuntos) y guardarlo en la carpeta terminal_data older\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, inicia 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 utilizados.

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

Agregando el módulo de Señales basadas en Bullish Engulfing/Bearish Engulfing confirmadas por Estocástico:

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

Fig. 9. Propiedades de trailing del Asesor Experto

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

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_ABE_BE_Stoch.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 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 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, así que necesitamos tener en cuenta este hecho al establecer los valores de umbral. Debido a este hecho, los valores de ThresholdOpen y ThresholdClose deben establecerse en 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 Backtesting de la Historia

Analicemos el backtesting del Asesor Experto en datos históricos (EURUSD H1, período de prueba: 2010.01.01-2011.03.04, PeriodK=47, PeriodD=9, PeriodSlow=13, MA_period=5).

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


Fig. 11. Resultados de prueba del Asesor Experto basado en Bullish/Bearish Engulfing + Estocástico

Fig. 11. Resultados de prueba del Asesor Experto basado en Bullish/Bearish Engulfing + 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, está adjunto en expert_abe_be_stoch.mq5.


Lista
Comentarios 0