Inicio Trading Sistemático Publicación

Crea tu Asesor Experto con MQL5: Señales de Trading Basadas en Harami y Estocástico

Archivos adjuntos
310.zip (6.59 KB, Descargar 2 veces)

El MQL5 Wizard es una herramienta increíble que te permite crear Asesores Expertos listos para usar, aprovechando las clases de la biblioteca estándar que vienen con tu terminal de cliente. Si quieres explorar tus ideas de trading rápidamente, 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 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 analizan muchas estrategias de trading. En este artículo nos enfocaremos en los patrones de velas de reversión, confirmados por el Estocástico, CCI, MFI y RSI.

La mejor práctica es crear una clase separada, derivada de CExpertSignal, para verificar la formación de patrones de velas. Para la confirmación de las señales de trading generadas por estos patrones, basta con escribir una clase derivada de CCandlePattern y agregar las características necesarias (por ejemplo, confirmación por osciladores).

A continuación, vamos a analizar las señales basadas en el patrón de velas de reversión "Bullish Harami/Bearish Harami", confirmadas por el Estocástico. El módulo de señales de trading se basa en la clase CCandlePattern, que es un ejemplo sencillo de uso para crear señales de trading con patrones de velas.


1. Patrones de velas de reversión "Bullish Harami" y "Bearish Harami"

1.1. Bullish Harami

El patrón de reversión Bullish Harami se forma en una tendencia bajista cuando una gran vela es seguida por una vela más pequeña cuyo cuerpo se encuentra dentro del rango vertical del cuerpo mayor. Este patrón indica que la tendencia bajista puede estar revirtiéndose, señalando que es un buen momento para entrar en una posición larga. La segunda vela se abre con un gap al alza.

Cuanto más pequeña sea la segunda vela (blanca), más probable es la reversión.

Fig. 1. Patrón de velas Bullish Harami

Fig. 1. Patrón de velas Bullish Harami

La identificación del patrón "Bullish Harami" se implementa en el método CheckPatternBullishHarami() de la clase CCandlePattern:

//+------------------------------------------------------------------+
//| Verifica la formación del patrón "Bullish Harami"               |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBullishHarami()
  {
//--- Bullish Harami
   if((Close(1)>Open(1))              && // la última barra completada es alcista (vela blanca)
     ((Open(2)-Close(2)>AvgBody(1))  && // la vela anterior es bajista, su cuerpo es mayor que el promedio (vela negra larga)
     ((Close(1)<Open(2))              && // el precio de cierre de la vela alcista es menor que el precio de apertura de la vela bajista
      (Open(1)>Close(2)))              && // el precio de apertura de la vela alcista es mayor que el precio de cierre de la vela bajista
      (MidPoint(2)<CloseAvg(2)))         // tendencia bajista
      return(true);
//---
   return(false);
  }

El método CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI) de la clase CCandlePattern se utiliza para verificar la formación del patrón de velas "Bullish Harami".


1.2. Bearish Harami

El patrón de reversión Bearish Harami se forma en una tendencia alcista cuando una gran vela es seguida por una vela más pequeña cuyo cuerpo se encuentra dentro del rango vertical del cuerpo mayor. Este patrón indica que la tendencia alcista puede estar revirtiéndose, señalando que es un buen momento para entrar en una posición corta. La segunda vela se abre con un gap a la baja.

Cuanto más pequeña sea la segunda vela (negra), más probable es la reversión.

Fig. 2. Patrón de velas Bearish Harami

Fig. 2. Patrón de velas Bearish Harami

La identificación del patrón "Bearish Harami" se implementa en el método CheckPatternBearishHarami() de la clase CCandlePattern:

//+------------------------------------------------------------------+
//| Verifica la formación del patrón "Bearish Harami"               |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBearishHarami()
  {
//--- Bearish Harami
   if((Close(1)<Open(1))              && // la última barra completada es bajista (vela negra)
     ((Close(2)-Open(2)>AvgBody(1))  && // la vela anterior es alcista, su cuerpo es mayor que el promedio (vela blanca larga)
     ((Close(1)>Open(2))              && // el precio de cierre de la vela bajista es mayor que el precio de apertura de la vela alcista
      (Open(1)<Close(2)))              && // el precio de apertura de la vela bajista es menor que el precio de cierre de la vela alcista
      (MidPoint(2)>CloseAvg(2)))         // tendencia alcista
      return(true);
//---
   return(false);
  }

El método CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI) de la clase CCandlePattern se utiliza para verificar la formación del patrón de velas "Bearish Harami".


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 posiciones largas y 20 para posiciones cortas)
  2. si la señal de reversión no está confirmada (cuando la línea %D alcanza los siguientes niveles: 20 para posiciones largas y 80 para posiciones cortas)

Fig. 3. Patrón de velas Bearish Harami, confirmado por el indicador Estocástico

Fig. 3. Patrón de velas Bearish Harami, confirmado por el indicador Estocástico

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

  • int CBH_BH_Stoch::LongCondition() - verifica las condiciones para abrir una posición larga (devuelve 80) y cerrar la posición corta (devuelve 40);
  • int CBH_BH_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 Harami" debe ser confirmada por el 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).

  2. La posición corta debe cerrarse si la línea de señal del 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 CBH_BH_Stoch::LongCondition()
  {
   int result=0;
//--- idx puede usarse para determinar el modo de trabajo del Asesor Experto
//--- idx=0 - en este caso el EA verifica las condiciones de trading en cada tick
//--- idx=1 - en este caso el EA verifica las 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 Bullish Harami y línea de señal<30
  if (CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI) && (StochSignal(1)<30))
     result=80;
//--- Verificación de condiciones para cerrar posición corta
//--- cruce de línea de señal de niveles de sobrecomprado/sobrevendido (hacia abajo 20, hacia arriba 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

  1. La formación del patrón "Bearish Harami" debe ser confirmada por el 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).

  2. 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 CBH_BH_Stoch::ShortCondition()
  {
   int result=0;
//--- idx puede usarse para determinar el modo de trabajo del Asesor Experto
//--- idx=0 - en este caso el EA verifica las condiciones de trading en cada tick
//--- idx=1 - en este caso el EA verifica las condiciones de trading solo en barras de noticias
  int idx   =StartIndex();
//--- Verificación de condiciones para abrir posición corta
//--- formación del patrón Bearish Harami y línea de señal>70
  if (CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI) && (StochSignal(1)>70))
     result=80;
//--- Verificación de condiciones para cerrar posición larga
//--- cruce de línea de señal de niveles de sobrecomprado/sobrevendido (hacia abajo 80, hacia arriba 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 CBH_BH_Stoch no está incluida en las clases de la biblioteca estándar, para usarla, es necesario descargar el archivo acbh_bh_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. 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 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 Bullish Harami/Bearish Harami 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 utilizado":

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 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, que estará ubicado en Expert_ABH_BH_Stoch.mq5 y se guardará en terminal_data_folder\MQL5\Experts\.

Los parámetros de entrada por defecto 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)

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 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, que 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, 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 posiciones solo se hará cuando las condiciones de cierre sean verdaderas.


2.4. Resultados de pruebas históricas

Consideremos las pruebas 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 el volumen fijo (Trading Fixed Lot, 0.1), no se utiliza el algoritmo Trailing Stop (Trailing not used).

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

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


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

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


Publicaciones relacionadas

Comentarios (0)