//+------------------------------------------------------------------+
//|                                       Flatliner (by hanover).mq4 |
//+------------------------------------------------------------------+

#property indicator_separate_window
#property indicator_minimum -1
#property indicator_maximum 1
#property indicator_level1 0
#property indicator_levelcolor Silver
#property indicator_levelstyle STYLE_DOT

#property indicator_buffers 2
#property indicator_color1  DodgerBlue
#property indicator_width1  1
#property indicator_color2  Red
#property indicator_width1  1

extern string  _Info                    = "Flatliner using Zigzag";
extern int     _PeriodLast_Backstep     = 5;
extern int     _PeriodPips_Deviation    = 14;
extern int     _PeriodBars_Depth        = 100;
extern int     _barcount                = 3000;

double     ind_buffer1[];
double     ind_buffer2[];

//+------------------------------------------------------------------+
int init()  {
//+------------------------------------------------------------------+
  IndicatorShortName("Flatliner (using Zigzag)");
  SetIndexStyle(0,DRAW_HISTOGRAM,1,DodgerBlue);
  SetIndexBuffer(0,ind_buffer1);
  SetIndexDrawBegin(0,0);
  ArrayInitialize(ind_buffer1,EMPTY_VALUE);

  SetIndexStyle(1,DRAW_HISTOGRAM,1,Red);
  SetIndexBuffer(1,ind_buffer2);
  SetIndexDrawBegin(1,0);
  ArrayInitialize(ind_buffer2,EMPTY_VALUE);
  return(0);

}

//+------------------------------------------------------------------+
int deinit()  {
//+------------------------------------------------------------------+
  return(0);
}

//+------------------------------------------------------------------+
int start()   {
//+------------------------------------------------------------------+
  int flat_value = 0;
  double prev_buf1 = 0;
  double prev_buf2 = 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)  {
       if(prev_buf1>0) {ind_buffer1[i] = prev_buf1; ind_buffer2[i] =EMPTY_VALUE;}
       if(prev_buf2<0) {ind_buffer2[i] = prev_buf2; ind_buffer1[i] =EMPTY_VALUE;}
}
    else {
      flat_value = MathSign(prev_zz-zz);
      prev_zz = zz;
     if(flat_value>0){ ind_buffer1[i] = flat_value; prev_buf1 = flat_value; ind_buffer2[i] =EMPTY_VALUE; prev_buf2=0;}
     if(flat_value<0){ ind_buffer2[i] = flat_value; prev_buf2 = flat_value; ind_buffer1[i] =EMPTY_VALUE; prev_buf1=0;}
    }
  }  
  return(0);
}

//+------------------------------------------------------------------+
int MathSign(double n)  {
//+------------------------------------------------------------------+
  if (n > 0) return(1);
  else if (n < 0) return (-1);
  else return(0);
}  
//+------------------------------------------------------------------+

