//+------------------------------------------------------------------+
//|                                                    Week_Days.mq4 |
//+------------------------------------------------------------------+
#property indicator_chart_window
string dayWeek [] = {"Sunday","Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
input int Days = 100;// Days Boxs
//input bool OpenCloseBox=true;// Open Close Boxs
input bool DrawBox = true;
datetime wTx, T = 0;
int a=0, Bar;
string mql_name;
double wPx;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit(){
    mql_name = MQLInfoString(MQL_PROGRAM_NAME);
    return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason){
   ObjectsDeleteAll(0,mql_name);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
     if(iTime(NULL,PERIOD_D1,0) != T){
         T = iTime(NULL,PERIOD_D1,0);
         DrawWeekDays();
     }

   return(rates_total);
}

//+------------------------------------------------------------------+
void DrawWeekDays(){
   datetime t, arrT[];
   MqlRates rates[];
   MqlDateTime mqlTime; 
   color clr = clrDimGray;
   string TXT;
   if(a==0) Bar = Days; else Bar = 1;
   ArrayResize(arrT,Bar);
   ArrayResize(rates,Bar);
   CopyTime(_Symbol, PERIOD_D1, 0, Bar, arrT);
   CopyRates(_Symbol, PERIOD_D1, 0, Bar, rates);
   for(int i=0;i<Bar;i++){
      t = arrT[i];
      TimeToStruct(t, mqlTime);
      TXT = dayWeek[mqlTime.day_of_week];
      
      DrawTXT(mql_name + TXT + TimeToString(t), TXT, t, rates[i].high + 100*Point, clr);
   }
}
//-------------------------------------------------------------------+
void DrawTXT(string name,string text,datetime time,double price,color clr,ENUM_ANCHOR_POINT ANCHOR_=ANCHOR_LEFT,int size=16)
{
   double wPx = WindowPriceMax() - 100*Point;
   datetime tPx = time + StringLen(text)*PeriodSeconds();
   if(ObjectFind(0,name)<0){
      ObjectCreate(0, name, OBJ_TEXT, 0, tPx, wPx);
      ObjectSetString(0,name,OBJPROP_TEXT,text);
      ObjectSetInteger(0,name,OBJPROP_FONTSIZE,size);
      ObjectSetInteger(0,name,OBJPROP_ANCHOR,ANCHOR_);
      ObjectSetInteger(0,name,OBJPROP_COLOR,clr);
  }    
  else ObjectMove(0,name,0,tPx,wPx);
  
  ChartRedraw(0);
}