//+------------------------------------------------------------------+
//|                                                       ADX_MA.mq4 |
//|                                    Copyright © 2011, Robert Hill |
//|                                                                  |
//| Plots the ADX with MA of ADX                                     |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, Robert Hill"
#property link      "http://www.mrpipforex.com/"

#property indicator_separate_window
#property indicator_buffers 4
#property indicator_color1 Aqua
#property indicator_color2 Lime
#property indicator_color3 Wheat
#property indicator_color4 Red
#property indicator_width1 1
#property indicator_width2 1
#property indicator_width3 1
#property indicator_width4 1


extern int ADX_Period = 14;
extern string  p = "--Applied Price Types--";
extern string  p0 = " 0 = close";
extern string  p1 = " 1 = open";
extern string  p2 = " 2 = high";
extern string  p3 = " 3 = low";
extern string  p4 = " 4 = median(high+low)/2";
extern string  p5 = " 5 = typical(high+low+close)/3";
extern string  p6 = " 6 = weighted(high+low+close+close)/4";
extern int ADX_Price = 0;

extern int MA_Period = 21;
extern string  m = "--Moving Average Modes--";
extern string  m0 = " 0 = SMA";
extern string  m1 = " 1 = EMA";
extern string  m2 = " 2 = SMMA";
extern string  m3 = " 3 = LWMA";
extern int MA_Mode = 0;
int MAMode;

double ADX[];
double plusDI[];
double minusDI[];
double ADX_MA[];

int init() {
   string strMAType;
   
   SetIndexStyle(0, DRAW_LINE, STYLE_SOLID);
   SetIndexBuffer(0, ADX);
   SetIndexStyle(1, DRAW_LINE, STYLE_DOT);
   SetIndexBuffer(1, plusDI);
   SetIndexStyle(2, DRAW_LINE, STYLE_DOT);
   SetIndexBuffer(2, minusDI);
   SetIndexStyle(3, DRAW_LINE, STYLE_SOLID);
   SetIndexBuffer(3, ADX_MA);
   switch (MA_Mode)
   {
      case 1: strMAType="EMA"; MAMode=MODE_EMA; break;
      case 2: strMAType="SMMA"; MAMode=MODE_SMMA; break;
      case 3: strMAType="LWMA"; MAMode=MODE_LWMA; break;
      default: strMAType="SMA"; MAMode=MODE_SMA; break;
   }
   IndicatorShortName("ADX_MA(" + ADX_Period + ") " + strMAType + "(" + MA_Period + ")");
   SetIndexLabel(0, "ADX");
   SetIndexLabel(1, "plusDI");
   SetIndexLabel(2, "minusDI");
   SetIndexLabel(3, "ADX_MA");
   return (0);
}

int deinit() {
   return (0);
}

int start() {
   int counted_bars = IndicatorCounted();
   if (counted_bars < 0) return (-1);
   if (counted_bars > 0) counted_bars--;
   int limit = Bars - counted_bars;
   for (int i = 0; i < limit; i++) {
      ADX[i] = iADX(NULL, 0, ADX_Period, ADX_Price, MODE_MAIN, i);
      plusDI[i] = iADX(NULL, 0, ADX_Period, ADX_Price, MODE_PLUSDI, i);
      minusDI[i] = iADX(NULL, 0, ADX_Period, ADX_Price, MODE_MINUSDI, i);
   }
   for ( i = 0; i < limit; i++) {
      ADX_MA[i]=iMAOnArray(ADX,Bars,MA_Period,0,MAMode,i);
   }
   return (0);
}

