//+------------------------------------------------------------------+ //| i-ParamonWorkTime.mq4 | //| Ким Игорь В. aka KimIV | //| http://www.kimiv.ru | //| | //| 23.11.2005 Индикатор рабочего времени Парамона. | //+------------------------------------------------------------------+ #property copyright "Ким Игорь В. aka KimIV" #property link "http://www.kimiv.ru" #property indicator_chart_window //------- Внешние параметры индикатора ------------------------------- extern int NumberOfDays = 20; // Количество дней extern string Begin_1 = "12:00"; extern string End_1 = "14:00"; extern color Color_1 = DarkGreen; extern color Color_2 = Red; extern bool ShowDay1 = true; extern bool ShowDay2 = true; extern bool ShowDay3 = true; extern bool ShowDay4 = false; extern bool ShowDay5 = false; extern bool HighRange = False; bool ShowDay[5]; string prefix = "jj"; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ void init() { clear(); ShowDay[0] = ShowDay1; ShowDay[1] = ShowDay2; ShowDay[2] = ShowDay3; ShowDay[3] = ShowDay4; ShowDay[4] = ShowDay5; Comment(""); } //+------------------------------------------------------------------+ //| Custor indicator deinitialization function | //+------------------------------------------------------------------+ void deinit() { clear(); Comment(""); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ void start() { datetime dt=CurTime(); int P = Period(); if (P > PERIOD_D1) return; string name = ""; int cnt = MathMin(Bars, PERIOD_D1/P*NumberOfDays); for (int i=0; i <= cnt; i++) { if (TimeDayOfWeek(Time[i]) != TimeDayOfWeek(Time[i+1])) { name = prefix + TimeToStr(Time[i]); int res = ObjectFind(name); if (res == -1) { // int day = TimeDayOfWeek(Time[i]); int day = TimeDayOfWeek(dt); if (ShowDay[day-1]) { CreateObjects(name, Color_1); DrawObjects(dt, name, Begin_1, End_1); } else { CreateObjects(name, Color_2); DrawObjects(dt, name, Begin_1, End_1); } } dt=decDateTradeDay(dt); while (TimeDayOfWeek(dt)>5) dt=decDateTradeDay(dt); } } } //+------------------------------------------------------------------+ //| Создание объектов индикатора | //| Параметры: | //| no - наименование объекта | //| cl - цвет объекта | //+------------------------------------------------------------------+ 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); } //+------------------------------------------------------------------+ //| Прорисовка объектов на графике | //| Параметры: | //| dt - дата торгового дня | //| no - наименование объекта | //| tb - время начала сессии | //| te - время окончания сессии | //+------------------------------------------------------------------+ 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); } //+------------------------------------------------------------------+ //| Уменьшение даты на один торговый день | //| Параметры: | //| dt - дата торгового дня | //+------------------------------------------------------------------+ 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)); } void clear() { int P = Period(); if (P > PERIOD_D1) return; string prefix = "jj"; string name = ""; int cnt = MathMin(Bars, PERIOD_D1/P*NumberOfDays); for (int i=0; i < cnt; i++) { name = prefix + TimeToStr(Time[i]); int res = ObjectFind(name); ObjectDelete(name); } } //+------------------------------------------------------------------+