Inicio Trading Sistemático Publicación

Señales de Trading con Patrón Hammer/Hanging Man y Estocástico en MetaTrader 5

Archivos adjuntos
314.zip (6.58 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 junto con el terminal cliente (consulta Creación de Asesores Expertos en MQL5 Wizard para más detalles).

Este recurso te permite validar rápidamente tus ideas de trading; lo único que necesitas es crear tu propia clase de señales de trading. Puedes encontrar la estructura de esta clase y un ejemplo 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. Es necesario sobreescribir los métodos virtuales LongCondition() y ShortCondition() con tus propios métodos.

Existen libros como "Estrategias de los mejores traders" (en ruso), donde se analizan diversas estrategias de trading. Aquí nos enfocaremos en los patrones de velas de reversión, confirmados por el 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 una clase derivada de CCandlePattern y añadir las funcionalidades necesarias (por ejemplo, la confirmación mediante osciladores).

A continuación, consideraremos las señales basadas en el patrón de velas de reversión "Hammer/Hanging Man", 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 su uso para la creación de señales de trading con patrones de velas.


1. Patrones de velas de reversión "Hammer" y "Hanging Man"

1.1. Hammer

El "Hammer" es una vela con un cuerpo pequeño y una larga mecha inferior, que se forma después de un movimiento de precios a la baja. Este patrón indica el final de una tendencia bajista.

El color del cuerpo de la vela no es importante, pero un hammer alcista indica un mayor potencial alcista. El cuerpo del patrón "Hammer" suele formarse cerca del mínimo de la vela anterior. Una mecha inferior más larga y una mecha superior más corta conducen a un mayor potencial de reversión.

Fig. 1. Patrón de vela 'Hammer'

Fig. 1. Patrón de vela 'Hammer'

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

//+------------------------------------------------------------------+
//| Verifica la formación del patrón de vela "Hammer"           |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternHammer()
  {
//--- Hammer
   if((MidPoint(1)<CloseAvg(2))                                 && // tendencia a la baja
      (MathMin(Open(1),Close(1)>(High(1)-(High(1)-Low(1))/3.0)) && // cuerpo en el tercio superior
      (Close(1)<Close(2)) && (Open(1)<Open(2)))                    // separación del cuerpo
      return(true);
//---
   return(false);
  }

El método CheckCandlestickPattern(CANDLE_PATTERN_HAMMER) de la clase CCandlePattern se utiliza para verificar la formación del patrón de vela "Hammer".


1.2. Hanging Man

El "Hanging Man" es una vela con un cuerpo pequeño y una larga mecha inferior, que se forma después de un movimiento de precios al alza. Este patrón indica el final de una tendencia alcista.

El color del cuerpo de la vela no es importante, pero una vela bajista indica un mayor potencial bajista. El cuerpo del patrón "Hanging Man" suele formarse cerca del máximo de la vela anterior. Una mecha inferior más larga y una mecha superior más corta conducen a un mayor potencial de reversión.

Fig. 2. Patrón de vela 'Hanging Man'

Fig. 2. Patrón de vela 'Hanging Man'

El reconocimiento del patrón "Hanging Man" se implementa en el método CheckPatternHangingMan() de la clase CCandlePattern:

//+------------------------------------------------------------------+

//| Verifica la formación del patrón de vela "Hanging Man"         |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternHangingMan()
  {
//--- Hanging Man
   if((MidPoint(1)>CloseAvg(2))                                && // tendencia al alza
      (MathMin(Open(1),Close(1)>(High(1)-(High(1)-Low(1))/3.0)) && // cuerpo en el tercio superior
      (Close(1)>Close(2)) && (Open(1)>Open(2)))                  // separación del cuerpo
      return(true);
//---
   return(false);
  }

El método CheckCandlestickPattern(CANDLE_PATTERN_HANGING_MAN) de la clase CCandlePattern se utiliza para verificar la formación del patrón de vela "Hanging Man".


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 estar por encima o por debajo de los niveles críticos correspondientes (30 o 70).

El cierre de una 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 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 'Hammer' confirmado por el indicador Estocástico

Fig. 3. Patrón 'Hammer' confirmado por el indicador Estocástico


  • int CH_HM_Stoch::LongCondition() - verifica las condiciones para abrir una posición larga (devuelve 80) y cerrar la posición corta (devuelve 40);
  • int CH_HM_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 "Hammer" 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 u 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 CH_HM_Stoch::LongCondition()
  {
   int result=0;
//--- idx puede ser usado para determinar el modo de trabajo del EA
//--- 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 barras de noticias
  int idx   =StartIndex();
//--- Verificación de condiciones para abrir posición larga
//--- formación del patrón Hammer y línea de señal<30
  if (CheckCandlestickPattern(CANDLE_PATTERN_HAMMER) && (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;
//--- devolver resultado
   return(result);
  }

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

  1. La formación del patrón "Hanging Man" 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 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 CH_HM_Stoch::ShortCondition()
  {
   int result=0;
//--- idx puede ser usado para determinar el modo de trabajo del EA
//--- 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 barras de noticias
  int idx   =StartIndex();
//--- Verificación de condiciones para abrir posición corta
//--- formación del patrón Hanging Man y línea de señal>70
  if (CheckCandlestickPattern(CANDLE_PATTERN_HANGING_MAN) && (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;
//--- devolver resultado
   return(result);
  }


2.3. Creando un Asesor Experto usando MQL5 Wizard

La clase CH_HM_Stoch no está incluida en las clases de la Biblioteca Estándar; para usarla, es necesario descargar el archivo ach_hm_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 que utilizarás.

Fig. 6. Propiedades de señal del Asesor Experto

Fig. 6. Propiedades de señal 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 Hammer/Hanging Man confirmadas por Estocástico:

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

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

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

Fig. 8. Propiedades de señal del Asesor Experto

Fig. 8. Propiedades de señal del Asesor Experto

Puedes seleccionar cualquier propiedad de trailing, pero usaremos "Sin Trailing":

Fig. 9. Propiedades de trailing del Asesor Experto

Fig. 9. Propiedades de trailing del Asesor Experto

Respecto a las propiedades de gestión de dinero, utilizaremos "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", obtendrás el código del Asesor Experto generado, ubicado en Expert_AH_HM_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 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, por lo que necesitamos tener en cuenta este hecho al establecer los valores de umbral. Debido a esto, los valores 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 están establecidos 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 backtesting de la historia

Veamos 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 el volumen fijo (Trading con Lote Fijo, 0.1), no se utiliza el algoritmo de Trailing Stop (Sin Trailing).


Fig. 11. Resultados de prueba del Asesor Experto basado en Hammer/Hanging Man + Estocástico

Fig. 11. Resultados de prueba del Asesor Experto basado en Hammer/Hanging Man + 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, se adjunta en expert_ah_hm_stoch.mq5.


Publicaciones relacionadas

Comentarios (0)