//+------------------------------------------------------------------+ //| Auto_Sessions_v1.5.mq4 | //| Copyright © 2010, cameofx | //| cameofx@gmail.com | //+------------------------------------------------------------------+ #property copyright "Copyright © 2010, cameofx" #property link "cameofx@gmail.com" #property indicator_chart_window extern string SessionNames = "Asia/Euro/USA"; extern string SessionBegins = "02:00/08:00/14:00"; extern string SessionEnds = "10:00/17:00/23:00"; extern color color1 = C'5,55,6'; extern color color2 = C'5,35,56'; extern color color3 = C'65,5,46'; extern color color4 = C'5,25,34'; extern color color5 = C'25,65,5'; extern bool FillColor = true; extern int FrameWidth = 1; extern int FrameStyle = 1; //extern bool ShowPips = true; //extern bool AppendPips = true; extern int LabelSize = 8; extern string LabelFont = "Arial Bold"; extern color LabelColor = DarkKhaki; string sTIME_BEGIN = "1970.01.01", saName[], saBeg[], saEnd[]; datetime t0, curDate, lastDate[], t1[], t2[]; double lo[], hi[], vPoint; color col[]; int pip[], pipRange, Qty; //+------------------------------------------------------------------+ int init() { if(Digits==3 || Digits==5)vPoint = Point*10; else vPoint = Point; Qty = stringExtract_(SessionNames,"/",saName); stringExtract_(SessionBegins,"/",saBeg); stringExtract_(SessionEnds,"/",saEnd); if(Qty>5)Qty = 5; ArrayResize(lo,Qty); ArrayInitialize(lo,99999999.0); ArrayResize(hi,Qty); ArrayInitialize(hi,0.0); ArrayResize(t1,Qty); ArrayResize(t2,Qty); ArrayResize(pip,Qty); ArrayResize(col,Qty); ArrayResize(lastDate,Qty); col[0] = color1; col[1] = color2; col[2] = color3; col[3] = color4; col[4] = color5; t0 = StrToTime(sTIME_BEGIN); curDate = t0; int g = 0; while(g t2[g]) t2[g]+=86000; pip[g] = 0; lastDate[g] = t0; g++; } return(0); } //+------------------------------------------------------------------+ int deinit() { int g; while(g 0) counted_bars--; int limit = Bars-1-counted_bars; for(i=limit; i>=0; i--) { curDate = stripToDate_(Time[i]); int g = 0; while(g= (cu+t1[g]) && Time[i] <= (cu+t2[g])) { if(cu > las[g]){ las[g] = cu; l1[g] = Low[i]; h1[g] = High[i]; pip[g] = (h1[g]-l1[g])/vPoint; createSes_(ses[g], cu, t1[g], l1[g], t2[g], h1[g], col1); createPip_(ses[g], cu, t1[g], h1[g]); reDrawPip_(ses[g], cu, hi[g], pip[g]); } if(Low[i] < l1[g]){ l1[g] = Low[i]; pip[g] = (h1[g]-l1[g])/vPoint; reDrawSes_(ses[g], cu, l1[g], h1[g]); reDrawPip_(ses[g], cu, hi[g], pip[g]); } if(High[i] > h1[g]){ h1[g] = High[i]; pip[g] = (h1[g]-l1[g])/vPoint; reDrawSes_(ses[g], cu, l1[g], h1[g]); reDrawPip_(ses[g], cu, hi[g], pip[g]); } } } //+------------------------------------------------------------------+ void createSes_(string name, datetime cu_Date, datetime t1, double p1, datetime t2, double p2, color col) { name = StringConcatenate(name, cu_Date); ObjectCreate(name, OBJ_RECTANGLE, 0, cu_Date + t1 , p1, cu_Date + t2 , p2); ObjectSet(name, OBJPROP_COLOR, col); ObjectSet(name, OBJPROP_BACK, FillColor); ObjectSet(name, OBJPROP_STYLE, FrameStyle); ObjectSet(name, OBJPROP_WIDTH, FrameWidth); } //+------------------------------------------------------------------+ void reDrawSes_(string name, datetime cu_Date, double price1, double price2) { name = StringConcatenate(name, cu_Date); ObjectSet(name, OBJPROP_PRICE1, price1); ObjectSet(name, OBJPROP_PRICE2, price2); } //+------------------------------------------------------------------+ void createPip_(string name, datetime cu_Date, datetime t1, double p1) { name = StringConcatenate("Pip", name, cu_Date); ObjectCreate(name, OBJ_TEXT, 0, cu_Date + t1 , p1); } //+------------------------------------------------------------------+ void reDrawPip_(string name, datetime cu_Date, double p1, int pip) { name = StringConcatenate("Pip", name, cu_Date); ObjectSetText(name, StringConcatenate(" ", pip, " pips"), LabelSize, LabelFont, LabelColor); ObjectSet(name, OBJPROP_PRICE1, p1); } //+------------------------------------------------------------------+ int stringExtract_(string toRead, string delimChar, string& ReadValue[]) { int delimPos[]; int len=StringLen(toRead); int curpos; int Qty=0; ArrayResize(delimPos,len); ArrayInitialize(delimPos, 0); ArrayResize(ReadValue,len); for(curpos=0; curpos<=len;) { delimPos[Qty]=curpos-1; curpos = StringFind(toRead,delimChar,curpos)+1; if(curpos<=0) break; Qty++; } if(Qty==0)ReadValue[0]=toRead; else for (int j=0; j<=Qty; j++) ReadValue[j] = StringSubstr(toRead,delimPos[j]+1,(delimPos[j+1]-delimPos[j])-1); return(Qty+1); } //+------------------------------------------------------------------+ datetime stripToDate_( datetime aTime ) { aTime -= MathMod(aTime,86400); return(aTime); } //+------------------------------------------------------------------+ void clear_(string prefix) { int prefix_len = StringLen(prefix); for(int i=ObjectsTotal(); i>=0; i--) { string name = ObjectName(i); if (StringSubstr(name,0,prefix_len) == prefix) ObjectDelete(name); } } //+------------------------------------------------------------------+