Inicio Trading Sistemático Publicación

Crea tu Asesor Experto en MetaTrader 5: Señales de Trading con 3 Cuervos Negros y 3 Soldados Blancos + Estocástico

Archivos adjuntos
283.zip (6.6 KB, Descargar 0 veces)

El MQL5 Wizard es una herramienta potente que te permite crear Asesores Expertos (EAs) listos para usar, basados en las clases de la biblioteca estándar que vienen con el terminal cliente (puedes ver más detalles en Crear Asesores Expertos en MQL5 Wizard). Te permite validar tus ideas de trading de manera rápida, solo necesitas crear tu propia clase de señales de trading. La estructura de esta clase y un ejemplo pueden ser encontrados 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. Luego, es necesario sobreescribir los métodos virtuales LongCondition() y ShortCondition() con tus propios métodos.

Se ha escrito un libro titulado "Estrategias de los mejores traders" (en ruso), donde se consideran muchas estrategias de trading. En este artículo, 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 confirmar las señales de trading generadas por los patrones de velas, es suficiente con escribir la clase, derivada de CCandlePattern, y agregar las características necesarias (por ejemplo, la confirmación por osciladores).

En este artículo, consideraremos las señales basadas en el patrón de velas de reversión "3 Cuervos Negros/3 Soldados Blancos", confirmadas por el Estocástico. El módulo de señales de trading se basa en la clase CCandlePattern, que es un ejemplo simple de su uso para la creación de señales de trading con patrones de velas.


1. Patrones de velas de reversión: "3 Cuervos Negros" y "3 Soldados Blancos"

1.1. 3 Cuervos Negros

Un patrón de velas bajista utilizado para predecir la reversión del actual uptrend. Este patrón consiste en tres velas largas consecutivas que han cerrado más bajo que el día anterior, con cada sesión abriendo dentro del cuerpo de la vela anterior.

Figura 1. Patrón de velas '3 Cuervos Negros'

Figura 1. Patrón de velas '3 Cuervos Negros'

El reconocimiento del patrón "3 Cuervos Negros" se implementa en el método CheckPatternThreeBlackCrows de la clase CCandlePattern:

//+------------------------------------------------------------------+
//| Verifica la formación del patrón de velas "3 Cuervos Negros"        |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternThreeBlackCrows()
  {
//--- 3 Cuervos Negros 
   if((Open(3)-Close(3)>AvgBody(1)) && // (vela negra larga)
      (Open(2)-Close(2)>AvgBody(1)) &&
      (Open(1)-Close(1)>AvgBody(1)) &&
      (MidPoint(2)<MidPoint(3))     && // (puntos medios más bajos)
      (MidPoint(1)<MidPoint(2)))       
      return(true);
//---
   return(false);
  }

El método CheckCandlestickPattern(CANDLE_PATTERN_THREE_BLACK_CROWS) de la clase CCandlePattern se utiliza para comprobar la formación del patrón de velas "3 Cuervos Negros".


1.2. Patrón de velas 3 Soldados Blancos

Un patrón de velas alcista que se utiliza para predecir la reversión del actual downtrend. Este patrón consiste en tres velas largas consecutivas que han cerrado más alto que el día anterior, con cada sesión abriendo dentro del cuerpo de la vela anterior.

El patrón es válido mientras que la vela del segundo día abra en la mitad superior del rango del primer día. Al final del segundo día, debería cerrar cerca de su máximo, dejando una sombra superior muy pequeña o inexistente. El mismo patrón se repite en el tercer día.

Fig 2. Patrón de velas '3 Soldados Blancos'

Figura 2. Patrón de velas '3 Soldados Blancos'

Aquí está el método para reconocer el patrón "3 Soldados Blancos":

//+------------------------------------------------------------------+
//| Verifica la formación del patrón de velas "3 Soldados Blancos"   |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternThreeWhiteSoldiers()
  {
   //--- 3 Soldados Blancos
   if((Close(3)-Open(3)>AvgBody(1)) && // vela blanca larga
      (Close(2)-Open(2)>AvgBody(1)) &&
      (Close(1)-Open(1)>AvgBody(1)) &&
      (MidPoint(2)>MidPoint(3))     && // puntos medios más altos
      (MidPoint(1)>MidPoint(2)))
      return(true);
//---
   return(false);
  }

El método CheckCandlestickPattern(CANDLE_PATTERN_THREE_WHITE_SOLDIERS) de la clase CCandlePattern se utiliza para comprobar la formación del patrón de velas "3 Soldados Blancos".


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/menor que el nivel crítico correspondiente (30 o 70).

El cierre de la 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 de reversión no está confirmada (cuando la línea %D alcanza los siguientes niveles: 20 para posición larga y 80 para posición corta)

Figura 3. Patrón '3 Soldados Blancos' confirmado por el indicador Estocástico

Fig. 3. Patrón '3 Soldados Blancos' 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 CBC_WS_Stoch::LongCondition() - verifica las condiciones para abrir una posición larga (devuelve 80) y cerrar la posición corta (devuelve 40);
  • int CBC_WS_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 "Tres Soldados Blancos" 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 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 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 CBC_WS_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 verifica las condiciones de trading en cada tick
//--- idx=1 - en este caso el EA verifica las condiciones de trading solo en las barras de noticias
  int idx   =StartIndex();
//--- verificando las condiciones para abrir posición larga
//--- formación del patrón 3 Soldados Blancos y línea de señal<30
  if (CheckCandlestickPattern(CANDLE_PATTERN_THREE_WHITE_SOLDIERS) && (StochSignal(1)<30))
     result=80;
//--- verificando las 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 "Tres Cuervos Negros" 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 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 CBC_WS_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 verifica las condiciones de trading en cada tick
//--- idx=1 - en este caso el EA verifica las condiciones de trading solo en las barras de noticias
  int idx   =StartIndex();
//--- verificando las condiciones para abrir posición corta
//--- formación del patrón 3 Cuervos Negros y línea de señal>70
  if (CheckCandlestickPattern(CANDLE_PATTERN_THREE_BLACK_CROWS) && (StochSignal(1)>70))
     result=80;
//--- verificando las 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 utilizando MQL5 Wizard

La clase CBC_WS_Stoch no está incluida en las clases de la Biblioteca Estándar, para utilizarla, es necesario descargar el archivo acbc_ws_stoch.mqh (ver adjuntos) y guardarlo en la carpeta terminal_cliente_datos\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 un Asesor Experto usando MQL5 Wizard

Fig. 4. Creando un Asesor Experto usando MQL5 Wizard

Especificamos el nombre del Asesor Experto:

Fig. 5. Propiedades generales del Asesor Experto

Fig. 5. Propiedades generales del Asesor Experto

Después, necesitamos seleccionar los módulos de señales de trading que utilizaremos.

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

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

En nuestro caso, solo usamos un módulo de señales de trading.

Agregando el módulo de Señales basadas en 3 Cuervos Negros/3 Soldados Blancos 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 agregado:

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 nosotros 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 del dinero, utilizaremos "Trading con volumen fijo":

Fig. 10. Propiedades de gestión del dinero del Asesor Experto

Fig. 10. Propiedades de gestión del dinero del Asesor Experto

Al presionar el botón "Finalizar", obtendremos el código del Asesor Experto generado, ubicado en Expert_ABC_WS_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 una operació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 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 una operació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 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 de los umbrales:

  • 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 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 configurar los valores de umbral. Debido a esto, los 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 histórico

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

En la creación del Asesor Experto usamos un volumen fijo (Trading Fixed Lot, 0.1), no se utiliza el algoritmo de Trailing Stop (Trailing no utilizado).


Fig. 11. Resultados de prueba del Asesor Experto basado en 3 Cuervos Negros/3 Soldados Blancos + Estocástico

Fig. 11. Resultados de prueba del Asesor Experto basado en 3 Cuervos Negros/3 Soldados Blancos + 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_abc_ws_stoch.mq5.


Publicaciones relacionadas

Comentarios (0)