//+------------------------------------------------------------------+
//|                                            MACD trad colored.mq4 |
//+------------------------------------------------------------------+

//---- indicator settings
#property  indicator_separate_window

#property indicator_level1 0
#property indicator_levelcolor DarkGray
#property indicator_levelwidth 1
#property indicator_levelstyle STYLE_SOLID

#property  indicator_buffers 6
#property  indicator_color1  White
#property  indicator_color2  White
#property  indicator_style2  STYLE_DOT
#property  indicator_color3  DarkGreen
#property  indicator_width3  3
#property  indicator_color4  Lime
#property  indicator_width4  3
#property  indicator_color5  Maroon
#property  indicator_width5  3
#property  indicator_color6  Red
#property  indicator_width6  3

extern int      FastEMA          = 12;
extern int      SlowEMA          = 26;
extern int      SignalEMA        = 9;
extern double   HistogramScaling = 1;

double     ind_buffer1[];
double     ind_buffer2[];
double     ind_buffer3[];
double     ind_buffer4[];
double     ind_buffer5[];
double     ind_buffer6[];

//+------------------------------------------------------------------+
int init()  {
//+------------------------------------------------------------------+
   SetIndexStyle(2,DRAW_HISTOGRAM,STYLE_SOLID);
   SetIndexStyle(3,DRAW_HISTOGRAM,STYLE_SOLID);
   SetIndexStyle(4,DRAW_HISTOGRAM,STYLE_SOLID);
   SetIndexStyle(5,DRAW_HISTOGRAM,STYLE_SOLID);
   SetIndexDrawBegin(1,SignalEMA);
   SetIndexDrawBegin(2,SignalEMA);
   IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS)+1);

   SetIndexBuffer(0,ind_buffer1);
   SetIndexBuffer(1,ind_buffer2);
   SetIndexBuffer(2,ind_buffer3);
   SetIndexBuffer(3,ind_buffer4);
   SetIndexBuffer(4,ind_buffer5);
   SetIndexBuffer(5,ind_buffer6);

   IndicatorShortName("MACD("+FastEMA+","+SlowEMA+","+SignalEMA+")");
//   SetIndexLabel(0,"MACD");
//   SetIndexLabel(1,"Signal");
//   SetIndexLabel(2,"Histogram");

   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++)
    ind_buffer1[i] = iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i);
  for (i=0; i<limit; i++)
    ind_buffer2[i] = iMAOnArray(ind_buffer1,Bars,SignalEMA,0,MODE_EMA,i);
  for (i=0; i<limit; i++)  {
    double hv0 = HistogramScaling*(ind_buffer1[i]-ind_buffer2[i]);
    double hv1 = HistogramScaling*(ind_buffer1[i+1]-ind_buffer2[i+1]);
    if (hv0 >= 0 && hv0 >= hv1)   ind_buffer4[i]= hv0;      else
    if (hv0 >= 0 && hv0 < hv1)    ind_buffer3[i]= hv0;      else
    if (hv0 < 0  && hv0 >= hv1)   ind_buffer5[i]= hv0;      else
    if (hv0 < 0  && hv0 < hv1)    ind_buffer6[i]= hv0;
  }
  return(0);
}