Estrategia de Trading: Señales Basadas en Tres Promedios Móviles con MQL5 Wizard

Mike 2011.01.10 19:41 12 0 0
Archivos adjuntos

MQL5 Wizard permite crear el código de Asesores Expertos de manera automática. Para más detalles, consulta Creación de Asesores Expertos Listos en MQL5 Wizard.

En este artículo, exploraremos una estrategia de tendencia basada en tres promedios móviles que llamamos "Señales basadas en tres EMA". Esta estrategia utiliza tres promedios móviles exponenciales: FastEMA, MediumEMA y SlowEMA para determinar la tendencia.

Señales de Trading:

  • Señal de compra: FastEMA > MediumEMA > SlowEMA (tendencia alcista).
  • Señal de venta: FastEMA < MediumEMA < SlowEMA (tendencia bajista).

Esta estrategia se implementa en la clase CSignal3EMA. Recuerda que el archivo signal3ema.mqh debe colocarse en terminal_data_folder/MQL5/Include/Expert/Signal/.

Figura 1. Señales de trading, basadas en tres promedios móviles

Figura 1. Señales de trading, basadas en tres promedios móviles

Señales de Trading

La estrategia de trading se implementa en la clase CSignal3EMA, que incluye métodos protegidos para simplificar el acceso a los valores de los tres promedios móviles (Rápido, Medio, Lento):

double  FastEMA(int ind)      // devuelve el valor de Fast EMA de la barra
double  MediumEMA(int ind)    // devuelve el valor de Medium EMA de la barra
double  SlowEMA(int ind)      // devuelve el valor de Slow EMA de la barra
Los valores del indicador de la barra 0 (incompleta) pueden cambiar, por lo que es necesario verificar las condiciones de trading utilizando los datos de las barras completadas.

1. Abrir posición larga

La tendencia alcista se determina con la siguiente condición: FastEMA > MediumEMA > SlowEMA:

  • FastEMA(1) > MediumEMA(1): Fast EMA es mayor que Medium EMA (última barra completada);
  • MediumEMA(2) > SlowEMA(1): Medium EMA es mayor que Slow EMA (última barra completada);
//+------------------------------------------------------------------+
//| Verifica condiciones para abrir posición larga (compra)             |
//+------------------------------------------------------------------+
bool CSignal3EMA::CheckOpenLong(double& price,double& sl,double& tp,datetime& expiration)
  {
   double medium=MediumEMA(1);
//---
   price=0.0;
   sl   =m_symbol.Ask()-m_stop_loss*m_adjusted_point;
   tp   =m_symbol.Ask()+m_take_profit*m_adjusted_point;
//--- comprobando tendencia alcista (en la última barra completada): FastEMA(1) > MediumEMA(1) > SlowEMA(1)
    return(FastEMA(1)>medium && medium>SlowEMA(1));
  }


2. Cerrar posición larga

La tendencia bajista se determina con la siguiente condición: FastEMA < MediumEMA < SlowEMA:

  • FastEMA(1) < MediumEMA(1): Fast EMA es menor que Medium EMA (última barra completada);
  • MediumEMA(2) < SlowEMA(1): Medium EMA es menor que Slow EMA (última barra completada);
//+------------------------------------------------------------------+
//| Verifica condiciones para cerrar posición larga                     |
//+------------------------------------------------------------------+
bool CSignal3EMA::CheckCloseLong(double& price)
  {
   double medium=MediumEMA(1);
//---
   price=0.0;
//--- comprobando tendencia bajista (en la última barra completada): FastEMA(1) < MediumEMA(1) < SlowEMA(1)
   return(FastEMA(1)1));
  }
Puedes mejorar el cierre de la posición larga: no es necesario esperar a que haya una tendencia bajista, puedes cerrar posiciones largas cuando estén planas, lo que se determina con las condiciones: FastEMA < MediumEMA > SlowEMA.


3. Abrir posición corta

//+------------------------------------------------------------------+
//| Verifica condiciones para abrir posición corta (venta)             |
//+------------------------------------------------------------------+
bool CSignal3EMA::CheckOpenShort(double& price,double& sl,double& tp,datetime& expiration)
  {
   double medium=MediumEMA(1);
//---
   price=0.0;
   sl   =m_symbol.Bid()+m_stop_loss*m_adjusted_point;
   tp   =m_symbol.Bid()-m_take_profit*m_adjusted_point;
//--- comprobando tendencia bajista (en la última barra completada): FastEMA(1) < MediumEMA(1) < SlowEMA(1)
   return(FastEMA(1)1));
  }

4. Cerrar posición corta

//+------------------------------------------------------------------+
//| Verifica condiciones para cerrar posición corta                    |
//+------------------------------------------------------------------+
bool CSignal3EMA::CheckCloseShort(double& price)
  {
   double medium=MediumEMA(1);
//---
   price=0.0;
//--- comprobando tendencia alcista (en la última barra completada): FastEMA(1) > MediumEMA(1) > SlowEMA(1)
   return(FastEMA(1)>medium && medium>SlowEMA(1));
  }

Puedes mejorar el cierre de la posición corta: no es necesario esperar a que haya una tendencia alcista, puedes cerrar posiciones cortas cuando estén planas, lo que se determina con las condiciones: FastEMA > MediumEMA < SlowEMA.


Creando un Asesor Experto usando MQL5 Wizard

Para crear un robot de trading basado en esta estrategia, debes elegir las propiedades de la señal como "Señales basadas en tres EMA" en la opción de MQL5 Wizard:

Figura 2. Elige

Figura 2. Elige "Señales basadas en tres EMA" en MQL5 Wizard

Luego, debes especificar el algoritmo de trailing stop que necesites y el sistema de gestión de riesgo y capital. El código del Asesor Experto se generará automáticamente, podrás compilarlo y probarlo en el Tester de Estrategias del terminal 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, FastPeriod=5, MediumPeriod=12, SlowPeriod=24, StopLoss=400, TakeProfit=900).

En la creación del Asesor Experto, utilizamos un volumen fijo (Trading con Lote Fijo, 0.1), no se utilizó el algoritmo de Trailing Stop (Sin Trailing).

Figura 3. Resultados históricos del backtesting del Asesor Experto, basado en tres EMA

Figura 3. Resultados históricos del backtesting del Asesor Experto, basado en tres EMA

Adjuntos: El archivo Signal3EMA.mqh con la clase CSignal3EMA debe ser colocado en terminal_data_folder/MQL5/Include/Expert/Signal.

El archivo threeema.mq5 contiene el código del Asesor Experto, creado utilizando MQL5 Wizard.


Lista
Comentarios 0