//Market_HoursM_sw.mq4
#property indicator_separate_window
#property indicator_buffers 8
#property indicator_color1 Lime
#property indicator_width1 3
#property indicator_color2 Red
#property indicator_width2 3
#property indicator_color3 Blue
#property indicator_width3 3
#property indicator_color4 Yellow
#property indicator_width4 3
#property indicator_color5 BlueViolet
#property indicator_color6 DodgerBlue
#property indicator_color7 BlueViolet
#property indicator_color8 DodgerBlue
#property indicator_width5 0
#property indicator_width6 0
#property indicator_width7 0
#property indicator_width8 0
#property indicator_maximum 9
#property indicator_minimum 0
extern int GMTOffset = 0;
// Buffers
double dLondonBuffer[];
double dNewYorkBuffer[];
double dSydneyBuffer[];
double dTokyoBuffer[];
double dTokyoBuffer1[];
double dTokyoBuffer2[];
double dTokyoBuffer3[];
double dTokyoBuffer4[];
int LondonOpen;
int LondonClose;
int NewYorkOpen;
int NewYorkClose;
int SydneyOpen;
int SydneyClose;
int TokyoOpen;
int TokyoClose;
int TokyoOpen1;
int TokyoClose1;
int TokyoOpen2;
int TokyoClose2;
int TokyoOpen3;
int TokyoClose3;
int TokyoOpen4;
int TokyoClose4;
int init() {
IndicatorShortName("Market Hours ");
SetIndexBuffer(0,dLondonBuffer);
SetIndexLabel(0,"London");
SetIndexBuffer(1,dNewYorkBuffer);
SetIndexLabel(1,"New York");
SetIndexBuffer(2,dSydneyBuffer);
SetIndexLabel(2,"");
SetIndexBuffer(3,dTokyoBuffer);
SetIndexLabel(3,"");
SetIndexBuffer(4,dTokyoBuffer1);
SetIndexLabel(4,"4H");
SetIndexBuffer(5,dTokyoBuffer2);
SetIndexLabel(5,"4H");
SetIndexBuffer(6,dTokyoBuffer3);
SetIndexLabel(6,"4H");
SetIndexBuffer(7,dTokyoBuffer4);
SetIndexLabel(7,"4H");
return(0);
}
int start() {
//set Times
LondonOpen = GMTOffset + 7;
LondonClose = GMTOffset + 16;
NewYorkOpen = GMTOffset + 12;
NewYorkClose = GMTOffset + 21;
SydneyOpen = GMTOffset + 0;
SydneyClose = GMTOffset + 6;
TokyoOpen = GMTOffset + 0;
TokyoClose = GMTOffset + 9;
TokyoOpen1 = GMTOffset + 4;
TokyoClose1 = GMTOffset + 9;
TokyoOpen2 = GMTOffset + 8;
TokyoClose2 = GMTOffset + 13;
TokyoOpen3 = GMTOffset + 12;
TokyoClose3 = GMTOffset + 17;
TokyoOpen4 = GMTOffset + 16;
TokyoClose4 = GMTOffset + 20;
// Determine number of bars to iterate over
int iBarsToCalc = Bars - IndicatorCounted();
if (iBarsToCalc < Bars) iBarsToCalc++;
// Iterate over bars
for (int i=iBarsToCalc-1;i>=0;i--) {
// Set London Line
if (isMarketOpen(LondonOpen, LondonClose, Time[i]))
dLondonBuffer[i] = 8;
else
dLondonBuffer[i] = EMPTY_VALUE;
// Set NewYork Line
if (isMarketOpen(NewYorkOpen, NewYorkClose, Time[i]))
dNewYorkBuffer[i] = 6;
else
dNewYorkBuffer[i] = EMPTY_VALUE;
// Set Sydney Line
if (isMarketOpen(SydneyOpen, SydneyClose, Time[i]))
dSydneyBuffer[i] = 4;
else
dSydneyBuffer[i] = EMPTY_VALUE;
// Set Tokyo Line
if (isMarketOpen(TokyoOpen, TokyoClose, Time[i]))
dTokyoBuffer[i] = 2;
else
dTokyoBuffer[i] = EMPTY_VALUE;
// Set Tokyo Line1
if (isMarketOpen(TokyoOpen1, TokyoClose1, Time[i]))
dTokyoBuffer1[i] = 1;
else
dTokyoBuffer1[i] = EMPTY_VALUE;
// Set Tokyo Line1
if (isMarketOpen(TokyoOpen2, TokyoClose2, Time[i]))
dTokyoBuffer2[i] = 1;
else
dTokyoBuffer2[i] = EMPTY_VALUE;
// Set Tokyo Line1
if (isMarketOpen(TokyoOpen3, TokyoClose3, Time[i]))
dTokyoBuffer3[i] = 1;
else
dTokyoBuffer3[i] = EMPTY_VALUE;
// Set Tokyo Line1
if (isMarketOpen(TokyoOpen4, TokyoClose4, Time[i]))
dTokyoBuffer4[i] = 1;
else
dTokyoBuffer4[i] = EMPTY_VALUE;
}
}
bool isMarketOpen(int iOpenHour, int iCloseHour, datetime timestamp) {
int iBarHour = TimeHour(timestamp);
if (iOpenHour < iCloseHour && (iBarHour >= iOpenHour && iBarHour < iCloseHour))
return(true);
if (iOpenHour > iCloseHour && (iBarHour >= iOpenHour || iBarHour < iCloseHour))
return(true);
return(false);
}
Comments