0
Views
0
Downloads
0
Favorites
Wilder's DMI
//+------------------------------------------------------------------+
//| Wilder's DMI.mq4 |
//| coded by mladen |
//| |
//| Directional movement index was developed by Welles Wilder |
//+------------------------------------------------------------------+
#property copyright "mladen"
#property link "mladenfx@gmail.com"
#property indicator_separate_window
#property indicator_buffers 5
#property indicator_minimum 0
#property indicator_color1 Lime
#property indicator_color2 Tomato
#property indicator_color3 DimGray
#property indicator_color4 Orange
#property indicator_color5 DimGray
#property indicator_width3 2
#property indicator_width4 2
#property indicator_style1 STYLE_DOT
#property indicator_style2 STYLE_DOT
#property indicator_style5 STYLE_DOT
//
//
//
//
//
extern int DMI.Length = 14;
extern bool ShowADX = true;
extern bool ShowADXR = false;
extern int Level = 20;
//
//
//
//
//
double DIp[];
double DIm[];
double ADX[];
double ADXR[];
double ADXLevel[];
double averageDIp[];
double averageDIm[];
double averageTR[];
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
//
//
//
//
int init()
{
IndicatorBuffers(8);
SetIndexBuffer(0,DIp); SetIndexLabel(0,"DI+");
SetIndexBuffer(1,DIm); SetIndexLabel(1,"DI-");
SetIndexBuffer(2,ADX); SetIndexLabel(2,"ADX");
SetIndexBuffer(3,ADXR); SetIndexLabel(3,"ADXR");
SetIndexBuffer(4,ADXLevel); SetIndexLabel(4,NULL);
SetIndexBuffer(5,averageDIp);
SetIndexBuffer(6,averageDIm);
SetIndexBuffer(7,averageTR);
for (int i=0;i<8;i++) SetIndexEmptyValue(i,0.00);
//
//
//
//
//
IndicatorShortName("Wilder\'s DMI ("+DMI.Length+")");
return(0);
}
int deinit()
{
return(0);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
//
//
//
//
//
int start()
{
int counted_bars=IndicatorCounted();
int i,limit;
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
limit=MathMin(limit,Bars-2);
//
//
//
//
//
double sf = 1.0/DMI.Length;
for (i=limit;i>=0;i--)
{
double currTR = MathMax(High[i],Close[i+1])-MathMin(Low[i],Close[i+1]);
double DeltaHi = High[i] - High[i+1];
double DeltaLo = Low[i+1] - Low[i];
double plusDM = 0.00;
double minusDM = 0.00;
if ((DeltaHi > DeltaLo) && (DeltaHi > 0)) plusDM = DeltaHi;
if ((DeltaLo > DeltaHi) && (DeltaLo > 0)) minusDM = DeltaLo;
//
//
//
//
//
averageDIp[i] = averageDIp[i+1] + sf*(plusDM - averageDIp[i+1]);
averageDIm[i] = averageDIm[i+1] + sf*(minusDM - averageDIm[i+1]);
averageTR[i] = averageTR[i+1] + sf*(currTR - averageTR[i+1]);
ADXLevel[i] = Level;
//
//
//
//
//
DIp[i] = 0.00;
DIm[i] = 0.00;
if (averageTR[i] > 0)
{
DIp[i] = 100.00 * averageDIp[i]/averageTR[i];
DIm[i] = 100.00 * averageDIm[i]/averageTR[i];
}
if(ShowADX)
{
double DX;
if((DIp[i] + DIm[i])>0)
DX = 100*MathAbs(DIp[i] - DIm[i])/(DIp[i] + DIm[i]);
else DX = 0.00;
ADX[i] = ADX[i+1] + sf*(DX - ADX[i+1]);
if(ShowADXR)
ADXR[i] = 0.5*(ADX[i] + ADX[i+DMI.Length]);
}
}
return(0);
}
Comments
Markdown Formatting Guide
# H1
## H2
### H3
**bold text**
*italicized text*
[title](https://www.example.com)

`code`
```
code block
```
> blockquote
- Item 1
- Item 2
1. First item
2. Second item
---