reloj

Habitualmente utilizamos tramos horarios para permitir a los Expert Advisor abrir operaciones o no. Normalmente hay horas en las que es mejor no operar ciertos cruces, ya sea por peligro de movimientos muy bruscos o por que son horas de mercados horizontales donde lo único que podemos conseguir en tocar los Stops una y otra vez.

A continuación encontraréis un indicador que muestra un histograma con franjas verdes y rojas en función de si la barra está dentro del horario de mercado especificado o no.

En MQL4 las funciones para manejar tiempo y fechas son algo engorrosas… El código central del indicador es la función que calcula si estamos o no dentro de horario:

int 
timeWindow(int barra){
// Determina si estamos en horario de operación y lo muestra con un histograma de semáforo.
// Tenemos hasta 3 ventanas junto con límites en los extremos del lunes y viernes.
 
 
   // Llamo oTime al tiempo en segundos desde 00:00 de un datetime.
 
   // Calcular oTime de la barra i
   // A partir del número de barra, obtenemos su hora y minutos, componemos la hora en una cadena y obtenemos los segundos desde 00:00 para esa hora.
   int horaBarra = TimeHour(Time[barra]);
   int minutoBarra = TimeMinute(Time[barra]);
   string tiempoBarraCadena = horaBarra + ":" + minutoBarra;
   int oTimeBarra = StrToTime(tiempoBarraCadena);
 
   // Calcular oTime del tiempo Inicio. Ajustamos un periodo.
   int oTimeIni = StrToTime(Window_Ini) - (Period()*60);
 
   // Calcular oTime del tiempo Fin. Ajustamos un periodo.
   // Sabemos que una ventana traspasa las 24 horas, ej. de 10:00 a 01:00, porque oTimeFin < oTimeIni. Y le sumamos 24 horas a oTimeFin.
   int oTimeFin = StrToTime(Window_Fin) + (Period()*60);
   //if(oTimeFin < oTimeIni) oTimeFin += 86400; // 60s * 60m * 24H
 
 
   if(oTimeFin < oTimeIni){
      if(oTimeBarra > oTimeIni) oTimeFin += 86400; // 60s * 60m * 24H
      if(oTimeBarra < oTimeIni) oTimeIni -= 86400;
   }
 
   if(oTimeIni < oTimeBarra && oTimeBarra < oTimeFin) return(1);
   else return(0);  
}

Y a continuación tenéis el indicador para descargar en dos versiones, una con un solo tramo horario (para facilitar el estudio del código) y otro un poquito más avanzado que permite utilizar hasta tres tramos de operación.

Como siempre, ya sabéis cualquier duda podéis comentarla en el foro.