#property 		indicator_separate_window
#property		indicator_buffers 4
#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_maximum 9
#property 		indicator_minimum 0

extern int GMT_Broker_Anda = 2;

int		LondonOpen;
int		LondonClose;
int		NewYorkOpen;
int		NewYorkClose;
int		SydneyOpen;
int		SydneyClose;
int		TokyoOpen;
int		TokyoClose;





// Buffers
double dLondonBuffer[];
double dNewYorkBuffer[];
double dSydneyBuffer[];
double dTokyoBuffer[];

int init() {
   
   SydneyOpen  =GMT_Broker_Anda+22; if (SydneyOpen>23) SydneyOpen-=24;
   SydneyClose  =SydneyOpen+8; if (SydneyClose>23) SydneyClose-=24;

   TokyoOpen   =GMT_Broker_Anda;    if (TokyoOpen>23) TokyoOpen-=24;
   TokyoClose   =TokyoOpen+9;    if (TokyoClose>23) TokyoClose-=24;

   LondonOpen  =GMT_Broker_Anda+8;  if (LondonOpen>23) LondonOpen-=24;
   LondonClose  =LondonOpen+8;  if (LondonClose>23) LondonClose-=24;

   NewYorkOpen =GMT_Broker_Anda+13; if (NewYorkOpen>23) NewYorkOpen-=24;
   NewYorkClose =NewYorkOpen+9; if (NewYorkClose>23) NewYorkClose-=24;
   
	IndicatorShortName("");
	
	SetIndexBuffer(0,dLondonBuffer);
	SetIndexLabel(0,"London");
	SetIndexBuffer(1,dNewYorkBuffer);
	SetIndexLabel(1,"New York");
	SetIndexBuffer(2,dSydneyBuffer);
	SetIndexLabel(2,"Sydney");
	SetIndexBuffer(3,dTokyoBuffer);
	SetIndexLabel(3,"Tokyo");
	
	return(0);
}

int start() {

	// 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;	

	}

}

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);
}

