#property indicator_chart_window

extern int mHist                        = 6;
extern color mTxtCol = Black;
extern int mPointsFromBase = 5;
int mVLCount = 10;
int mTimes[] = {6, 8, 13, 15, 17, 22, 22, 1, 8, 8};
string mLabs[] = {"EUR Op", "Lon Op", "US Op", "Eur Cls", "Lon Cls",
                "US Cls", "Syd Op", "Tok Op", "Syd Cls", "Tok Cls"}; 
color mColors[] = {Red, Blue, Black, Red, Blue, Black, Gold, Orange, Gold, Orange};
double mWinLow;

//+------------------------------------------------------------------+
void init()
 {
    mWinLow = WindowPriceMin() + mPointsFromBase * Point * 10;
 }

//+------------------------------------------------------------------+
void deinit()
 {
   ObjectsDeleteAll(0, 0);    // Delete V Lines
   ObjectsDeleteAll(0, 21);    // Delete text labels
 }

//+------------------------------------------------------------------+
void start()
 {
    datetime time = TimeCurrent();
    string mText = "Day Op";
    int mHistBars = mHist * 1440 / Period();
    
    for (int i = 0; i < mHistBars; i++)
      {
        for (int j = 0; j < mVLCount; j++)
         {
           if(TimeHour(Time[i]) == mTimes[j] && TimeMinute(Time[i]) == 0)
            {
              ObjectCreate("mTimeVL"+i+" "+j, OBJ_VLINE, 0, 0, 0, 0, 0);
              ObjectSet("mTimeVL"+i+" "+j, OBJPROP_STYLE, STYLE_DOT);
              ObjectSet("mTimeVL"+i+" "+j, OBJPROP_WIDTH, 1);
              ObjectSet("mTimeVL"+i+" "+j, OBJPROP_COLOR, mColors[j]);
              ObjectSet("mTimeVL"+i+" "+j, OBJPROP_BACK, True);
              ObjectSet("mTimeVL"+i+" "+j, OBJPROP_TIME1, Time[i]);
           
             ObjectCreate("mVLab"+i+" "+j, OBJ_TEXT, 0, 0, 0, 0, 0);
             ObjectSet("mVLab"+i+" "+j, OBJPROP_TIME1 , Time[i]);
             ObjectSet("mVLab"+i+" "+j, OBJPROP_PRICE1 , mWinLow);
             ObjectSet("mVLab"+i+" "+j, OBJPROP_ANGLE, 90);
             ObjectSetText("mVLab"+i+" "+j, mLabs[j], 7, "Times", mTxtCol);
           }
          
         }
        time = subtractDay(time);
        while (TimeDayOfWeek(time) > 5)
         {
            time = subtractDay(time);
         }
      } // for i
       mWinLow = WindowPriceMin() + mPointsFromBase * Point * 10;

       for (i = 0; i < mHistBars; i++)
        for (j = 0; j < mVLCount; j++)
          ObjectMove("mVLab"+i+" "+j, ObjectGet("mVLab"+i+" "+j, OBJPROP_TIME1), OBJPROP_PRICE1 , mWinLow);
      
 }


//+------------------------------------------------------------------+
datetime subtractDay(datetime time)
 {
    int year = TimeYear(time);
    int month = TimeMonth(time);
    int day = TimeDay(time);
    int hour = TimeHour(time);
    int minute = TimeMinute(time);

    day--;
    if (day == 0) {
        month--;
        if (month == 0) {
            year--;
            month = 12;
        }
        if ((month == 1) || (month == 3) || (month == 5) || (month == 7) || (month == 8) || (month == 10) || (month == 12)) {
            day = 31;
        }
        if (month == 2) {
            if (MathMod(year, 4) == 0) {
                day = 29;
            }
            else {
                day = 28;
            }
        }
        if ((month == 4) || (month == 6) || (month == 9) || (month == 11)) {
            day = 30;
        }
    }
    return(StrToTime(year + "." + month + "." + day + " " + hour + ":" + minute));
 }


