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 Bullish Harami/Bearish Harami + MFI - Asesor Experto para MetaTrader 5

Visualizaciones:
1225
Ranking:
(22)
Publicado:
2014.01.09 12:34
Actualizado:
2016.11.22 07:33
\MQL5\Include\Expert\Signal\MySignals\
acbh_bh_mfi.mqh (8.01 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 "Bullish Harami/Bearish Harami", confirmadas por el indicador Market Facilitation Index (MFI). 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 "Bullish Harami y "Bearish Harami"

1.1. Bullish Harami

El patrón Bullish Harami se forma en tendencias bajistas cuando una vela grande es seguida por una vela pequeña cuyo cuerpo está ubicado dentro del rango vertical del cuerpo mayor. Este patrón indica que la tendencia bajista puede invertirse, es una señal de que puede ser un buen momento para abrir una posición larga. La segunda vela se abre con un gap hacia arriba.

Mientras más pequeña sea la segunda vela (blanca), existen mayores probabilidades de cambio de tendencia.

Fig. 1. Patrón de cambio "Bullish Harami"

Fig. 1. Patrón de cambio "Bullish Harami"

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

//+------------------------------------------------------------------+
//| Comprueba la formación del patrón "Bullish Harami"               |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBullishHarami()
  {
//--- Bullish Harami
   if((Close(1)>Open(1))              && // la última barra completada es alcista (día blanco)
     ((Open(2)-Close(2))>AvgBody(1))  && // la barra anterior es bajista y su cuerpo es mayor que la media (negro largo)
     ((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 apertura de la vela bajista
      (MidPoint(2)<CloseAvg(2)))         // tendencia bajista
      return(true);
//---
   return(false);
  }

Se utiliza el método CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI) de la clase CCandlePattern para comprobar la formación del patrón "Bullish Harami".


1.2. Bearish Harami

El patrón de casmbio Bearish Harami se forma en tendencias alcistas cuando una vela grande es seguida por una vela más pequeña cuyo cuerpo está localizado dentro del rango vertical del cuerpo de la vela mayor. Este patrón indica que la tendencia alcista puede invertirse, es una señal de que puede ser un buen momento para abrir una posición corta. La segunda vela se abre con un gap hacia abajo.

Mientras más pequeña sea la segunda vela (negra), existen mayores probabilidades de cambio de tendencia.

Fig. 2. Patrón de velas "Bearish Harami"

Fig. 2. Patrón de velas "Bearish Harami"

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

//+------------------------------------------------------------------+
//| Comprueba la formación del patrón "Bearish Harami"               |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBearishHarami()
  {
//--- Bearish Harami
   if((Close(1)<Open(1))              && // la última barra completada es bajista (día negro
     ((Close(2)-Open(2))>AvgBody(1))  && // la vela anterior es alcista, su cuerpo es mayor que la media (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);
  }

Se utiliza el método CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI)de la clase CCandlePattern para comprobar la formación del patrón "Bearish Harami".


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

Las señales de trading para abrir una posición larga o corta deben ser confirmadas por el indicador MFI. El valor del indicador MFI debe ser menor que 40 (para posiciones largas) o mayor de 60 (para posiciones cortas).

El cierre de las opsiciones abiertas depende de los vaores del indicador MFI. Esto se puede hacer en 2 casos:

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

Fig. 3. Patrón "Bullish Harami", confirmado por el indicador MFI

Fig. 3. Patrón "Bullish Harami", confirmado por el indicador MFI


  • int CBH_BH_MFI::LongCondition() - comprueba las condiciones para abrir una posición larga (devuelve 80) y cerrar una posición corta (devuelve 40);
  • int CBH_BH_MFI::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 "Bullish Harami"tiene que ser confirmada por el indicador MFI: MFi(1)<40 (el valor del indicador MFI de la última barra completada debe ser menor de 40).

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

//+------------------------------------------------------------------+
//| 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 CBH_BH_MFI::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 Bullish Harami y MFI<40
  if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI) && (MFI(1)<40))
     result=80;
//--- comprobar las condiciones para cerrar una posición corta
//--- la línea de señal cruza los 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;
//--- 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 "Bearish Harami" tiene que ser confirmada por el indicador MFI: MFI(1)>60 (el valor del indicador MFI de la última barra completada debe ser mayor que 60).

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

//+------------------------------------------------------------------+
//| 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 CBH_BH_MFI::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
//--- formación del patrón Bearish Harami y MFI>60
  if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI) && (MFI(1)>60))
     result=80;
//--- comprobar las condiciones para cerrar una posición larga
//--- la línea de señal cruza los 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;
//--- devuelve el resultado
   return(result);
  }


2.3. Crear el Asesor Experto usando el Asistente de MQL5

La clase CBH_BH_MFI no está incluida en la librería de clases Standard Library, para utilizarla es necesario descargar el archivo abh_bh_mfi.mqh (ver adjuntos) y guardarlo en client_terminal_data\folder\MQL5\Include\Expert\Signal\MySignals. Se debe hacer lo mismo con el archivo acandlepatterns.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 Bullish Harami/Bearish Harami confirmadas por MFI":

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_ABH_BH_MFI.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.16, PeriodMFI=37, MA_period=11).

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 Bullish Harami/Bearish Harami + MFI

Fig. 11. Resultados de las pruebas del Asesor Experto, basado en Bullish Harami/Bearish Harami + MFI


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


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

MQL5 Wizard - Trade Signals Based on Bullish Harami/Bearish Harami + CCI MQL5 Wizard - Trade Signals Based on Bullish Harami/Bearish Harami + CCI

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

Asistente de MQL5 - Señales de Trading basadas en Bullish Harami/Bearish Harami + Estocástico Asistente de MQL5 - Señales de Trading basadas en Bullish Harami/Bearish Harami + Estocástico

Se analizan Señales de Trading basadas en el patrón de velas "Bullish Harami/Bearish Harami", confirmadas por el indicador Estocástico. 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 + 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 Hammer/Hanging Man + Estocástico Asistente de MQL5 - Señales de Trading basadas en Hammer/Hanging Man + Estocástico

Se analizan Señales de Trading basadas en el patrón de velas "Hammer/Hanging Man", confirmadas por el indicador Estocástico. El código del Asesor Experto basado en esta estrategia puede ser generado automáticamente usando el Asistente de MQL5.