Waddah_Attar_Super_Support_Resistance_v1

Author: Copyright � 2007, Waddah Attar
Price Data Components
Series array that contains open prices of each barSeries array that contains open prices of each barSeries array that contains close prices for each barSeries array that contains the highest prices of each barSeries array that contains the lowest prices of each bar
Indicators Used
Relative strength index
3 Views
0 Downloads
0 Favorites
Waddah_Attar_Super_Support_Resistance_v1
//+------------------------------------------------------------------+
//|                                                      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<L2)
        {
         SetColorLevel(L1+DefDay*0.236,clr);
         SetColorLevel(L1+DefDay*0.382,clr);
         SetColorLevel(L1+DefDay*0.5,clr);
         SetColorLevel(L1+DefDay*0.618,clr);
         SetColorLevel(L1+DefDay*0.764,clr);

         SetColorLevel(L1-DefDay*0.236,clr);
         SetColorLevel(L1-DefDay*0.382,clr);
         SetColorLevel(L1-DefDay*0.5,clr);
         SetColorLevel(L1-DefDay*0.618,clr);
         SetColorLevel(L1-DefDay*1,clr);
         SetColorLevel(L1-DefDay*1.618,clr);
         SetColorLevel(L1-DefDay*2.618,clr);
         SetColorLevel(L1-DefDay*3.618,clr);

         SetColorLevel(L2+DefDay*0.236,clr);
         SetColorLevel(L2+DefDay*0.382,clr);
         SetColorLevel(L2+DefDay*0.5,clr);
         SetColorLevel(L2+DefDay*0.618,clr);
         SetColorLevel(L2+DefDay*1,clr);
         SetColorLevel(L2+DefDay*1.618,clr);
         SetColorLevel(L2+DefDay*2.618,clr);
         SetColorLevel(L2+DefDay*3.618,clr);
        }
      else
        {
         SetColorLevel(L1-DefDay*0.236,clr);
         SetColorLevel(L1-DefDay*0.382,clr);
         SetColorLevel(L1-DefDay*0.5,clr);
         SetColorLevel(L1-DefDay*0.618,clr);
         SetColorLevel(L1-DefDay*0.764,clr);

         SetColorLevel(L1+DefDay*0.236,clr);
         SetColorLevel(L1+DefDay*0.382,clr);
         SetColorLevel(L1+DefDay*0.5,clr);
         SetColorLevel(L1+DefDay*0.618,clr);
         SetColorLevel(L1+DefDay*1,clr);
         SetColorLevel(L1+DefDay*1.618,clr);
         SetColorLevel(L1+DefDay*2.618,clr);
         SetColorLevel(L1+DefDay*3.618,clr);

         SetColorLevel(L2-DefDay*0.236,clr);
         SetColorLevel(L2-DefDay*0.382,clr);
         SetColorLevel(L2-DefDay*0.5,clr);
         SetColorLevel(L2-DefDay*0.618,clr);
         SetColorLevel(L2-DefDay*1,clr);
         SetColorLevel(L2-DefDay*1.618,clr);
         SetColorLevel(L2-DefDay*2.618,clr);
         SetColorLevel(L2-DefDay*3.618,clr);
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void AddHiddenLevel(int period,double clr)
  {
   int ii;
   double c1,c2;

   ii=iBarShift(Symbol(),period,Time[DaysShift],true);
   if(ii!=-1)
     {
      if(iClose(Symbol(),period,ii+1+DaysShift)>=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<ObjectsTotal(OBJ_RECTANGLE);j++)
     {
      y1=ObjectGet(ObjectName(j),OBJPROP_PRICE1);
      y2=ObjectGet(ObjectName(j),OBJPROP_PRICE2);
      if(val<y1 && val>=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<ObjectsTotal(OBJ_RECTANGLE);j++)
     {
      if(StringFind(ObjectName(j),"res",0)>=0)
        {
         AddRedColor(ObjectName(j),clr);
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void MinusGreenColor(double clr)
  {
   for(int j=0;j<ObjectsTotal(OBJ_RECTANGLE);j++)
     {
      if(StringFind(ObjectName(j),"sup",0)>=0)
        {
         AddGreenColor(ObjectName(j),clr);
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void SetColorWhite(double clr)
  {
   for(int j=0;j<ObjectsTotal(OBJ_RECTANGLE);j++)
     {
      if(StringFind(ObjectName(j),"sup",0)>=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++;
     }
  }
//+------------------------------------------------------------------+

Comments