Inicio Trading Sistemático Publicación

Creando Asesores Expertos en MetaTrader 5 con MQL5 Wizard y Señales de Mercado

Archivos adjuntos
319.zip (6.47 KB, Descargar 0 veces)

El MQL5 Wizard es una herramienta genial que permite crear Asesores Expertos listos para operar basándose en la librería estándar que viene con el terminal cliente (puedes ver más en Creando Asesores Expertos en MQL5 Wizard). Con esta herramienta, puedes verificar rápidamente tus ideas de trading; solo necesitas crear tu propia clase de señales de trading. La estructura de esta clase y un ejemplo se pueden 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 llamado "Estrategias de los Mejores Traders" (en ruso) que analiza varias estrategias de trading. Aquí nos enfocaremos en patrones de velas de inversión, confirmados por Estocástico, CCI, MFI y RSI.

Lo mejor es crear una clase separada, derivada de CExpertSignal, para comprobar la formación de patrones de velas. Para confirmar las señales de trading generadas por los patrones de velas, es suficiente escribir la clase, derivada de CCandlePattern y agregar las características necesarias (por ejemplo, la confirmación por osciladores).

A continuación, analizaremos las señales basadas en los patrones de velas de inversión "Bullish/Bearish Meeting Lines", confirmados por el indicador CCI (Índice de Canal de Materias Primas). El módulo de señales de trading se basa en la clase CCandlePattern, que es un ejemplo sencillo de cómo usarla para crear señales de trading con patrones de velas.

1. Patrones de Velas de Inversión "Meeting Lines"

1.1. Patrones "Bullish Meeting Lines"

El patrón consta de dos velas (bajista y alcista) con precios de cierre iguales (o muy cercanos). El cuerpo de ambas velas debe ser mayor que la longitud promedio del cuerpo.

El patrón "Bullish Meeting Lines" indica la inversión de una tendencia bajista.

Fig. 1. Patrón 'Bullish Meeting Lines'

Fig. 1. Patrón 'Bullish Meeting Lines'

El reconocimiento del patrón "Bullish Meeting Lines" se lleva a cabo en el método CheckPatternBullishMeetingLines() de la clase CCandlePattern:

//+--------------------------------------------------------------------+
//| Verifica la formación del patrón de velas "Bullish Meeting Lines"  |             
//+--------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBullishMeetingLines()  
  {  
//--- Bullish Meeting Lines  
   if((Open(2)-Close(2)>AvgBody(1))  
                 && // vela negra larga  
     ((Close(1)-Open(1)>AvgBody(1))  
                 && // vela blanca larga  
      (MathAbs(Close(1)-Close(2))<0.1*AvgBody(1)))  
      return(true);  
//---  
   return(false);  
  }

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


1.2. Patrones "Bearish Meeting Lines"

El patrón consta de dos velas (alcista y bajista) con precios de cierre iguales (o muy cercanos). El cuerpo de ambas velas debe ser mayor que la longitud promedio del cuerpo.

El patrón "Bearish Meeting Lines" indica la inversión de una tendencia alcista.

Fig. 2. Patrón 'Bearish Meeting Lines'

Fig. 2. Patrón 'Bearish Meeting Lines'

El reconocimiento del patrón "Bearish Meeting Lines" se realiza en el método CheckPatternBearishMeetingLines() de la clase CCandlePattern:

//+--------------------------------------------------------------------+
//| Verifica la formación del patrón de velas "Bearish Meeting Lines" |             
//+--------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBearishMeetingLines()  
  {  
//--- Bearish Meeting Lines  
   if((Close(2)-Open(2)>AvgBody(1))  
                 && // vela blanca larga  
     ((Open(1)-Close(1)>AvgBody(1))  
                 && // vela negra larga  
      (MathAbs(Close(1)-Close(2))<0.1*AvgBody(1)))  
      return(true);  
//---  
   return(false);  
  }

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


2. Señales de Trading, Confirmadas por el Indicador CCI

Las señales de trading para abrir posiciones largas o cortas deben ser confirmadas por el indicador CCI. El valor de CCI debe ser mayor o menor que los niveles críticos (-50 para posiciones largas y 50 para posiciones cortas).

El cierre de las posiciones abiertas depende de los valores de CCI. Esto puede hacerse en 2 casos:

  • si la línea de CCI ha alcanzado el nivel crítico opuesto (80 para posiciones largas y -80 para posiciones cortas)
  • si la señal de reversión no está confirmada (cuando CCI alcanza los siguientes niveles: -80 para posiciones largas y 80 para posiciones cortas)

Fig. 3. Patrón 'Bullish Meeting Lines', confirmado por el indicador CCI

Figura 3. Patrón 'Bullish Meeting Lines', confirmado por el indicador CCI

  • int CML_CCI::LongCondition() - verifica las condiciones para abrir una posición larga (devuelve 80) y cerrar la posición corta (devuelve 40);
  • int CML_CCI::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 Meeting Lines" debe ser confirmada por el indicador CCI: CCI(1)<-50 (el valor del CCI de la última barra completada debe ser menor que -50).

  2. La posición corta debe cerrarse si el indicador CCI ha cruzado hacia arriba el nivel crítico -80 o cruzado hacia abajo el nivel crítico 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 CML_CCI::LongCondition()  
  {  
   int result=0;  
//--- idx puede usarse para determinar el modo de trabajo del Asesor Experto  
//--- idx=0 - en este caso el EA verifica condiciones comerciales en cada tick  
//--- idx=1 - en este caso el EA verifica condiciones comerciales solo en las barras de noticias  
   int idx   =StartIndex();  
//--- verificando condiciones para abrir posición larga  
//--- formación del patrón Bullish Meeting Lines y CCI<-50  
   if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_MEETING_LINES) && (CCI(1)<-50))  
     result=80;  
//--- verificando condiciones para cerrar posición corta  
//--- cruce de línea de señal de los niveles de sobrecompra/sobreventa (hacia abajo -80, hacia abajo -80)  
   if(((CCI(1)>-80) && (CCI(2)<-80)) || ((CCI(1)<80) && (CCI(2)>80)))  
     result=40;  
//--- devolver el resultado  
   return(result);  
  }

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

  1. La formación del patrón "Bearish Meeting Lines" debe ser confirmada por el indicador CCI: CCI(1)>50 (el valor del indicador CCI de la última barra completada debe ser mayor que 50).

  2. La posición larga debe cerrarse si el indicador CCI ha cruzado hacia abajo los niveles -80 o 80.

//+------------------------------------------------------------------+
//| 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 CML_CCI::ShortCondition()  
  {  
   int result=0;  
//--- idx puede usarse para determinar el modo de trabajo del Asesor Experto  
//--- idx=0 - en este caso el EA verifica condiciones comerciales en cada tick  
//--- idx=1 - en este caso el EA verifica condiciones comerciales solo en las barras de noticias  
   int idx   =StartIndex();  
//--- verificando condiciones para abrir posición corta  
//--- formación del patrón Bearish Meeting Lines y CCI>50  
   if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_MEETING_LINES) && (CCI(1)>50))  
     result=80;  
//--- verificando condiciones para cerrar posición larga  
//--- cruce de línea de señal de los niveles de sobrecompra/sobreventa (hacia abajo -80, hacia arriba 80)  
   if(((CCI(1)<80) && (CCI(2)>80)) || ((CCI(1)<-80) && (CCI(2)>-80)))  
     result=40;  
//--- devolver el resultado  
   return(result);  
  }


2.3. Creando un Asesor Experto usando MQL5 Wizard

La clase CML_CCI no está incluida en las clases de la Librería Estándar, para usarla es necesario descargar el archivo acml_cci.mqh (consulta los adjuntos) y guardarlo en la carpeta client_terminal_data\MQL5\Include\Expert\Signal\MySignals. Lo mismo debe hacerse con el archivo candlepatterns.mqh. Puedes utilizarlo 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

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 utilizadas.

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

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

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

Agregamos el módulo de Señales basadas en Bullish/Bearish Meeting Lines confirmadas por CCI:

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 utilizaremos "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 de operación 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_AML_CCI.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 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, 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 las posiciones solo se realizará cuando las condiciones de cierre sean verdaderas.


2.4. Resultados de prueba de retroceso

Analicemos la prueba de retroceso del Asesor Experto en datos históricos (EURUSD H1, período de prueba: 2000.01.01-2011.03.16, PeriodCCI=18, MA_period=3).

En la creación del Asesor Experto utilizamos el 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 Bullish/Bearish Meeting Lines + CCI

Fig. 11. Resultados de prueba del Asesor Experto, basado en Bullish/Bearish Meeting Lines + CCI


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

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


Publicaciones relacionadas

Comentarios (0)