Genera Señales de Trading en MetaTrader 5 con MQL5 Wizard y MACD

Mike 2011.01.14 21:55 11 0 0
Archivos adjuntos

MQL5 Wizard facilita la creación automática de Asesores Expertos (EAs). Si no estás familiarizado con esto, puedes leer más en nuestro artículo sobre MQL5 Wizard: Creando Asesores Expertos sin Programación.

Hoy vamos a revisar las señales de trading basadas en el cruce de las líneas del indicador MACD. Esta estrategia se denomina "Señales basadas en el cruce de las líneas principal y de señal del MACD", que puedes usar al crear un EA automáticamente en MQL5 Wizard.

La línea principal del indicador MACD se calcula como la diferencia entre la EMA rápida y la EMA lenta, mientras que la línea de señal se obtiene al suavizar la línea principal con un periodo específico.

Señales de Trading:

  • Compra: cruce ascendente entre la línea principal y la línea de señal del indicador MACD.
  • Venta: cruce descendente entre la línea principal y la línea de señal del indicador MACD.

Esta estrategia está implementada en la clase CSignalMACD de las clases de Estrategia de Trading de la Biblioteca Estándar de MQL5 (puedes encontrarla en MQL5\Include\Expert\Signal\SignalMACD.mqh).

Figura 1. Señales de trading, basadas en el cruce de las líneas principal y de señal del MACD

Figura 1. Señales de trading, basadas en el cruce de las líneas principal y de señal del MACD


Detalles de las Señales de Trading

La estrategia de trading está implementada en la clase CSignalMACD, que contiene algunos métodos protegidos para facilitar el acceso a los valores del indicador:

double  MainMACD(int ind)      // devuelve el valor de la línea principal del MACD en la barra
double  SignalMACD(int ind)    // devuelve el valor de la línea de señal del MACD en la barra
double  StateMACD(int ind)     // devuelve la diferencia entre las líneas principal y de señal del MACD
int     ExtStateMACD(int ind); // devuelve el número de cambios de signo entre las líneas principal y de señal


1. Abrir posición larga

Condiciones para abrir una posición larga:

  • ExtStateMACD(1)==1; significa que la línea principal ha cruzado hacia arriba la línea de señal del MACD
//+------------------------------------------------------------------+
//| Verifica las condiciones para abrir posición larga (compra)        |
//+------------------------------------------------------------------+
bool CSignalMACD::CheckOpenLong(double& price,double& sl,double& tp,datetime& expiration)
  {
   price=0.0;
   sl   =m_symbol.Ask()-m_stop_loss*m_adjusted_point;
   tp   =m_symbol.Ask()+m_take_profit*m_adjusted_point;
//---
   return(ExtStateMACD(1)==1);
  }


2. Cerrar posición larga

Condiciones para cerrar una posición larga:

  • ExtStateMACD(1)==1; significa que la línea principal ha cruzado hacia abajo la línea de señal del MACD
//+------------------------------------------------------------------+
//| Verifica las condiciones para cerrar posición larga                |
//+------------------------------------------------------------------+
bool CSignalMACD::CheckCloseLong(double& price)
  {
   price=0.0;
//---
   return(ExtStateMACD(1)==-1);
  }


3. Abrir posición corta

Las condiciones para abrir una posición corta son las mismas que las condiciones para cerrar una posición larga.

//+------------------------------------------------------------------+
//| Verifica las condiciones para abrir posición corta (venta)        |
//+------------------------------------------------------------------+
bool CSignalMACD::CheckOpenShort(double& price,double& sl,double& tp,datetime& expiration)
  {
   price=0.0;
   sl   =m_symbol.Bid()+m_stop_loss*m_adjusted_point;
   tp   =m_symbol.Bid()-m_take_profit*m_adjusted_point;
//---
   return(ExtStateMACD(1)==-1);
  }


4. Cerrar posición corta

Las condiciones para cerrar una posición corta son las mismas que las condiciones para abrir una posición larga.

//+------------------------------------------------------------------+
//| Verifica las condiciones para cerrar posición corta                |
//+------------------------------------------------------------------+
bool CSignalMACD::CheckCloseShort(double& price)
  {
   price=0.0;
//---
   return(ExtStateMACD(1)==1);
  }

Creando un Asesor Experto con MQL5 Wizard

Para crear un robot de trading basado en esta estrategia, debes seleccionar las propiedades de la señal como "Señales basadas en el cruce de las líneas principal y de señal del MACD" en la opción de "Creando Asesores Expertos Listos" de MQL5 Wizard:

Figura 2. Selecciona 'señales basadas en el cruce de las líneas principal y de señal del MACD' en MQL5 Wizard

Figura 2. Selecciona 'Señales basadas en el cruce de las líneas principal y de señal del MACD' en MQL5 Wizard

A continuación, debes especificar el algoritmo de trailing stop que necesites y el sistema de gestión de dinero y riesgo. El código del Asesor Experto se generará automáticamente, podrás compilarlo y probarlo en el Tester de Estrategias del terminal cliente de MetaTrader 5.


Resultados de Pruebas

Analicemos el backtesting del Asesor Experto utilizando datos históricos (EURUSD H1, período de prueba: 1.1.2010-05.01.2011, PeriodFast=12, PeriodSlow=24, PeriodSignal=9, StopLoss=20, TakeProfit=80).

Al crear el Asesor Experto, utilizamos un volumen fijo (Trading Fixed Lot, 0.1), y no se usó el algoritmo de Trailing Stop (No se usó Trailing).

Figura 3. Resultados de Pruebas del Asesor Experto con señales de trading basadas en el cruce de líneas MACD

Figura 3. Resultados de Pruebas del Asesor Experto con señales de trading basadas en el cruce de líneas MACD


Adjuntos: El archivo SignalMACD.mqh con la clase CSignalMACD (incluida en la Biblioteca Estándar de MQL5) se encuentra en la carpeta MQL5\Include\Expert\Signal. El archivo testmacd.mq5 contiene el código del Asesor Experto creado usando MQL5 Wizard.

Lista
Comentarios 0