//+------------------------------------------------------------------+
//|                                                  MACD Signal.mq4 |
//|                              Copyright © 2011, Khlystov Vladimir |
//|                                         http://cmillion.narod.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, cmillion@narod.ru"
#property link      "http://cmillion.narod.ru"
#property  indicator_separate_window
#property  indicator_buffers 6
#property  indicator_color1  Black
#property  indicator_color2  Gray
#property  indicator_color3  Green
#property  indicator_color4  Red
#property  indicator_color5  Blue
#property  indicator_color6  Red
#property  indicator_width7  2

extern int FastEMA   = 12;
extern int SlowEMA   = 26;
extern int SignalSMA = 9;

double     MacdBuffer[];
double     MacdBufferRed[];
double     MacdBufferBlue[];
double     SignalBuffer[];
double     SignalBufferRed[];
double     SignalBufferBlue[];

int init()
  {
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexDrawBegin(1,SignalSMA);
   IndicatorDigits(Digits+1);
   SetIndexStyle(2,DRAW_HISTOGRAM);
   SetIndexStyle(3,DRAW_HISTOGRAM);
   SetIndexStyle(4,DRAW_ARROW,0,2);
   SetIndexArrow(4,233);
   SetIndexStyle(5,DRAW_ARROW,0,2);
   SetIndexArrow(5,234);

   SetIndexBuffer(0,MacdBuffer);
   SetIndexBuffer(1,SignalBuffer);
   SetIndexBuffer(2,MacdBufferRed);
   SetIndexBuffer(3,MacdBufferBlue);
   SetIndexBuffer(4,SignalBufferRed);
   SetIndexBuffer(5,SignalBufferBlue);

   IndicatorShortName("MACD("+FastEMA+","+SlowEMA+","+SignalSMA+")");
   SetIndexLabel(0,"MACD");
   SetIndexLabel(1,"Signal");

   return(0);
  }

int start()
  {
   int limit;
   int counted_bars=IndicatorCounted();

   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;

   for(int i=0; i<limit; i++)
      MacdBuffer[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++)
      SignalBuffer[i]=iMAOnArray(MacdBuffer,Bars,SignalSMA,0,MODE_SMA,i);

   for(i=0; i<limit; i++)
      if (MacdBuffer[i+1]<MacdBuffer[i]) MacdBufferRed[i]=MacdBuffer[i];
      else MacdBufferBlue[i]=MacdBuffer[i];

   for(i=0; i<limit; i++)
   {
      if (SignalBuffer[i+1]<MacdBuffer[i+1] && SignalBuffer[i]>MacdBuffer[i]) SignalBufferBlue[i]=SignalBuffer[i];
      if (SignalBuffer[i+1]>MacdBuffer[i+1] && SignalBuffer[i]<MacdBuffer[i]) SignalBufferRed[i]=SignalBuffer[i];
   }

   return(0);
  }
//+------------------------------------------------------------------+