Indicador de horarios de operación

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.




