//+------------------------------------------------------------------+
//|                                       Flatliner (by hanover).mq4 |
//+------------------------------------------------------------------+

#property indicator_separate_window
#property indicator_minimum -2
#property indicator_maximum 2
#property indicator_level1 0
#property indicator_levelcolor Aqua
#property indicator_levelstyle STYLE_SOLID 
#property indicator_levelwidth 4

#property indicator_buffers 1
#property indicator_color1  Black
#property indicator_width1  3

extern string  _Info                    = "Flatliner using Zigzag";
extern int     _PeriodLast_Backstep     = 3;
extern int     _PeriodPips_Deviation    = 12;
extern int     _PeriodBars_Depth        = 50;
extern int     _barcount                = 3000;

double     ind_buffer1[];

//+------------------------------------------------------------------+
int init()  {
//+------------------------------------------------------------------+
  IndicatorShortName("Flatliner (using Zigzag)");
  SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,3,Black);
  SetIndexBuffer(0,ind_buffer1);
  SetIndexDrawBegin(0,0);
  ArrayInitialize(ind_buffer1,EMPTY_VALUE);
  return(0);

}

//+------------------------------------------------------------------+
int deinit()  {
//+------------------------------------------------------------------+
  return(0);
}

//+------------------------------------------------------------------+
int start()   {
//+------------------------------------------------------------------+
  int flat_value = 0;
  double prev_zz = 0;
  for (int i=MathMin(Bars-10,_barcount); i>=0; i--)   {
    double zz = iCustom(Symbol(),Period(),"ZigZag",_PeriodBars_Depth,_PeriodPips_Deviation,_PeriodLast_Backstep,0,i);
    if (zz==0 || zz==EMPTY || zz==EMPTY_VALUE)  
      ind_buffer1[i] = flat_value;
    else {
      flat_value = MathSign(prev_zz-zz);
      prev_zz = zz;
      ind_buffer1[i] = flat_value;
    }
  }  
  return(0);
}

//+------------------------------------------------------------------+
int MathSign(double n)  {
//+------------------------------------------------------------------+
  if (n > 0) return(1);
  else if (n < 0) return (-1);
  else return(0);
}  
//+------------------------------------------------------------------+

