//+------------------------------------------------------------------+
//| Iandecoker's ADX Indicator
//+------------------------------------------------------------------+

#property copyright "blueruby"
#property link      ""


#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1  OrangeRed
#property indicator_color2  LawnGreen

#property indicator_width1  2
#property indicator_width2  2

extern int     ADXPeriod = 7;
extern double  ADXAlertLevel = 35;

extern bool    DisplayAlert = true,
               SoundON = true,
               EmailAlert = false;
               
double         ShortArrows[],
               LongArrows[];

bool           longSound = false,
               shortSound = false,
               firsttime = true; 

datetime       lastbar,
               currbar;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
      SetIndexBuffer(0, ShortArrows);
      SetIndexStyle(0, DRAW_ARROW);
      SetIndexArrow(0, 242);
      SetIndexLabel(0, "Short");

      SetIndexBuffer(1,LongArrows);
      SetIndexStyle(1, DRAW_ARROW);
      SetIndexArrow(1, 241);
      SetIndexLabel(1, "Long");

   Comment("Iandecoker ADX arrows 2.0 ON");

   return(0);
  }

//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   Comment ("");
      
//----
   return(0);
  }

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
   {
   int countedbars = IndicatorCounted();
   int barnum =  Bars - countedbars;   
   
   for ( ; barnum > 0; barnum --)
      {      
      double ADX1 = iADX(NULL,0,ADXPeriod,PRICE_CLOSE,0,barnum);
      double ADX2 = iADX(NULL,0,ADXPeriod,PRICE_CLOSE,0,barnum + 1);
      
      double DIpos1 = iADX(NULL,0,ADXPeriod,PRICE_CLOSE,MODE_PLUSDI,barnum);
      double DIneg1 = iADX(NULL,0,ADXPeriod,PRICE_CLOSE,MODE_MINUSDI,barnum);
      
      double DIpos2 = iADX(NULL,0,ADXPeriod,PRICE_CLOSE,MODE_PLUSDI,barnum + 1);
      double DIneg2 = iADX(NULL,0,ADXPeriod,PRICE_CLOSE,MODE_MINUSDI,barnum + 1);
         
         
      if (ADX1 >= ADXAlertLevel && DIpos1 >= ADXAlertLevel && (DIpos2 < ADXAlertLevel || ADX2 < ADXAlertLevel))
         {  
         LongArrows[barnum] = Low[barnum] - Point * 10;
         }
         
      if (ADX1 >= ADXAlertLevel && DIneg1 >= ADXAlertLevel && (DIneg2 < ADXAlertLevel || ADX2 < ADXAlertLevel))
         {
         ShortArrows[barnum] = High[barnum] + Point * 10;
         }
      }
     
   if(LongArrows[1] != EMPTY_VALUE && LongArrows[1] != 0 && longSound)
      {
      longSound = false;
      if (SoundON) PlaySound("timeout.wav");
      if (DisplayAlert) Alert("Iandecoker long alert on ",Symbol()," ",Period()," minutes");
      }
      
   if(!longSound && (LongArrows[1] == EMPTY_VALUE || LongArrows[1] == 0)) longSound = true;
      
   if(ShortArrows[1] != EMPTY_VALUE && ShortArrows[1] != 0 && shortSound)
      {
      shortSound = false;
      if (DisplayAlert) Alert("Iandecoker short alert on ",Symbol()," ",Period()," minutes");
      if (SoundON) PlaySound("timeout.wav");
      }
   
   if(!shortSound && (ShortArrows[1] == EMPTY_VALUE || ShortArrows[1] == 0)) shortSound = true;   
      
   return(0);
   }
//+------------------------------------------------------------------+