//+------------------------------------------------------------------+ //| ProjectName | //| Copyright 2012, CompanyName | //| http://www.companyname.net | //+------------------------------------------------------------------+ #property copyright "Copyright © 2007, Waddah Attar" #property link "waddahattar@hotmail.com" #property indicator_chart_window #property indicator_buffers 0 extern int DaysShift=0; extern double Step=5; extern int SupportRange=200; extern int ResistanceRange=200; extern bool ShowMorePowerOnly=true; extern double PowerPercent=80; extern bool AutoSupRes=false; extern bool StrongLevel=true; extern bool HiddenLevel=true; extern bool RSILevel=true; extern bool PivotLevel=true; extern bool CamarillaLevel=true; extern bool HiLoLevel=true; double OpenDay; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int init() { return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int deinit() { ObjectsDeleteAll(0,OBJ_RECTANGLE); return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int start() { double DayTime=iTime(Symbol(),PERIOD_D1,DaysShift); double i; int j; if(AutoSupRes) { OpenDay=(Bid+Ask)/2; } else { OpenDay=iOpen(Symbol(),PERIOD_D1,DaysShift); } if(DaysShift>0) { OpenDay=iOpen(Symbol(),PERIOD_D1,DaysShift); } ObjectsDeleteAll(0,OBJ_RECTANGLE); for(i=OpenDay-(Step/2)*Point;i>=OpenDay-SupportRange*Point;i=i-Step*Point) { DrawRect("sup"+DaysShift+"-"+j,DayTime,i,DayTime+86400,i-Step*Point,White); j++; } j=0; for(i=OpenDay+(Step/2)*Point;i<=OpenDay+ResistanceRange*Point;i=i+Step*Point) { DrawRect("res"+DaysShift+"-"+j,DayTime,i,DayTime+86400,i-Step*Point,White); j++; } if(StrongLevel) { AddStrongLevel(PERIOD_D1,15); //21 AddStrongLevel(PERIOD_W1,30); //21 AddStrongLevel(PERIOD_MN1,60); //21 //63 } if(HiddenLevel) { AddHiddenLevel(PERIOD_D1,15); //7 AddHiddenLevel(PERIOD_W1,30); //7 AddHiddenLevel(PERIOD_MN1,60); //7 //21 } if(RSILevel) { AddRSILevel(30); //11 //11 } if(PivotLevel) { AddPivotLevel(PERIOD_D1,15); //11 AddPivotLevel(PERIOD_W1,30); //11 AddPivotLevel(PERIOD_MN1,60); //11 //33 } if(CamarillaLevel) { AddCamarillaLevel(PERIOD_D1,15); //8 AddCamarillaLevel(PERIOD_W1,30); //8 AddCamarillaLevel(PERIOD_MN1,60); //8 //24 } if(HiLoLevel) { AddHiLoLevel(PERIOD_D1,15); //3 AddHiLoLevel(PERIOD_W1,30); //3 AddHiLoLevel(PERIOD_MN1,60); //3 //9 } if(ShowMorePowerOnly) SetColorWhite(PowerPercent/100*255); DelColorWhite(White); //SmallRect(); return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void DrawRect(string name,datetime x1,double y1,datetime x2,double y2,double clr) { ObjectCreate(name,OBJ_RECTANGLE,0,x1,y1,x2,y2); ObjectSet(name,OBJPROP_COLOR,clr); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void AddStrongLevel(int period,double clr) { int ii; double c1,c2,dc,L1,L2,DefDay; ii=iBarShift(Symbol(),period,Time[DaysShift],true); if(ii!=-1) { c1 = iClose(Symbol(), period, ii + 1 + DaysShift); c2 = iClose(Symbol(), period, ii + 2 + DaysShift); dc = c1 - c2; if(dc==0) { c2 = iClose(Symbol(), period, ii + 3 + DaysShift); dc = c1 - c2; } if(dc==0) dc=c1; L1=c1-dc; L2=c1+dc; DefDay=MathAbs(2*dc); SetColorLevel(L1,2*clr); SetColorLevel(L2,2*clr); if(L1=iOpen(Symbol(),period,ii+1+DaysShift)) { c1 = (iHigh(Symbol(), period, ii + 1 + DaysShift)-iClose(Symbol(), period, ii + 1 + DaysShift))/2+iClose(Symbol(), period, ii + 1 + DaysShift); c2 = (iOpen(Symbol(), period, ii + 1 + DaysShift)-iLow(Symbol(), period, ii + 1 + DaysShift))/2+iLow(Symbol(), period, ii + 1 + DaysShift); } else { c1 = (iHigh(Symbol(), period, ii + 1 + DaysShift)-iOpen(Symbol(), period, ii + 1 + DaysShift))/2+iOpen(Symbol(), period, ii + 1 + DaysShift); c2 = (iClose(Symbol(), period, ii + 1 + DaysShift)-iLow(Symbol(), period, ii + 1 + DaysShift))/2+iLow(Symbol(), period, ii + 1 + DaysShift); } SetColorLevel(c1,2*clr); SetColorLevel(c2,2*clr); SetColorLevel((c1+c2)/2,clr); SetColorLevel(c1+(c1-c2)*0.618,clr); SetColorLevel(c2-(c1-c2)*0.618,clr); SetColorLevel(c1+(c1-c2)*1.618,clr); SetColorLevel(c2-(c1-c2)*1.618,clr); } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void AddRSILevel(double clr) { int ii; double c1,c2,dc; double rsi1,rsi2,drsi; ii=iBarShift(Symbol(),PERIOD_D1,Time[DaysShift],true); if(ii!=-1) { rsi1 = iRSI(Symbol(), PERIOD_D1, 5, PRICE_CLOSE, ii + 1 + DaysShift); rsi2 = iRSI(Symbol(), PERIOD_D1, 5, PRICE_CLOSE, ii + 2 + DaysShift); c1 = iClose(Symbol(), PERIOD_D1, ii + 1 + DaysShift); c2 = iClose(Symbol(), PERIOD_D1, ii + 2 + DaysShift); drsi=rsi1-rsi2; if(drsi==0) { rsi2=iRSI(Symbol(),PERIOD_D1,5,PRICE_CLOSE,ii+3+DaysShift); } drsi=rsi1-rsi2; if(drsi==0) { drsi=rsi1; } dc=c1-c2; if(dc==0) { c2=iClose(Symbol(),PERIOD_D1,ii+3); } dc=c1-c2; if(dc==0) { dc=c1; } if(drsi!=0) { SetColorLevel((((0-rsi1)*dc)/drsi)+c1,clr); SetColorLevel((((10-rsi1)*dc)/drsi)+c1,clr); SetColorLevel((((20-rsi1)*dc)/drsi)+c1,clr); SetColorLevel((((30-rsi1)*dc)/drsi)+c1,clr); SetColorLevel((((40-rsi1)*dc)/drsi)+c1,clr); SetColorLevel((((50-rsi1)*dc)/drsi)+c1,clr); SetColorLevel((((60-rsi1)*dc)/drsi)+c1,clr); SetColorLevel((((70-rsi1)*dc)/drsi)+c1,clr); SetColorLevel((((80-rsi1)*dc)/drsi)+c1,clr); SetColorLevel((((90-rsi1)*dc)/drsi)+c1,clr); SetColorLevel((((100-rsi1)*dc)/drsi)+c1,clr); } } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void AddPivotLevel(int period,double clr) { int ii; double Q,PP; ii=iBarShift(Symbol(),period,Time[DaysShift],false); if(ii!=-1) { Q=(iHigh(Symbol(),period,ii+1+DaysShift)-iLow(Symbol(),period,ii+1+DaysShift)); PP=(iHigh(Symbol(),period,ii+1+DaysShift)+iLow(Symbol(),period,ii+1+DaysShift)+iClose(Symbol(),period,ii+1+DaysShift))/3; SetColorLevel(PP,clr); SetColorLevel(PP + (Q * 0.23),clr); SetColorLevel(PP - (Q * 0.23),clr); SetColorLevel(PP + (Q * 0.38),clr); SetColorLevel(PP - (Q * 0.38),clr); SetColorLevel(PP + (Q * 0.50),clr); SetColorLevel(PP - (Q * 0.50),clr); SetColorLevel(PP + (Q * 0.618),clr); SetColorLevel(PP - (Q * 0.618),clr); SetColorLevel(PP+(Q*1),clr); SetColorLevel(PP -(Q*1),clr); } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void AddCamarillaLevel(int period,double clr) { int ii; double Q,cc; ii=iBarShift(Symbol(),period,Time[DaysShift],false); if(ii!=-1) { Q = (iHigh(Symbol(), period,ii+1+DaysShift) - iLow(Symbol(), period, ii + 1+DaysShift)); cc=iClose(Symbol(), period,ii+1+DaysShift); SetColorLevel(cc + (Q * 0.09),clr); SetColorLevel(cc - (Q * 0.09),clr); SetColorLevel(cc + (Q * 0.18),clr); SetColorLevel(cc - (Q * 0.18),clr); SetColorLevel(cc + (Q * 0.27),clr); SetColorLevel(cc - (Q * 0.27),clr); SetColorLevel(cc + (Q * 0.55),clr); SetColorLevel(cc - (Q * 0.55),clr); } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void AddHiLoLevel(int period,double clr) { int ii; double h,l; ii=iBarShift(Symbol(),period,Time[DaysShift],false); if(ii!=-1) { h=iHigh(Symbol(),period,ii+1+DaysShift); l=iLow(Symbol(),period,ii+1+DaysShift); SetColorLevel(h,clr); SetColorLevel(l,clr); SetColorLevel((h+l)/2,clr); } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void AddRedColor(string name,double clr) { double objclr; datetime objtime1; datetime objtime2; int r,g,b; objclr=ObjectGet(name,OBJPROP_COLOR); objtime1=ObjectGet(name,OBJPROP_TIME1); objtime2=ObjectGet(name,OBJPROP_TIME2); r=MathMod(objclr,0x100); objclr=MathFloor(objclr/0x100); g=MathMod(objclr,0x100); objclr=MathFloor(objclr/0x100); b=MathMod(objclr,0x100); g=g-clr; if(g<0) { MinusRedColor(g); g=0; } b=b-clr; if(b<0) b=0; if(g>255) g=255; if(b>255) b=255; objclr=r+g*256+b*65536; ObjectSet(name,OBJPROP_COLOR,objclr); ObjectSet(name,OBJPROP_TIME1,objtime1-clr*300); ObjectSet(name,OBJPROP_TIME2,objtime2+clr*300); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void AddGreenColor(string name,double clr) { double objclr; datetime objtime1; datetime objtime2; int r,g,b; objclr=ObjectGet(name,OBJPROP_COLOR); objtime1=ObjectGet(name,OBJPROP_TIME1); objtime2=ObjectGet(name,OBJPROP_TIME2); r=MathMod(objclr,0x100); objclr=MathFloor(objclr/0x100); g=MathMod(objclr,0x100); objclr=MathFloor(objclr/0x100); b=MathMod(objclr,0x100); r=r-clr; if(r<0) { MinusGreenColor(r); r=0; } b=b-clr; if(b<0) b=0; if(r>255) r=255; if(b>255) b=255; objclr=r+g*256+b*65536; ObjectSet(name,OBJPROP_COLOR,objclr); ObjectSet(name,OBJPROP_TIME1,objtime1-clr*300); ObjectSet(name,OBJPROP_TIME2,objtime2+clr*300); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void SetColorLevel(double val,double clr) { double y1,y2; for(int j=0;j=y2) { if(StringFind(ObjectName(j),"res",0)>=0) { AddRedColor(ObjectName(j),clr); break; } else { AddGreenColor(ObjectName(j),clr); break; } } } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void MinusRedColor(double clr) { for(int j=0;j=0) { AddRedColor(ObjectName(j),clr); } } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void MinusGreenColor(double clr) { for(int j=0;j=0) { AddGreenColor(ObjectName(j),clr); } } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void SetColorWhite(double clr) { for(int j=0;j=0) { SetGreenWhite(ObjectName(j),clr); } if(StringFind(ObjectName(j),"res",0)>=0) { SetRedWhite(ObjectName(j),clr); } } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void SetRedWhite(string name,double clr) { double objclr; int r,g,b; objclr=ObjectGet(name,OBJPROP_COLOR); r=MathMod(objclr,0x100); objclr=MathFloor(objclr/0x100); g=MathMod(objclr,0x100); objclr=MathFloor(objclr/0x100); b=MathMod(objclr,0x100); if(g>clr && b>clr) { objclr=255+255*256+255*65536; } else { objclr=r+g*256+b*65536; } ObjectSet(name,OBJPROP_COLOR,objclr); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void SetGreenWhite(string name,double clr) { double objclr; int r,g,b; objclr=ObjectGet(name,OBJPROP_COLOR); r=MathMod(objclr,0x100); objclr=MathFloor(objclr/0x100); g=MathMod(objclr,0x100); objclr=MathFloor(objclr/0x100); b=MathMod(objclr,0x100); if(r>clr && b>clr) { objclr=255+255*256+255*65536; } else { objclr=r+g*256+b*65536; } ObjectSet(name,OBJPROP_COLOR,objclr); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void DelColorWhite(double clr) { double objclr,i; string name; int j; for(i=OpenDay-(Step/2)*Point;i>=OpenDay-SupportRange*Point;i=i-Step*Point) { name="sup"+DaysShift+"-"+j; objclr=ObjectGet(name,OBJPROP_COLOR); if(objclr==clr) { ObjectDelete(name); } j++; } j=0; for(i=OpenDay+(Step/2)*Point;i<=OpenDay+ResistanceRange*Point;i=i+Step*Point) { name="res"+DaysShift+"-"+j; objclr=ObjectGet(name,OBJPROP_COLOR); if(objclr==clr) { ObjectDelete(name); } j++; } } //+------------------------------------------------------------------+