//+------------------------------------------------------------------+
//|                                                    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){
   Comment("");
   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=10)
{
   int k = 24*3600/PeriodSeconds();
   double hh =(double)ChartGetInteger(0, CHART_WIDTH_IN_PIXELS, 0)/(double)ChartGetInteger(0, CHART_WIDTH_IN_BARS, 0);//pixel per bar
   
   if (Period() < PERIOD_H4){
      wPx = WindowPriceMax() - 0.05*(WindowPriceMax() - WindowPriceMin());//10 pips up board
      wTx = time;
      int x_distance, y_distance; 
      ChartTimePriceToXY(0, 0, wTx, wPx, x_distance, y_distance);
      x_distance=x_distance+(int)(k*hh)/4;
      
      if(ObjectFind(0,name)<0){
         ObjectCreate(0, name, OBJ_LABEL,0,0,0);
         ObjectSetInteger(0, name, OBJPROP_YDISTANCE, y_distance);
         ObjectSetInteger(0,name,OBJPROP_XDISTANCE, x_distance);
         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 {
         ObjectSetInteger(0, name, OBJPROP_YDISTANCE, y_distance);
         ObjectSetInteger(0,name,OBJPROP_XDISTANCE, x_distance);
      }
  }
  ChartRedraw(0);
}
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
 DrawWeekDays();
   
  }
//+------------------------------------------------------------------+
