//+------------------------------------------------------------------+
//|                                           C4_FocusTime.mq4       |
//|                                           by Chris_B             |
//|                                                                  |
//|                                                                  |
//|  15.07.2009                                                      |
//+------------------------------------------------------------------+
#property copyright "by Chris_B"

#property indicator_chart_window

//------- External Inputs -------------------------------
extern int    NumberOfDays = 30;
extern string GMT_shift    = "shift from GMT time";        
extern int    gmt_shift    = 2;
extern string Colors       = "Choose your sessions colors";
extern color  Asian.London_Color    = LavenderBlush; 
extern color  London.Usa_Color    = C'0xD8,0xFE,0xD8'; 


//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+

string C4_1Begin    = "05:00";  
string C4_1End      = "08:30"; 
string C4_2Begin    = "11:00";   
string C4_2End      = "15:00";  

void init() {
  DeleteObjects();
  for (int i=0; i<NumberOfDays; i++) {
    CreateObjects("C41"+i, Asian.London_Color);
    CreateObjects("C42"+i, London.Usa_Color);
  }
  Comment("");
}

//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
void deinit() {
  DeleteObjects();
  Comment("");
}

//+------------------------------------------------------------------+
//| Create Object                                                    |
//+------------------------------------------------------------------+
void CreateObjects(string no, color cl) {
  ObjectCreate(no, OBJ_RECTANGLE, 0, 0,0, 0,0);
  ObjectSet(no, OBJPROP_STYLE, STYLE_SOLID);
  ObjectSet(no, OBJPROP_COLOR, cl);
  ObjectSet(no, OBJPROP_BACK, True);
}

//+------------------------------------------------------------------+
//| Delete object                                                    |
//+------------------------------------------------------------------+
void DeleteObjects() {
  for (int i=0; i<NumberOfDays; i++) {
    ObjectDelete("C41"+i);
    ObjectDelete("C42"+i);
  }
}

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
void start() {

  datetime dt= CurTime()+ gmt_shift;

  for (int i=0; i<NumberOfDays; i++) {
    DrawObjects(dt, "C41"+i, C4_1Begin, C4_1End);
    DrawObjects(dt, "C42"+i, C4_2Begin, C4_2End);
    dt=decDateTradeDay(dt);
    while (TimeDayOfWeek(dt)>5) dt=decDateTradeDay(dt);
  }
}

//+------------------------------------------------------------------+
//| Draw object                                                      |
//+------------------------------------------------------------------+
void DrawObjects(datetime dt, string no, string tb, string te) {
  datetime t1, t2;
  double   p1, p2;
  int      b1, b2;

  t1=StrToTime(TimeToStr(dt, TIME_DATE)+" "+tb)+gmt_shift *3600;
  t2=StrToTime(TimeToStr(dt, TIME_DATE)+" "+te)+gmt_shift* 3600;
  b1=iBarShift(NULL, 0, t1);
  b2=iBarShift(NULL, 0, t2);
  p1=High[Highest(NULL, 0, MODE_HIGH, b1-b2, b2)];
  p2=Low [Lowest (NULL, 0, MODE_LOW , b1-b2, b2)];
  ObjectSet(no, OBJPROP_TIME1, t1);
  ObjectSet(no, OBJPROP_PRICE1, p1);
  ObjectSet(no, OBJPROP_TIME2, t2);
  ObjectSet(no, OBJPROP_PRICE2, p2);
}

//+------------------------------------------------------------------+
//| String to time                                                   |
//+------------------------------------------------------------------+
datetime decDateTradeDay (datetime dt) {
  int ty=TimeYear(dt);
  int tm=TimeMonth(dt);
  int td=TimeDay(dt);
  int th=TimeHour(dt)+TimeHour(gmt_shift);
  int ti=TimeMinute(dt);

  td--;
  if (td==0) {
    tm--;
    if (tm==0) {
      ty--;
      tm=12;
    }
    if (tm==1 || tm==3 || tm==5 || tm==7 || tm==8 || tm==10 || tm==12) td=31;
    if (tm==2) if (MathMod(ty, 4)==0) td=29; else td=28;
    if (tm==4 || tm==6 || tm==9 || tm==11) td=30;
  }
  return(StrToTime(ty+"."+tm+"."+td+" "+th+":"+ti));
}
//+------------------------------------------------------------------+

