ADX Welles Wilder Classic Version

 

Hi, ADX is the powerfull popular indicator in the markets, from "New Concepts in Technical Trading Systems" Book by J. Welles Wilder Jr.

Knowing the ADX of all time charts gives you a good idea if there is a trend, and if it is starting or ending. Just read the combination. When this smooth indicator turns from the 45 mark at least a bullish or bearish correction is taking place. 

Indicator is attached and the Source Code is below.

Att


Code:

//+------------------------------------------------------------------+
//|                                                          ADX.mq4 |
//+------------------------------------------------------------------+
#property copyright   "http://www.FinanceWave.com™"

#property indicator_separate_window
#property indicator_buffers 3
#property indicator_color1 DarkGray
#property indicator_color2 Blue
#property indicator_color3 Red
#property indicator_level1 45

double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];

double TR[];
double ph[];
double pl[];
double maisdx[];
double menosdx[];
double ATR[];
double maisdxSM[];
double menosdxSM[];
double maisDMI[];
double menosDMI[];
double DX[];
double ADX[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
{
  SetIndexStyle(0,DRAW_LINE,0,2);
  SetIndexStyle(1,DRAW_NONE,0,0);
  SetIndexStyle(2,DRAW_NONE,0,0);
  SetIndexBuffer(0,ExtMapBuffer1);
  SetIndexBuffer(1,ExtMapBuffer2);
  SetIndexBuffer(2,ExtMapBuffer3);

  ArraySetAsSeries(TR,true);
  ArrayResize(TR, Bars-1);  
  ArraySetAsSeries(ph,true);
  ArrayResize(ph, Bars-1);  
  ArraySetAsSeries(pl,true);
  ArrayResize(pl, Bars-1);  
  ArraySetAsSeries(maisdx,true);
  ArrayResize(maisdx, Bars-1);  
  ArraySetAsSeries(menosdx,true);
  ArrayResize(menosdx, Bars-1);  
  ArraySetAsSeries(ATR,true);
  ArrayResize(ATR, Bars-1);  
  ArraySetAsSeries(maisdxSM,true);
  ArrayResize(maisdxSM, Bars-1);  
  ArraySetAsSeries(menosdxSM,true);
  ArrayResize(menosdxSM, Bars-1);  
  ArraySetAsSeries(maisDMI,true);
  ArrayResize(maisDMI, Bars-1);  
  ArraySetAsSeries(menosDMI,true);
  ArrayResize(menosDMI, Bars-1);  
  ArraySetAsSeries(DX,true);
  ArrayResize(DX, Bars-1);  
  ArraySetAsSeries(ADX,true);
  ArrayResize(ADX, Bars-1);  

  return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit() {
   return(0);
}
//+------------------------------------------------------------------+
//| ADX                                                              |
//+------------------------------------------------------------------+
int start()
{

for(int i = Bars-2;i>=0;i--)
{TR[i]=MathMax(MathMax(MathMax(MathMax(High[i]-Low[i],High[i]-Close[i+1]),Close[i+1]-High[i]),Low[i]-Close[i+1]),Close[i+1]-Low[i]);
ph[i]=(High[i]-High[i+1]);pl[i]=(Low[i+1]-Low[i]);}

for(i = Bars-2;i>=0;i--)
{if(ph[i]>pl[i] && ph[i]>0)
{maisdx[i]=ph[i];}
else
{maisdx[i]=0;}
if(pl[i]>ph[i] && pl[i]>0)
{menosdx[i]=pl[i];}
else
{menosdx[i]=0;}}

for(i = Bars-14;i>=0;i--)
{if(i == Bars-14)
{ATR[i]=( TR[i]+TR[i+1]+TR[i+2]+TR[i+3]+TR[i+4]+TR[i+5]+TR[i+6]+TR[i+7]+TR[i+8]+TR[i+9]+TR[i+10]+TR[i+11]+TR[i+12]+TR[i+13] )/14;}
else
{ATR[i]=(ATR[i+1]*13+TR[i])/14;}
if(i == Bars-14)
{maisdxSM[i]=(maisdx[i]+maisdx[i+1]+maisdx[i+2]+maisdx[i+3]+maisdx[i+4]+maisdx[i+5]+maisdx[i+6]+maisdx[i+7]+maisdx[i+8]+maisdx[i+9]+maisdx[i+10]+maisdx[i+11]+maisdx[i+12]+maisdx[i+13] )/14;
menosdxSM[i]=(menosdx[i]+menosdx[i+1]+menosdx[i+2]+menosdx[i+3]+menosdx[i+4]+menosdx[i+5]+menosdx[i+6]+menosdx[i+7]+menosdx[i+8]+menosdx[i+9]+menosdx[i+10]+menosdx[i+11]+menosdx[i+12]+menosdx[i+13] )/14;}
else
{maisdxSM[i]=(maisdxSM[i+1]*13+maisdx[i])/14;
menosdxSM[i]=(menosdxSM[i+1]*13+menosdx[i])/14;}}

for(i = Bars-14;i>=0;i--)
{if(ATR[i]>0){maisDMI[i]=(maisdxSM[i]/ATR[i])*100;}else{maisDMI[i]=0;}
if(ATR[i]>0){menosDMI[i]=(menosdxSM[i]/ATR[i])*100;}else{menosDMI[i]=0;}}

for(i = Bars-14;i>=0;i--)
{if(maisDMI[i]+menosDMI[i]>0){DX[i]=(MathMax(maisDMI[i]-menosDMI[i],menosDMI[i]-maisDMI[i])/(maisDMI[i]+menosDMI[i]))*100;}else{DX[i]=0;}}

for(i = Bars-27;i>=0;i--)
{if(i == Bars-27)
{ADX[i]=( DX[i]+DX[i+1]+DX[i+2]+DX[i+3]+DX[i+4]+DX[i+5]+DX[i+6]+DX[i+7]+DX[i+8]+DX[i+9]+DX[i+10]+DX[i+11]+DX[i+12]+DX[i+13] )/14;}
else
{ADX[i]=(ADX[i+1]*13+DX[i])/14;}}

for(i = Bars-27;i>=0;i--)
{
ExtMapBuffer1[i]=ADX[i];
ExtMapBuffer2[i]=maisDMI[i];
ExtMapBuffer3[i]=menosDMI[i];
}

        return(0);
}
//+------------------------------------------------------------------+
Files:
ADX.mq4  9 kb