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 de dos EMA con filtro de tiempo intradía - Asesor Experto para MetaTrader 5

Visualizaciones:
3699
Ranking:
(39)
Publicado:
2014.01.14 12:27
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.

Las señales de trading de la estrategia, basada en dos medias móviles, son examinadas en MQL5 Wizard - Señales de trading basadas en el cruce de dos medias móviles exponenciales suavizadas. Las medias móviles son eficaces con una tendencia, en otros casos proporcionan muchas señales falsas. Una de las maneras de mejorar la estrategia es el uso de los filtros de tiempo (por ejemplo, abrir nuevas posiciones en la sesión europea de FOREX).

Aquí vamos a considerar la estrategia basada en el cruce de dos medias móviles exponenciales suavizadas (EMA rápida y EMA lenta) con filtro de tiempo intradía. La estrategia llamada "Signals based on crossover of two EMA with intraday time filter" (al crear el Asesor Experto automáticamente con el MQL5 Wizard).

Señales de trading:

  • Apertura de posición larga: la EMA rápida cruza de manera ascendente la EMA lenta y no se cumplen las condiciones del filtro de tiempo intradía.
  • Apertura de posición corta: la EMA rápida cruza de manera descendente la EMA lenta y no se cumplen las condiciones del filtro de tiempo intradía.

Esta estrategia se implementa en la clase CSignal2EMA_ITF.

La filtración de las señales, en base a periodos de tiempo específicos se implementa en la clase CSignalITF. Como ejemplo de su uso, vamos a examinar la clase CSignal2EMA_ITF (que contiene un objeto de la clase CSignalITF).

El sistema de trading se basa en órdenes pendientes, los niveles de precios se calculan en función de los valores de media móvil añadiendo unidades de ATR (Average True Range).

Figura 1. Señales de trading basadas en el cruce de dos EMA con filtro de tiempo intradía

Figura 1. Señales de trading basadas en el cruce de dos EMA con filtro de tiempo intradía

Señales de Trade

La estrategia de trading se implementa en la clase CSignal2EMA_ITF, contiene algunos métodos protected para simplificar el acceso a los valores del indicador:

 double  FastEMA(int ind)      // retorna el valor de la EMA rápida de la barra
 double  SlowEMA(int ind)      // retorna el valor de la EMA lenta de la barra
 double  StateFastEMA(int ind) // retorna el valor positivo/negativo del incremento/decremento de la EMA rápida
 double  StateSlowEMA(int ind) // retorna el valor positivo/negativo del incremento/decremento de la EMA lenta
 double  StateEMA(int ind)     // retorna la diferencia entre la EMA rápida y la lenta
 double  ATR(int ind)          // retorna el valor del ATR de la barra


La característica de este sistema es la siguiente: el trading depende del parámetro de entrada Limit. Dependiendo de su signo, hay diferentes casos:

  1. Limite>0. Abrirá posición aprovechando un pullback en caso de falsa ruptura de la media móvil con un precio mejor que el precio de mercado (las ordenes de compra (Buy Limit) y Venta (Sell Limit) se colocarán en función de las señales de trading)
  2. Límite<0. Abrirá posición en la dirección de la tendencia del precio (las ordenes de compra (Buy Stop) y venta (Sell Stop) se colocarán en función de las señales de trading).
  3. Límite=0. En este caso, abrirá posición con el precio de mercado.


1. Apertura de una posición larga

Comprueba las condiciones para abrir una posición larga: si la diferencia entre la EMA rápida y la lenta en la última barra completa ha cambiado de signo de "-" a "+" (StateEMA(1)>0 && StateEMA(2)<0).

A continuación, comprueba las condiciones del filtro de tiempo intradía llamando al método CheckOpenLong() de la clase CSignalITF. Si se permite el trading, se calculará el nivel del precio base (el valor de la media móvil) y el rango del valor ATR de la última barra completada.

Según el signo del parámetro de entrada Limit se colocará la orden pendiente de compra. Los niveles del precio de la orden, Take Profit y Stop Loss se calculan en relación con el nivel de precio base (en unidades de ATR). El tiempo de caducidad de la orden se define (en barras) en el parámetro de entrada expiration.

//+------------------------------------------------------------------+
//| Comprueba condiciones de apertura de posición larga (compra)     |
//+------------------------------------------------------------------+
bool CSignal2EMA_ITF::CheckOpenLong(double& price,double& sl,double& tp,datetime& expiration)
  {
   if(!(StateEMA(1)>0 && StateEMA(2)<0))                    return(false);
   if(!m_time_filter.CheckOpenLong(price,sl,tp,expiration)) return(false);
//---
   double ema=SlowEMA(1);
   double atr=ATR(1);
   double spread=m_symbol.Ask()-m_symbol.Bid();
//---
   price=m_symbol.NormalizePrice(ema-m_limit*atr+spread);
   sl   =m_symbol.NormalizePrice(price+m_stop_loss*atr);
   tp   =m_symbol.NormalizePrice(price-m_take_profit*atr);
   expiration+=m_expiration*PeriodSeconds(m_period);
//---
   return(true);
  }

2. Cierre de posición larga

En nuestro caso, la función que comprueba las condiciones para cerrar posiciones largas siempre devuelve false, es decir, se asume que la posición larga será cerrada por Take Profit o Stop Loss. En caso necesario, usted puede escribir su propio código con la implementación de este método.

//+------------------------------------------------------------------+
//| Comprueba condiciones de cierre de posición larga                |
//+------------------------------------------------------------------+
bool CSignal2EMA_ITF::CheckCloseLong(double& price)
  {
   return(false);
  }


3. Apertura de posición corta

Comprueba las condiciones para abrir una posición corta: si la diferencia entre la EMA rápida y la lenta en la última barra completa ha cambiado de signo de "+" a "-" (StateEMA(1)<0 && StateEMA(2)>0).

A continuación, comprueba las condiciones del filtro de tiempo intradía llamando al método CheckOpenLong() de la clase CSignalITF. Si se permite el trading, se calculará el nivel del precio base (el valor de la media móvil) y el rango del valor ATR de la última barra completada.

Según el signo del parámetro de entrada Limit se colocará la orden pendiente de venta. Los niveles del precio de la orden, Take Profit y Stop Loss se calculan en relación con el nivel de precio base (en unidades de ATR). El tiempo de caducidad de la orden se define (en barras) en el parámetro de entrada expiration.

//+------------------------------------------------------------------+
//| Comprueba condiciones de apertura de posición corta (venta)      |
//+------------------------------------------------------------------+
bool CSignal2EMA_ITF::CheckOpenShort(double& price,double& sl,double& tp,datetime& expiration)
  {
   if(!(StateEMA(1)<0 && StateEMA(2)>0))                     return(false);
   if(!m_time_filter.CheckOpenShort(price,sl,tp,expiration)) return(false);
//---
   double ema=SlowEMA(1);
   double atr=ATR(1);
//---
   price      =m_symbol.NormalizePrice(ema+m_limit*atr);
   sl         =m_symbol.NormalizePrice(price+m_stop_loss*atr);
   tp         =m_symbol.NormalizePrice(price-m_take_profit*atr);
   expiration+=m_expiration*PeriodSeconds(m_period);
//---
   return(true);
  }

4. Cierre de posición corta

En nuestro caso, la función que comprueba las condiciones para cerrar posiciones cortas siempre devuelve false, es decir, se asume que la posición corta será cerrada por Take Profit o Stop Loss. En caso necesario, usted puede escribir su propio código con la implementación de este método.

//+------------------------------------------------------------------+
//| Comprueba condiciones de cierre de posición corta                |
//+------------------------------------------------------------------+
bool CSignal2EMA_ITF::CheckCloseShort(double& price)
  {
   return(false);
  }


5. Trailing Stop de Orden Pendiente de Compra

El Expert Advisor arrastrará órdenes pendientes en función del valor actual de la media móvil y ATR.

El sistema de trading colocara órdenes pendientes en función de las señales de trading. Si la orden ha sido colocada correctamente, se arrastrará la orden pendiente a lo largo de la media móvil. La orden será ejecutada en el caso de que el precio de mercado alcanzara al precio de la orden.
//+--------------------------------------------------------------------+
//| Comprueba condiciones para modificar orden pendiente de compra     |
//+--------------------------------------------------------------------+
bool CSignal2EMA_ITF::CheckTrailingOrderLong(COrderInfo* order,double& price)
  {
//--- comprobación
   if(order==NULL) return(false);
//---
   double ema=SlowEMA(1);
   double atr=ATR(1);
   double spread=m_symbol.Ask()-m_symbol.Bid();
//---
   price=m_symbol.NormalizePrice(ema-m_limit*atr+spread);
//---
   return(true);
  }


6. Trailing Stop de Orden Pendiente de Venta

El Expert Advisor arrastrará órdenes pendientes en función del valor actual de la media móvil y ATR.

La orden será ejecutada en el caso de que el precio de mercado alcanzara al precio de la orden.

//+--------------------------------------------------------------------+
//| Comprueba condiciones para modificar orden pendiente de venta      |
//+--------------------------------------------------------------------+
bool CSignal2EMA_ITF::CheckTrailingOrderShort(COrderInfo* order,double& price)
  {
//--- comprobación
   if(order==NULL) return(false);
//---
   double ema=SlowEMA(1);
   double atr=ATR(1);
//---
   price=m_symbol.NormalizePrice(ema+m_limit*atr);
//---
   return(true);
  }

Creando el Asesor Experto con el MQL5 Wizard

Para crear un robot de trading basado en esta estrategia debe seleccionar "Signals based on crossover of two EMA with intraday time filter" para las propiedades de señal del Expert Advisor en la opción "Expert Advisor (generate)" de MQL5 Wizard:

Figura 2. Seleccione "Signals based on crossover of two EMA with intraday time filter" en MQL5 Wizard

Figura 2. Seleccione "Signals based on crossover of two EMA with intraday time filter" 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, PeriodFastEMA=5, PeriodSlowEMA=30, PeriodATR=7, Limit=1.2, StopLoss=5, TakeProfit=8, Expiration=4, GoodMinuteOfHour=-1, BadMinutesOfHour=0, GoodHourOfDay=-1, BadHoursOfDay=0, GoodDayOfWeek=-1, BadDaysOfWeek=0).

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 las pruebas del Asesor Experto con las señales de trading basadas en el cruce de dos EMA sin el uso del filtro de tiempo intradía (ITF)

Figura 3. Resultados de las pruebas del Asesor Experto con las señales de trading basadas en el cruce de dos EMA sin el uso del filtro de tiempo intradía (ITF)

El filtro intradía no se utiliza, por lo que hay muchas señales falsas. Las señales de trading se puede mejorar si realizamos el análisis de los resultados de las transacciones en función de las horas de trading.

En nuestro caso hemos encontrado que el cruce de dos EMA proporciona muchas señales falsas a partir de las 6:00 hasta las 23:59. Podemos concretar el filtro de tiempo intradía estableciendo los parámetros del filtro.

Por ejemplo, podemos especificar un tiempo de filtro, que permita abrir posiciones sólo desde las 0:00 hasta las 05:59. Se puede hacer estableciendo el valor de BadHoursOfDay=16777152=111111111111111111000000b. Todas las demás horas de trading son "malas", por lo que es mejor prohibir la apertura de nuevas posiciones desde las 06:00 hasta el final del día.

Si fijamos el valor de BadHoursOfDay=16777152, vamos a filtrar muchas señales falsas:

Figura 4. Resultados de las pruebas del Asesor Experto con las señales de trading basadas en el cruce de dos EMA con filtro de tiempo (BadHoursofDay=16777152)

Figura 4. Resultados de las pruebas del Asesor Experto con las señales de trading basadas en el cruce de dos EMA con filtro de tiempo (BadHoursofDay=16777152)


La clase CSignalITF ofrece muchas otras características de filtración de tiempo (sólo tiene que especificar los casos "buenos" y "malos" de minutos en una hora, horas en el día o días de la semana).

El uso de filtros de tiempo permite mejorar las señales de trading y tener en cuenta la dinámica del mercado (por ejemplo, las características de la sesión de trade).

Adjuntos: El fichero Signal2EMA-ITF.mqh con la clase CSignal2EMA_ITF se encuentra en la carpeta terminal_data_folder\MQL5\Include\Expert\Signal.

El fichero expert_2ema_itf.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/264

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

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

Relleno de Color de Momentum Relleno de Color de Momentum

El Indicador Técnico Momentum mide el cambio de precio de un instrumento financiero en un lapso de tiempo determinado.

QEMA QEMA

QEMA - Media Móvil Exponencial Cuádruple..