//+------------------------------------------------------------------+ //| XLines.mq4| //| excelf@gmail.com, skype: excelf| //+------------------------------------------------------------------+ #property indicator_chart_window double Buffer0[]; double Buffer1[]; double Buffer2[]; double Buffer3[]; double Buffer4[]; double Buffer5[]; double Buffer6[]; double Buffer7[]; int myPeriod=PERIOD_D1; extern int days=90; double avgDayRange; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int init() { double summ=0; for(int i=days-1; i>=0; i--) { summ+=MathAbs(iClose(NULL,myPeriod,i)-iOpen(NULL,myPeriod,i)); } avgDayRange=summ/days; Print("avgDayRange: "+DoubleToStr(avgDayRange/Point,0)); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int deinit() { string name; for(int i=ObjectsTotal(); i>=0;i--) { name=ObjectName(i); if(StringFind(name,"level",0)==0) { ObjectDelete(name); } } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int start() { int i,dayi; int counted_bars = IndicatorCounted(); if(counted_bars < 0) return(-1); if(counted_bars > 0) counted_bars--; int limit = Bars - counted_bars; if(counted_bars==0) limit-=1+1; double PP; for(i=limit; i>=0; i--) { dayi=iBarShift(NULL,myPeriod,Time[i],false); PP=iOpen(NULL,myPeriod,dayi); if(dayi!=iBarShift(NULL,myPeriod,Time[i+1],false)) { createLevel("level",PP,Time[i],Time[i]+86400,0,Black); createLevel("levelUpDarkViolet", PP + (avgDayRange * 0.33), Time[i], Time[i] + 86400, 3, DarkViolet); createLevel("levelDownDarkViolet", PP - (avgDayRange * 0.33), Time[i], Time[i] + 86400, 3, DarkViolet); createLevel("levelUpDodgerBlue", PP + (avgDayRange * 0.66), Time[i], Time[i] + 86400, 3, DodgerBlue); createLevel("levelDownDodgerBlue", PP - (avgDayRange * 0.66), Time[i], Time[i] + 86400, 3, DodgerBlue); createLevel("levelUpBlue",PP+(avgDayRange*1),Time[i],Time[i]+86400,3,Blue); createLevel("levelDownBlue",PP -(avgDayRange*1),Time[i],Time[i]+86400,3,Blue); createLevel("levelUpGreen", PP + (avgDayRange * 1.5), Time[i], Time[i] + 86400, 3, Green); createLevel("levelDownGreen", PP - (avgDayRange * 1.5), Time[i], Time[i] + 86400, 3, Green); createLevel("levelUpGold",PP+(avgDayRange*2),Time[i],Time[i]+86400,3,Gold); createLevel("levelDownGold",PP -(avgDayRange*2),Time[i],Time[i]+86400,3,Gold); createLevel("levelUpOrange", PP + (avgDayRange * 2.5), Time[i], Time[i] + 86400, 2, Orange); createLevel("levelDownOrange", PP - (avgDayRange * 2.5), Time[i], Time[i] + 86400, 2, Orange); createLevel("levelUpRed",PP+(avgDayRange*3),Time[i],Time[i]+86400,3,Red); createLevel("levelDownRed",PP -(avgDayRange*3),Time[i],Time[i]+86400,3,Red); } } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void createLevel(string name,double level,datetime openTime,datetime closeTime,int width,color lineColor) { name=name+TimeDayOfYear(openTime); if(ObjectFind(name)!=-1) { ObjectDelete(name); } if(TimeDayOfWeek(closeTime)==0 || TimeDayOfWeek(closeTime)==6) { closeTime=closeTime+60*60*24*2; } ObjectCreate(name,OBJ_TREND,0,openTime,level,closeTime,level); ObjectSet(name,OBJPROP_COLOR,lineColor); ObjectSet(name,OBJPROP_WIDTH,width); ObjectSet(name,OBJPROP_BACK,true); ObjectSet(name,OBJPROP_RAY,false); } //+------------------------------------------------------------------+