Mira cómo descargar robots gratis
¡Búscanos en Telegram!
Pon "Me gusta" y sigue las noticias
¿Es interesante este script?
Deje un enlace a él, ¡qué los demás también lo valoren!
¿Le ha gustado el script?
Evalúe su trabajo en el terminal MetaTrader 5
Asesores Expertos

Asistente de MQL5 - Señales de Trading basadas en Hammer/Hanging Man + Estocástico - Asesor Experto para MetaTrader 5

Visualizaciones:
1658
Ranking:
(19)
Publicado:
2014.01.09 12:47
Actualizado:
2016.11.22 07:33
\MQL5\Include\Expert\Signal\MySignals\
ach_hm_stoch.mqh (8.38 KB) ver
¿Necesita un robot o indicador basado en este código? Solicítelo en la bolsa freelance Pasar a la bolsa

El Asistente de MQL5 permite crear Asesores Expertos listos-para-usar, basados en la Librería Estándar de clases que se entrega con el terminal cliente (para más detalles, ver Creando Asesores Expertos Listos-para-Usar con el Asistente de MQL5). Su utilización permite comprobar rápidamente vuestras ideas de trading, lo único que se necesita es crear vuestra clase personalizada de señales de trading. La estructura de esta clase y los ejemplos están en el artículo Asistente de MQL5: Cómo crear un Módulo de Señales de Trading.

En términos generales la idea es la siguiente: la clase de señales de trading se deriva desde CExpertSignal, a continuación, es necesario redefinir los métodos virtuales LongCondition() y ShortCondition() con nuestros propios métodos.

En el libro "Estrategias de los mejores traders" (en ruso), se analizan muchas estrategias de trading, nosotros nos centraremos en patrones de cambio (reversal candlestick patterns), confirmados por los osciladores Estocástico, CCI, MFI y RSI.

La mejor manera de proceder es crear una clase nueva, derivada de CExpertSignal para comprobar la formación de los patrones de velas. Para confirmar las señales de trading, generadas por los patrones de velas, es suficiente con escribir la clase, derivada de CCandlePattern y añadirle las características necesarias (por ejemplo, confirmación mediante osciladores).

Aquí nos centraremos en las señales, obtenidas a partir de los patrones de cambio "Hammer/Hanging Man", confirmadas por el indicador Stochastic. El módulo de señales de trading se basa en la clase CCandlePattern, es un ejemplo simple de su uso para la generación de señales de trading mediante patrones de velas.


1. Patrones de cambio "Hammer" y "Hanging Man"

1.1. Hammer

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

El color de la vela no es importante, pero un hammer alcista indica un mayor potencial alcista. El cuerpo del patrón "Hammer" con frecuencia se forma cerca del mínimo de la vela anterior. Una mayor longitud de la mecha inferior y una mecha superior más corta indica un mayor potencial del patrón de cambio.

Fig. 1. Patrón de cambio "Hammer"

Fig. 1. Patrón de cambio "Hammer"

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

//+------------------------------------------------------------------+
//| Comprueba la formación del patrón "Hammer"        |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternHammer()
  {
//--- Hammer
   if((MidPoint(1)<CloseAvg(2))                                 && // tendencia bajista
      (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)))                    // gap del cuerpo
      return(true);
//---
   return(false);
  }

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


1.2. Hanging Man

El "Hanging Man" es una vela con un cuerpo pequeño y una mecha inferior larga, formado despues de un movimiento al alza del precio. El patrón "Hanging Man" indica el final de una tendencia alcista.

El color de la vela no es importante, pero una vela bajista indica un mayor potencial bajista. El cuerpo del patrón "Hanging Man" a menudo se forma cerca del máximo de la vela anterior. Una mayor longitud de la mecha inferior y una mecha superior más corta indica un mayor potencial del patrón de cambio.

Fig. 2. Patrón "Hanging Man"

Figura 2. Patrón "Hanging Man"

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

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

//| Comprueba la formación del patrón "Hanging Man
"            |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternHangingMan()
  {
//--- Hanging man
   if((MidPoint(1)>CloseAvg(2))                                && // tendencia alcista
      (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))))                  // gap del cuerpo
      return(true);
//---
   return(false);
  }

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


2. Señales de trading, confirmadas por el indicador Estocástico

Las señales de trading para abrir una posición larga o corta deben ser confirmadas por el oscilador Estocástico. La señal de la línea %D debe ser mayor/menor que el nivel crítico correspondiente (30 ó 70).

El cierre de la posición abierta depende de los valores del indicador %D. Esto se puede hacer en 2 casos:

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

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

Figure 3. Patrón "Hammer", confirmado por el indicador Estocástico


  • int CH_HM_Stoch::LongCondition() - comprueba las condiciones para abrir una posición larga (devuelve 80) y cerrar una posición corta (devuelve 40);
  • int CH_HM_Stoch::ShortCondition() - comprueba las condiciones para abrir una posición corta (devuelve 80) y cerrar una posición larga (devuelve 40).

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

  1. La formación de un patrón "Hammer" tiene que ser confirmada por el indicador Estocástico: StochSignal(1)<30 (el valor de la línea de señal del indicador Estocástico en la última barra completada debe ser menor que 30).

  2. La posición corta debe ser cerrada si la línea de señal del indicador Estocástico ha cruzado hacia arriba uno de los niveles 20 u 80.

//+------------------------------------------------------------------+
//| Comprueba las condiciones de entrada y salida del mercado        |
//| 1) Entrada al mercado (abrir una posición larga, resultado=80)   |
//| 2) Salida del mercado (cerrar una posición corta, resultado=40)  |
//+------------------------------------------------------------------+
int CH_HM_Stoch::LongCondition()
  {
   int result=0;
//--- idx puede ser utilizado para determinar el modo de trabajo del Asesor Experto
//--- idx=0 - en este caso el EA comprueba las condiciones de mercado en cada tick
//--- idx=1 - en este caso el EA comprueba las condiciones de mercado cuando comienza una barra nueva
   int idx   =StartIndex();
//--- comprobar las condiciones para abrir una 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;
//--- comprobar las condiciones para cerrar una posición corta
//--- la línea de señal cruza los 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 el resultado
   return(result);
  }

2.2. Abre una posición corta/Cierra una posición larga

  1. La formación de un patrón "Hanging Man" tiene que ser confirmada por el indicador Estocástico: StochSignal(1)>70 (el valor de la línea de señal del indicador Estocástico en la última barra completada debe ser mayor que 70).

  2. La posición larga debe ser cerrada si el indicador Estocástico ha cruzado hacia abajo los niveles 80 ó 20.

//+------------------------------------------------------------------+
//| Comprueba las condiciones de entrada y salida del mercado        |
//| 1) Entrada al mercado (abrir una posición corta, resultado=80)   |
//| 2) Salida del mercado (cerrar una posición larga, resultado=40)  |
//+------------------------------------------------------------------+
int CH_HM_Stoch::ShortCondition()
  {
   int result=0;
//--- idx puede ser utilizado para determinar el modo de trabajo del Asesor Experto
//--- idx=0 - en este caso el EA comprueba las condiciones de mercado en cada tick
//--- idx=1 - en este caso el EA comprueba las condiciones de mercado cuando comienza una barra nueva
   int idx   =StartIndex();
//--- comprobar las condiciones para abrir una posición corta
//--- ormación del patrón Hanging Man y línea de señal>70
  if (CheckCandlestickPattern(CANDLE_PATTERN_HANGING_MAN) && (StochSignal(1)>70))
     result=80;
//--- comprobar las condiciones para cerrar una posición larga
//--- la línea de señal cruza los 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 el resultado
   return(result);
  }


2.3. Crear el Asesor Experto usando el Asistente de MQL5

La clase CH_HM_Stoch no está incluida en la librería de clases Standard Library, para utilizarla es necesario descargar el archivo ach_hm_stoch.mqh (ver adjuntos) y guardarlo en client_terminal_data\folder\MQL5\Include\Expert\Signal\MySignals. Se debe hacer lo mismo con el archivo candlepatterns.mqh. Pueden ser utilizadas en el Asistente de MQL5 después de reiniciar el MetaEditor.

Para crear un Asesor Experto lanzamos el Asistente de MQL5:

Fig. 4. Crear el Asesor Experto usando el Asistente de MQL5

Fig. 4. Crear el Asesor Experto usando el Asistente de MQL5

Indicamos el nombre del Asesor Experto:

Fig. 5. Las propiedades generales del Asesor Experto

Fig. 5. Las propiedades generales del Asesor Experto

Después de lo cual seleccionamos los módulos de señales de trading a utilizar.

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

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

En nuestro caso utilizaremos un único módulo de señales de trading.

Añadimos el módulo de señales de trading "Señales basadas en Hammer/Hanging Man confirmadas por Estocástico":

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

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

Añadido el módulo de señales de trading:

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

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

Se puede seleccionar cualquier tipo de trailing, pero utilizaremos "No utilizar Trailing Stop":

Fig. 9. Tipo de trailing del Asesor Experto

Fig. 9. Tipo de trailing del Asesor Experto

Con respecto a la gestión del capital, utilizaremos "Trading con volumen fijo":

Fig. 10. Gestión del capital del Asesor Experto

Fig. 10. Gestión del capital del Asesor Experto

Al presionar el botón "Finalizar", obtendremos el código del Asesor Experto que hemos generado, estará contenido en Expert_AH_HM_Stoch.mq5, y localizado en la carpeta terminal_data_folder\MQL5\Experts\.

Parámetros de entrada por defecto del Asesor Experto generado:

//--- entradas de la señal principal
input int            Signal_ThresholdOpen   =10;     // Valor de la señal para abrir [0...100]
input int            Signal_ThresholdClose  =10;     // Valor de la señal para cerrar [0...100]
input double         Signal_PriceLevel      =0.0;    // Nivel del precio para ejecutar una transacció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 sustituirse por:

//--- entradas de la señal principall
input int            Signal_ThresholdOpen   =40;     // Valor de la señal para abrir [0...100]
input int            Signal_ThresholdClose  =20;     // Valor de la señal para cerrar [0...100]
input double         Signal_PriceLevel      =0.0;    // Nivel del precio para ejecutar una transacció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 The Signal_ThresholdOpen/Signal_ThresholdClose permiten especifical los niveles de umbral para la apertura y cierre de posiciones.

En el código de los métodos LongCondition() and ShortCondition() de la clase señales de trading hemos especificados valores fijos para estos umbrales:

  • Abrir posición: 80;
  • Cerrar posición: 40.

El Asesor Experto, generarado por el Asistente de MQL5 abre y cierra posiciones usando 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 es utilizado, pero sus métodos LongCondition() y ShortCondition() siempre devuelven 0.

El resultado del voto del módulo principal también es utilizado al promediar los "votos". En nuestro caso tenemos:  módulo principal + 1 módulo de señales de trading, por tanto tenemos que tener este hecho en cuenta al establecer los valores de umbral. Por esta razón 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, esto significa que el cierre de las posiciones se realizará solo cuando se cumplan las condiciones de cierre.


2.4. Resultados de backtests con datos históricos

Vamos a analizar el backtesting del Asesor Experto con datos históricos (EURUSD H1, periodo de pruebas: 2010.01.01-2011.03.04, PeriodK=47, PeriodD=9, PeriodSlow=13, MA_period=5).

Al crear el Asesor Expert utilizamos un volumen fijo (Trading con Lote Fijo, 0.1), No utilizamos ningún algoritmo de Trailing Stop (No se usa Trailing).


Fig. 11. Resultados de las pruebas del Asesor Experto, basado en Hammer/Hanging Man + Estocástico"

Fig. 11. Resultados de las pruebas del Asesor Experto, basado en Hammer/Hanging Man + Estocástico"


El mejor set de parámetros de entrada puede ser determinado utilizando el Probador de Estrategias del terminal cliente de MetaTrader 5.

El código del Asesor Experto, creado por el Asistente de MQL5 se adjunta en expert_ah_hm_stoch.mq5.


Traducción del ruso realizada por MetaQuotes Ltd
Artículo original: https://www.mql5.com/ru/code/314

Asistente de MQL5 - Señales de Trading basadas en Bullish Harami/Bearish Harami + RSI Asistente de MQL5 - Señales de Trading basadas en Bullish Harami/Bearish Harami + RSI

Se analizan Señales de Trading basadas en el patrón de velas "Bullish Harami/Bearish Harami", confirmadas por el indicador Relative Strength Index (RSI). El código del Asesor Experto basado en esta estrategia puede ser generado automáticamente usando el Asistente de MQL5.

Asistente de MQL5 - Señales de Trading basadas en Bullish Harami/Bearish Harami + MFI Asistente de MQL5 - Señales de Trading basadas en Bullish Harami/Bearish Harami + MFI

Se analizan Señales de Trading basadas en el patrón de velas "Bullish Harami/Bearish Harami", confirmadas por el indicador Market Facilitation Index (MFI). El código del Asesor Experto basado en esta estrategia puede ser generado automáticamente usando el Asistente de MQL5.

Asistente MQL5 - Basado en Señales de Trade de Hammer/Hanging Man + CCI Asistente MQL5 - Basado en Señales de Trade de Hammer/Hanging Man + CCI

Basado en Señales de Trade de patrones de velas Hammer/Hanging Man, considerando confirmación por el indicador Commodity Channel Index (CCI). El código del EA basado en esta estrategia se puede generar automáticamente usando el asistente MQL5.

Asistente MQL5 - señales de trade basadas en Hammer/Hanging Man + MFI Asistente MQL5 - señales de trade basadas en Hammer/Hanging Man + MFI

Las señales de trade basadas en patrón de vela "Hammer/Hanging Man", considerando confirmación por el indicador Market Facilitation Index (MFI) se considera. El código del EA basado en esta estrategia se puede generar automáticamente usando el asistente MQL5.