//+------------------------------------------------------------------+
//|                                                      b-clock.mq4 |
//|                                     Core time code by Nick Bilak |
//|        http://metatrader.50webs.com/         beluck[at]gmail.com |
//|                                  modified by adoleh2000 and dwt5 | 
//+------------------------------------------------------------------+
//|                                            i-ParamonWorkTime.mq4 |
//|                                           Êèì Èãîðü Â. aka KimIV |
//|      23.11.2005                              http://www.kimiv.ru |
//+------------------------------------------------------------------+
//|                                        hours added by bgaiteiro  |
//+------------------------------------------------------------------+
//|                                  Clock conner by        "OTCFX"  | 
//+------------------------------------------------------------------+
//|    Day.Box n MTF added n Combine by cmkm-2011- thhudu@yahoo.com  |
//+------------------------------------------------------------------+
#property copyright "Combine by cmkm-2011- thhudu@yahoo.com"

#property indicator_chart_window

//+---B-clock-----------------------------------------+
extern bool  _____________B_clock_Moving =True;
extern bool  _____________B_clock_Corner =False;
extern int   TimeFrame=0; //15|30|60|240|1440|10080|43200|0 : current TimeFrame.
extern int   Clock_Size  =14;
extern color Clock_Color = Yellow;
extern int   Corner =3;
int   Clearance   = 80;    // Distance of last candle to B-Clock
string Clock_Font = "Comic Sans MS";
//+---i-ParamonWorkTime-------------------------------+
extern bool   ______________Day.Box =True;
extern int    NumberOfDays = 2;        
string Begin_1      = "00:00";
string End_1        = "23:30";
extern color  Color_1      = 2500134;
string Begin_2      = "00:00";
string End_2        = "00:00";
color  Color_2      = NULL;
bool   HighRange    = true;

//---- buffers
double s1[];

int deinit() {
   ObjectDelete("time1");
   ObjectDelete("time");
   DeleteObjects();
return(0);
}
//+---i-ParamonWorkTime-----------------------------------+

int init()

  {
     DeleteObjects();
  for (int i=0; i<NumberOfDays; i++) {
    CreateObjects("PWT1"+i, Color_1);
    CreateObjects("PWT2"+i, Color_2);}
  }
   return(0);
//+-----------

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);
}
//+----------
void DeleteObjects() {
  for (int i=0; i<NumberOfDays; i++) {
    ObjectDelete("PWT1"+i);
    ObjectDelete("PWT2"+i);
  }
}
//+---i-ParamonWorkTime-----------------------------------+

int start()
  {
   datetime    objtime;   
   objtime = Time[0] + Period()*60*Clearance;
	double y;
   int h,m,s,k;
   if (TimeFrame ==0)TimeFrame=Period();
   m=iTime(NULL,TimeFrame,0)+TimeFrame*60 - TimeCurrent();
   y=m/60.0;
   s=m%60;
   m=(m-m%60)/60;
   h=y/60;
   k=m-(h*60); 

//+---B-clock-Moving--------------------------------------------+
  if (_____________B_clock_Moving==true) { // on/off show  (only this line)
	
   ObjectDelete("time");
   
   if(ObjectFind("time") != 0)
   {
   ObjectCreate("time", OBJ_TEXT, 0, objtime, Close[0]+ 0.0005);
   ObjectSetText("time", "<-" +h+":"+k+":"+s, Clock_Size, Clock_Font, Clock_Color);
   }
   else
   {
   ObjectMove("time", 0, objtime, Close[0]+0.0005);
   }}
//+---B-clock-Corner--------------------------------------------+  

   if (_____________B_clock_Corner==true) { // on/off show  (only this line)
   ObjectDelete("time1");
   ObjectCreate("time1", OBJ_LABEL, 0, 0, 0);
   ObjectSetText("time1","   "+h+":"+k+":"+s, Clock_Size, Clock_Font, Clock_Color);
   ObjectSet("time1", OBJPROP_CORNER,Corner);
   ObjectSet("time1", OBJPROP_XDISTANCE, 10);
   ObjectSet("time1", OBJPROP_YDISTANCE,10 );
    } 

//+---i-ParamonWorkTime-----------------------------------------+
  if (______________Day.Box==true) { // on/off show  (only this line)
  datetime dt=CurTime();

  for (int i=0; i<NumberOfDays; i++) {
    DrawObjects(dt, "PWT1"+i, Begin_1, End_1);
    DrawObjects(dt, "PWT2"+i, Begin_2, End_2);
    dt=decDateTradeDay(dt);
    while (TimeDayOfWeek(dt)>5) dt=decDateTradeDay(dt);
  }                      }
}
//+---------

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);
  t2=StrToTime(TimeToStr(dt, TIME_DATE)+" "+te);
  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)];
  if (!HighRange) {p1=0; p2=2*p2;}
  ObjectSet(no, OBJPROP_TIME1 , t1);
  ObjectSet(no, OBJPROP_PRICE1, p1);
  ObjectSet(no, OBJPROP_TIME2 , t2);
  ObjectSet(no, OBJPROP_PRICE2, p2);
}
//+---------
datetime decDateTradeDay (datetime dt) {
  int ty=TimeYear(dt);
  int tm=TimeMonth(dt);
  int td=TimeDay(dt);
  int th=TimeHour(dt);
  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));
}
//+---i-ParamonWorkTime-[End]----------------------------------------+

