Mira cómo descargar robots gratis
¡Búscanos en Telegram!
Pon "Me gusta" y sigue las noticias
¿Es interesante este script?
Deje un enlace a él, ¡qué los demás también lo valoren!
¿Le ha gustado el script?
Evalúe su trabajo en el terminal MetaTrader 5
Asesores Expertos

MQL5 Wizard - Señales de trading basadas en el cruce del precio con la Media Móvil y confirmadas por ADX - Asesor Experto para MetaTrader 5

Visualizaciones:
2430
Ranking:
(30)
Publicado:
2014.01.14 12:11
Actualizado:
2016.11.22 07:33
¿Necesita un robot o indicador basado en este código? Solicítelo en la bolsa freelance Pasar a la bolsa

MQL5 Wizard permite crear el código de Asesores Expertos automáticamente. Vea Crear Asesores Expertos listos para usar con el MQL5 Wizard para más detalles.

Aquí vamos a considerar la estrategia basada en el cruce del precio con el indicador de Media Móvil y confirmando con el indicador ADX. La estrategia llamada "Signals based on price crossover with MA confirmed by ADX" (al crear el Asesor Experto automáticamente con el MQL5 Wizard).

Señales de trading:

  • Compra: precio de cierre de la última barra completa es mayor que la media móvil, la media móvil aumenta en la última barra completa y en la actual.
  • Venta: precio de cierre de la última barra completa es menor que la media móvil, la media móvil disminuye en la última barra completa y en la actual.
  • Para filtrar una señal falsa, se comprueba la fuerza de la tendencia (ADX>ADXmin) y la dirección de la tendencia utilizando los Indicadores de Movimiento Direccional (DI+ y DI-).

Esta estrategia se implementa en la clase CSignalADX_MA.

Figura 1. Señales de trading basadas en el cruce del precio con la Media Móvil y confirmadas por ADX

Figura 1. Señales de trading basadas en el cruce del precio con la Media Móvil y confirmadas por ADX

Señales de Trade

La estrategia de trading se implementa en la clase CSignalADX_MA, contiene algunos métodos protected para simplificar el acceso a los valores de indicadores y precios:

double   PlusADX(int ind)     // devuelve el valor de la linea DI+ de la barra
double   MainADX(int ind)     // devuelve el valor de la linea principal de la barra
double   MinusADX(int ind)    // devuelve el valor de la linea DI- de la barra
double   EMA(int ind)         // devuelve el valor de la media móvil de la barra
double   Close(int ind)       // devuelve el valor del precio de cierre de la barra
double   StateADX(int ind)    // devuelve la diferencia entre las lineas DI+ y DI-
double   StateEMA(int ind)    // devuelve el valor positivo si aumenta la EMA y negativo si disminuye
double   StateClose(int ind)  // devuelve la diferencia entre el precio de cierre y la media móvil
La característica de esta implementación es una comprobación adicional de la presencia de tendencia (usando el Índice de Movimiento Direccional Medio - ADX). Permite filtrar las señales falsas y comprobar las condiciones de trading con los valores de la barra actual (sin completar).


1. Apertura de una posición larga

Condiciones para abrir posición larga:

  1. StateEMA(0)>0 y StateEMA(1)>0: media móvil aumenta en la barra actual y en la última completada;
  2. StateClose(1)>0: el precio de cierre de la última barra completada es mayor que la media móvil;
  3. MainADX(0)>m_minimum_ADX: el valor ADX de la barra actual es mayor que el valor mínimo especificado (para la verificación de la presencia de tendencia);
  4. StateADX(0)>0: El DI+ es mayor que el DI- en la barra actual.
//+------------------------------------------------------------------+
//| comprueba condiciones para abrir posición larga (compra)         |
//+------------------------------------------------------------------+
bool CSignalADX_MA::CheckOpenLong(double& price,double& sl,double& tp,datetime& expiration)
  {
//--- condición 1: media móvil aumenta en la barra actual y en la última completada 
   bool Buy_Condition_1=(StateEMA(0)>0 && StateEMA(1)>0);
//--- condición 2: el precio de cierre de la última barra completada es mayor que la media móvil 
   bool Buy_Condition_2=(StateClose(1)>0);
//--- condición 3: el valor de ADX de la barra actual es mayor que el valor mínimo especificado (umbral de tendencia) 
   bool Buy_Condition_3=(MainADX(0)>m_minimum_ADX);
//--- condición 4: El DI+ es mayor que el DI- en la barra actual
    bool Buy_Condition_4=(StateADX(0)>0);
//---
   price=0.0;
   sl   =m_symbol.Ask()-m_stop_loss*m_adjusted_point;
   tp   =m_symbol.Ask()+m_take_profit*m_adjusted_point;
//--- verifica todas las condiciones
   return(Buy_Condition_1 && Buy_Condition_2 && Buy_Condition_3 && Buy_Condition_4);
  }


2. Cierre de posición larga

Condiciones para cerrar posición larga:

  1. StateEMA(0)<0 y StateEMA(1)<0: media móvil disminuye en la barra actual y en la última completada;
  2. StateClose(1)<0: el precio de cierre de la barra completa es menor que la media móvil;
  3. MainADX(0)>m_minimum_ADX: el valor ADX de la barra actual es mayor que el valor mínimo especificado (para la verificación de la presencia de tendencia);
  4. StateADX(0)<0: El DI- es mayor que el DI+ en la barra actual.
//+------------------------------------------------------------------+
//| comprueba condiciones para cerrar posición larga                 |
//+------------------------------------------------------------------+
bool CSignalADX_MA::CheckCloseLong(double& price)
  {
//--- condición 1:  media móvil disminuye en la barra actual y en la última completada 
   bool Sell_Condition_1=(StateEMA(0)<0 && StateEMA(1)<0);
//--- condición 2: el precio de cierre de la barra completa es menor que la media móvil 
   bool Sell_Condition_2=(StateClose(1)<0);
//--- condición 3: el valor de ADX de la barra actual es mayor que el valor mínimo especificado (umbral de tendencia) 
   bool Sell_Condition_3=(MainADX(0)>m_minimum_ADX);
//--- condición 4: El DI- es mayor que el DI+ en la barra actual
   bool Sell_Condition_4=(StateADX(0)<0);
//---
   price=0.0;
//--- verifica todas las condiciones
   return(Sell_Condition_1 && Sell_Condition_2 && Sell_Condition_3 && Sell_Condition_4);
  }


3. Apertura de posición corta

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

//+------------------------------------------------------------------+
//|comprueba condiciones para abrir posición corta (venta)           |
//+------------------------------------------------------------------+
bool CSignalADX_MA::CheckOpenShort(double& price,double& sl,double& tp,datetime& expiration)
  {
//--- condición 1:  media móvil disminuye en la barra actual y en la última completada
   bool Sell_Condition_1=(StateEMA(0)<0 && StateEMA(1)<0);
//--- condición 2: el precio de cierre de la barra completa es menor que la media móvil
   bool Sell_Condition_2=(StateClose(1)<0);
//--- condición 3: el valor de ADX de la barra actual es mayor que el valor mínimo especificado (umbral de tendencia)
   bool Sell_Condition_3=(MainADX(0)>m_minimum_ADX);
//--- condición 4: El DI- es mayor que el DI+ en la barra actual
   bool Sell_Condition_4=(StateADX(0)<0);
//---
   price=0.0;
   sl   =m_symbol.Bid()+m_stop_loss*m_adjusted_point;
   tp   =m_symbol.Bid()-m_take_profit*m_adjusted_point;
//--- verifica todas las condiciones
   return(Sell_Condition_1 && Sell_Condition_2 && Sell_Condition_3 && Sell_Condition_4);
  }


4. Cierre de posición corta

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

//+------------------------------------------------------------------+
//| Comprueba condiciones para cerrar posición corta                 |
//+------------------------------------------------------------------+
bool CSignalADX_MA::CheckCloseShort(double& price)
  {
//--- condición 1: media móvil aumenta en la barra actual y en la última completada
   bool Buy_Condition_1=(StateEMA(0)>0 && StateEMA(1)>0);
//--- condición 2: el precio de cierre de la última barra completada es mayor que la media móvil 
   bool Buy_Condition_2=(StateClose(1)>0);
//--- condición 3: el valor de ADX de la barra actual es mayor que el valor mínimo especificado (umbral de tendencia)
   bool Buy_Condition_3=(MainADX(0)>m_minimum_ADX);
//--- condición 4: El DI+ es mayor que el DI- en la barra actual
   bool Buy_Condition_4=(StateADX(0)>0);
//---
   price=0.0;
//--- verifica todas las condiciones
  return(Buy_Condition_1 && Buy_Condition_2 && Buy_Condition_3 && Buy_Condition_4);
  }

Creando el Asesor Experto con el MQL5 Wizard

Para crear un robot de trading basado en esta estrategia debe seleccionar "Signals based on price crossover with MA confirmed by ADX" para las propiedades de señal del Expert Advisor en la opción "Expert Advisor (generate)" de MQL5 Wizard:

Figura 2. Seleccionar "Signals based on price crossover with MA confirmed by ADX" en MQL5 Wizard

Figura 2. Seleccionar "Signals based on price crossover with MA confirmed by ADX" en MQL5 Wizard

Lo próximo que debe especificar es el algoritmo necesario para trailing stop y el sistema de gestión de capital. El código del Asesor Experto será creado automáticamente, puede compilarlo y verificarlo en el Probador de Estrategias del terminal de cliente MetaTrader 5.


Resultados de las pruebas

Vamos a considerar una simulación del asesor experto con datos históricos (EURUSD H1, periodo personalizado: 2010.01.01-2011.01.05,  PeriodADX=33, MinimumADX=22, PeriodMA=39, StopLoss=400, TakeProfit=900).

En la creación del Asesor Experto se seleccionó una gestión de capital con volumen fijo de 0.1 lotes (Trading with fixed trade volume, 0.1), y sin algoritmo de Trailing Stop (Trailing Stop not used).

Figura 3. Resultados de la simulación histórica del Asesor Experto, basada en el cruce del precio con la MA (Media Móvil) y confirmada por ADX

Figura 3. Resultados de la simulación histórica del Asesor Experto, basada en el cruce del precio con la MA (Media Móvil) y confirmada por ADX


Adjuntos: El fichero SignalADX-MA.mqh con la clase CSignalADX_MA se encuentra en la carpeta terminal_data_folder\MQL5\Include\Expert\Signal.

El fichero ma_crossover_adx.mq5 contiene el código, del Asesor Experto, creado con MQL5 Wizard.

Traducción del ruso realizada por MetaQuotes Ltd
Artículo original: https://www.mql5.com/ru/code/258

MQL5 Wizard - Señales de trading basadas en tres medias móviles (3EMA) MQL5 Wizard - Señales de trading basadas en tres medias móviles (3EMA)

Vamos a examinar las señales de trading basadas en tres medias móviles. El código del Asesor Experto basado en esta estrategia se puede generar automáticamente mediante el Asistente para MQL5 (MQL5 Wizard).

MQL5 Wizard - Señales de trading basadas en el cruce del precio con el Indicador de Media Móvil MQL5 Wizard - Señales de trading basadas en el cruce del precio con el Indicador de Media Móvil

Vamos a examinar las señales de trading basadas en el cruce del precio con el indicador de media móvil (CSignalMA de la biblioteca estándar MQL5). El código del Asesor Experto basado en esta estrategia se puede generar automáticamente mediante el Asistente para MQL5 (MQL5 Wizard).

MQL5 Wizard - Señales de trading basadas en el cruce de dos medias móviles exponenciales suavizadas MQL5 Wizard - Señales de trading basadas en el cruce de dos medias móviles exponenciales suavizadas

Vamos a examinar las señales de trading basadas en el cruce de dos medias móviles exponenciales suavizadas. El código del Asesor Experto basado en esta estrategia se puede generar automáticamente mediante el Asistente para MQL5 (MQL5 Wizard).

MQL5 Wizard - Señales de trading basadas en el cruce de las lineas principal y de señal del indicador MACD MQL5 Wizard - Señales de trading basadas en el cruce de las lineas principal y de señal del indicador MACD

Vamos a examinar las señales de trading basadas en el cruce de las lineas principal y de señal del indicador MACD (CSignalMACD de la biblioteca estándar MQL5). El código del Asesor Experto basado en esta estrategia se puede generar automáticamente mediante el Asistente para MQL5 (MQL5 Wizard).