!_Macd





//+------------------------------------------------------------------+
//|                                                                  |
//|                 Copyright © 1999-2008, MetaQuotes Software Corp. |
//|                                         http://www.metaquotes.ru |
//+------------------------------------------------------------------+
#property link "jpygbp@yahoo.com"
#property indicator_buffers 5
#property indicator_separate_window
//----
#property indicator_color1 HotPink //macd
#property indicator_color2 Lime    //signal
#property indicator_color3 Gray    //histogram
#property indicator_color4 Blue    //macd[1]
#property indicator_color5 Black   //zero line
//---- buffers
double Buffer1[]; //macd
double Buffer2[]; //signal
double Buffer3[]; //histogram
double Buffer4[]; //macd[1]
double Buffer5[]; //zero line
//----
extern int FastEMA=9;
extern int SlowEMA=64;
extern int SignalSMA=112;
//extern bool plotMACD = true;
//extern bool plotSignalLine = true;
//extern bool plotHistogram = true;
//extern bool plotMACDOneBarAgo = true;
//extern bool plotZeroLine = true;
extern bool plotArrows=false;
extern double HistThreshold=0;
//----
int limit=0;
int fontsize=10;
int i=0;
bool InLTrade=false;
bool InSTrade=false;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
  {
   ObjectsDeleteAll();
//---- indicators
   SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);//macd
   SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,2);//signal
   SetIndexStyle(2,DRAW_HISTOGRAM,STYLE_SOLID,2);//hist
   SetIndexStyle(3,DRAW_LINE,STYLE_SOLID,2);//macd[1]
   SetIndexStyle(4,DRAW_LINE,STYLE_SOLID,1);//zero
   //
   SetIndexBuffer(0,Buffer1);
   SetIndexBuffer(1,Buffer2);
   SetIndexBuffer(2,Buffer3);
   SetIndexBuffer(3,Buffer4);
   SetIndexBuffer(4,Buffer5);
   //
   SetIndexDrawBegin(1,SignalSMA);
   //
   IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS)+1);
   //
   IndicatorShortName("MACD("+FastEMA+","+SlowEMA+","+SignalSMA+")");
   //
   SetIndexLabel(0,"MACD");
   SetIndexLabel(1,"Signal");
   SetIndexLabel(2,"Histogram");
   SetIndexLabel(3,"MACD[1]");
   SetIndexLabel(4,"Zero");
   //----
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
string NewArrow(datetime T1, double P1, color collor)
  {
   string N=StringConcatenate("A",collor,"-",TimeToStr(T1));
   int AC=SYMBOL_STOPSIGN;
   if(collor==Blue)
      AC=SYMBOL_ARROWUP;
   if(collor==Red)
      AC=SYMBOL_ARROWDOWN;
   //----
   ObjectCreate(N, OBJ_ARROW, 0, T1, P1);
   ObjectSet(N, OBJPROP_ARROWCODE, AC);
   ObjectSet(N, OBJPROP_COLOR, collor);
   ObjectSet(N, OBJPROP_WIDTH, 1);
   ObjectsRedraw();
   return(N);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int deinit()
  {
   ObjectsRedraw();
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   int counted_bars=IndicatorCounted();
   if(counted_bars<0) return(-1);//---- check for possible errors
   if(counted_bars>0) counted_bars--;//---- last counted bar will be recounted
   limit=Bars-counted_bars;
   //----
   for(i=0; i<limit; i++)//---- macd counted in the 1-st buffer histogram
      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++)//---- signal line counted in the 2-nd buffer line
      Buffer2[i]=iMAOnArray(Buffer1,Bars,SignalSMA,0,MODE_SMA,i);
   //----
   for(i=0; i<limit; i++)//---- histogram is the difference between macd and signal line
     {
      Buffer3[i]=Buffer1[i]-Buffer2[i];
      Buffer5[i]=0;
     }
   //----
   for(i=1; i<limit; i++)//---- macd[1]
      Buffer4[i]=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i-1)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i-1);
   //----
   if (plotArrows)
     {
      ObjectsDeleteAll();
      InLTrade=false;
      InSTrade=false;
      for(int i=Bars;i>=0;i--)
        {
         if ((Buffer3[i-1]  > 0) && (Buffer3[i] < 0) && Buffer3[i-1] > HistThreshold)//Long Begin
           {
            string upArrow1=NewArrow(Time[i-1], High[i-1]+0.0005, Blue);
            InLTrade=true;
           }
         if ((Buffer3[i-1]  < 0) && (Buffer3[i] > 0) && Buffer3[i-1] < -HistThreshold)//Short Begin
           {
            string dnArrow1=NewArrow(Time[i-1], Low[i-1]-0.0003, Red);
            InSTrade=true;
            InLTrade=false;
           }
         if ((InSTrade ==true) && (Buffer3[i-1] > Buffer3[i]))//Short End
           {
            string upArrow2=NewArrow(Time[i-1], Low[i-1]-0.0003, Aqua);
            InSTrade=false;
           }
         if ((InLTrade==true) && (Buffer3[i-1] < Buffer3[i]))//Long End
           {
            string dnArrow2=NewArrow(Time[i-1], High[i-1]+0.0005, Aqua);
            InLTrade=false;
           }
        }
     }
   //----
   return(0);
  }
//+------------------------------------------------------------------+



Sample





Analysis



Market Information Used:

Series array that contains the highest prices of each bar
Series array that contains open time of each bar
Series array that contains the lowest prices of each bar


Indicator Curves created:

Implements a curve of type DRAW_LINE
Implements a curve of type DRAW_HISTOGRAM


Indicators Used:

Moving average indicator


Custom Indicators Used:

Order Management characteristics:

Other Features: