//+------------------------------------------------------------------+
//|                                                      b-clock.mq4 |
//|                                     Core time code by Nick Bilak |
//|        http://metatrader.50webs.com/         beluck[at]gmail.com |
//|                                  modified by adoleh2000 and dwt5 | 
//+------------------------------------------------------------------+
//|                                        hours added by bgaiteiro  |
//+------------------------------------------------------------------+
//|                                  Clock conner by        "OTCFX"  |
//+------------------------------------------------------------------+
//|                                            i-ParamonWorkTime.mq4 |
//|                                           Êèì Èãîðü Â. aka KimIV |
//|      23.11.2005                              http://www.kimiv.ru |
//+------------------------------------------------------------------+
//|                                                     BarTimer.mq4 |
//|                               Copyright © 2008, Art Royal s.r.o. |
//|                                           Author: Vasyl Gumenyak |  
//|                                           http://www.jiport.com/ |
//+------------------------------------------------------------------+
/*
Allow displaying of percentage across different B_TimeFrames.
Modified by Zen (Feb 2009)
*/ 
//+------------------------------------------------------------------+
//|                b-clock,BarTime,Day.Box n MTF were added by cmkm  |
//|                 Fix high-low of Day.Box + show wrong NumberOfDays|
//|                                            added BarTime D1 style| 
//|                                      cmkm-2012- thhudu@yahoo.com |
//+------------------------------------------------------------------+
#property copyright "cmkm-2012- thhudu@yahoo.com"
#property link  "All my indicators:  http://www.forexfactory.com/showthread.php?t=325434"

#property indicator_chart_window

//+---B-clock-----------------------------------------+
extern bool  _____________B_clock_Moving =False;
extern bool  _____________B_clock_Corner =True;
extern int   TimeFrame=0; //15|30|60|240|1440|10080|43200|0 : current TimeFrame.
extern int   Clearance   = 80;    // Distance of last candle to B-Clock
extern int   Clock_Size  =14;
extern color Clock_Color = Yellow;
extern int   Corner =3;

string Clock_Font = "Comic Sans MS";
//+---i-ParamonWorkTime-------------------------------+
extern bool   ______________Day.Box =True;
extern int    NumberOfDays = 1;        
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;

//+---Bar Time -------------------------------+
extern bool   ______________Bar.Time =True;
extern int    B_TimeFrame = 1440;  //15|30|60|240|1440|10080|43200|0-currentTF.

int lenbase;
string F4=":...:...;...:...:";
string F6=":...:...:...;...:...:...:";
string B_TimeFrame_Str = "";


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

//+--------------------------------------+
int deinit() {
   ObjectDelete("time1");
   ObjectDelete("time");
   DeleteObjects();
   if (ObjectFind("BarTimer") != -1) ObjectDelete("BarTimer");
return(0);
}

//+--------------------------------------+
int init()
  { 
//+---i-ParamonWorkTime-----------------------------------+
     DeleteObjects();
  for (int i=0; i<=NumberOfDays; i++) {
    CreateObjects("PWT1"+i, Color_1);
    CreateObjects("PWT2"+i, Color_2);}
    
//+---Bar Time -------------------------------+
   B_TimeFrame_Str = "";
   if (B_TimeFrame == 0)   {      B_TimeFrame_Str = "("+Period()+")";      B_TimeFrame = Period();   }
   if (B_TimeFrame == PERIOD_M1)   {      B_TimeFrame_Str = "(M1)";   }   
   if (B_TimeFrame == PERIOD_M5)   {      B_TimeFrame_Str = "(M5)";   }   
   if (B_TimeFrame == PERIOD_M15)   {      B_TimeFrame_Str = "(M15)";   }
   if (B_TimeFrame == PERIOD_M30)   {      B_TimeFrame_Str = "(M30)";   }
   if (B_TimeFrame == PERIOD_H1)   {      B_TimeFrame_Str = "(H1)";   }
   if (B_TimeFrame == PERIOD_H4)   {      B_TimeFrame_Str = "(H4)";   }
   if (B_TimeFrame == PERIOD_D1)   {      B_TimeFrame_Str = "(D1)";   }
   if (B_TimeFrame == PERIOD_W1)   {      B_TimeFrame_Str = "(W1)";   }
   if (B_TimeFrame == PERIOD_MN1)   {      B_TimeFrame_Str = "(MN1)";   }

   
   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 );
    } 
//+---Bar Time -------------------------------+
  if (______________Bar.Time==true) { // on/off show  (only this line)
  
  
   string s_base=F6;
   if (B_TimeFrame==1440) {s_base=F6;}else {s_base=F4;}
   lenbase=StringLen(s_base);
   
   int ib=0,sec=0;
   double pc=0.0;
   string time="",s_end="",s_beg="";
   if (ObjectFind("BarTimer") == -1) {
     ObjectCreate("BarTimer" , OBJ_LABEL,0,0,0);
     ObjectSet("BarTimer", OBJPROP_XDISTANCE, 250);
     ObjectSet("BarTimer", OBJPROP_YDISTANCE, 0);
     ObjectSet("BarTimer", OBJPROP_CORNER, 0);

   }
   //sec=TimeCurrent()-Time[0];
   //ib=(lenbase-1)*sec/(Period()*60);
   //pc=100.0*sec/(Period()*60);àõ
   sec=TimeCurrent()-iTime(NULL,B_TimeFrame,0);
   ib=(lenbase-1)*sec/(B_TimeFrame*60);
   pc=100.0*sec/(B_TimeFrame*60);
   if(ib>lenbase-1) ib=lenbase-1;
   if(ib>0) s_beg=StringSubstr(s_base,0,ib);
   if(ib<lenbase-1) s_end=StringSubstr(s_base,ib+1,lenbase-ib-1);
   
   time=StringConcatenate(s_beg,"|",s_end,"  ",DoubleToStr(pc,0),"%"," ",B_TimeFrame_Str);
   if (B_TimeFrame_Str == "")
   {
      time = "Invalid B_TimeFrame";
   }
   ObjectSetText("BarTimer", time, 14, "Arial", White);}
//+---Bar Time -------------------------------+

//+---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+1, b2)];
  p2=Low [Lowest (NULL, 0, MODE_LOW , b1-b2+1, 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;
  }

//+---i-ParamonWorkTime-[End]----------------------------------------+


  return(StrToTime(ty+"."+tm+"."+td+" "+th+":"+ti));
}