//+------------------------------------------------------------------+ //| i-Sessions.mq4 | //| Ким Игорь В. aka KimIV | //| http://www.kimiv.ru | //| | //| 16.11.2005 Индикатор торговых сессий | //+------------------------------------------------------------------+ #property copyright "Ким Игорь В. aka KimIV" #property link "http://www.kimiv.ru" #property indicator_chart_window //------- Внешние параметры индикатора ------------------------------- extern int NumberOfDays = 21; // Количество дней extern string AsiaBegin = "05:00"; // Открытие азиатской сессии extern string AsiaEnd = "15:59"; // Закрытие азиатской сессии extern color AsiaColor = DarkGreen; // Цвет азиатской сессии extern string EurBegin = "16:00"; // Открытие европейской сессии extern string EurEnd = "20:59"; // Закрытие европейской сессии extern color EurColor = DarkSlateGray; // Цвет европейской сессии extern string USABegin = "21:00"; // Открытие американской сессии extern string USAEnd = "04:59"; // Закрытие американской сессии extern color USAColor = Navy; // Цвет американской сессии extern bool ShowPrice = True; // Показывать ценовые уровни extern color clFont = Blue; // Цвет шрифта extern int SizeFont = 8; // Размер шрифта extern int OffSet = 10; // Смещение //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ void init() { DeleteObjects(); for (int i=0; i6) dt=decDateTradeDay(dt); } } //+------------------------------------------------------------------+ //| Прорисовка объектов на графике | //| Параметры: | //| 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); if (CurTime() < t1) { return; } t2=StrToTime(TimeToStr(dt, TIME_DATE)+" "+te); if (t2 < t1) { t2=incDateTradeDay(t2); } 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)]; ObjectSet(no, OBJPROP_TIME1 , t1); ObjectSet(no, OBJPROP_PRICE1, p1); ObjectSet(no, OBJPROP_TIME2 , t2); ObjectSet(no, OBJPROP_PRICE2, p2); } //+------------------------------------------------------------------+ //| Прорисовка ценовых меток на графике | //| Параметры: | //| dt - дата торгового дня | //| no - наименование объекта | //| tb - время начала сессии | //| te - время окончания сессии | //+------------------------------------------------------------------+ void DrawPrices(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); if (CurTime() < t1) { t1=decDateTradeDay(t1); t2=decDateTradeDay(t2); } if (t2 < t1) { t2=incDateTradeDay(t2); } 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 (ObjectFind(no+"up")<0) ObjectCreate(no+"up", OBJ_TEXT, 0, 0,0); ObjectSet(no+"up", OBJPROP_TIME1 , t2); ObjectSet(no+"up", OBJPROP_PRICE1 , p1+OffSet*Point); ObjectSet(no+"up", OBJPROP_COLOR , clFont); ObjectSet(no+"up", OBJPROP_FONTSIZE, SizeFont); ObjectSetText(no+"up", DoubleToStr(p1+Ask-Bid, Digits)); if (ObjectFind(no+"dn")<0) ObjectCreate(no+"dn", OBJ_TEXT, 0, 0,0); ObjectSet(no+"dn", OBJPROP_TIME1 , t2); ObjectSet(no+"dn", OBJPROP_PRICE1 , p2); ObjectSet(no+"dn", OBJPROP_COLOR , clFont); ObjectSet(no+"dn", OBJPROP_FONTSIZE, SizeFont); ObjectSetText(no+"dn", DoubleToStr(p2, Digits)); } //+------------------------------------------------------------------+ //| Уменьшение даты на один торговый день | //| Параметры: | //| 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)); } //+------------------------------------------------------------------+ datetime incDateTradeDay (datetime dt) { int ty=TimeYear(dt); int tm=TimeMonth(dt); int td=TimeDay(dt); int th=TimeHour(dt); int ti=TimeMinute(dt); int end; if (tm==1 || tm==3 || tm==5 || tm==7 || tm==8 || tm==10 || tm==12) end=31; if (tm==2) if (MathMod(ty, 4)==0) end=29; else end=28; if (tm==4 || tm==6 || tm==9 || tm==11) end=30; if (td==end) { td=1; if (tm==12) { tm=1; ty++; } else { tm++; } } else { td++; } return(StrToTime(ty+"."+tm+"."+td+" "+th+":"+ti)); }