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
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
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)); }
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 "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
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.
Comentarios 0