MacdACSignals





//+------------------------------------------------------------------+
//|                                            MacdACSignals.mq4.mq4 |
//|                                              Tonkonog G.S., 2009 |
//|                                            hurricane79@yandex.ru |
//+------------------------------------------------------------------+
#property copyright "Tonkonog G.S., 2009"
#property link      "hurricane79@yandex.ru"

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Gold
#property indicator_color2 Red
//---- input parameters
extern int       barsToProcess=500;
//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_ARROW);
   SetIndexArrow(0,236);
   SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexEmptyValue(0,0.0);
   SetIndexStyle(1,DRAW_ARROW);
   SetIndexArrow(1,238);
   SetIndexBuffer(1,ExtMapBuffer2);
   SetIndexEmptyValue(1,0.0);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);  
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int counted_bars=IndicatorCounted(),
       limit;
//---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
   
   if(limit>barsToProcess)
      limit=barsToProcess;
//----
   for(int i=0;i<limit;i++)
   {
    double MacdCurrent, MacdPrevious, SignalCurrent, SignalPrevious,
           AC1,AC2,AC3,AC4,AC5,
           AC1_1,AC2_1,AC3_1,AC4_1,AC5_1,
           AC1_2,AC2_2,AC3_2,AC4_2,AC5_2,
           AC1_3,AC2_3,AC3_3,AC4_3,AC5_3,
           AC1_4,AC2_4,AC3_4,AC4_4,AC5_4;
           
           
    MacdCurrent=iMACD(NULL,0,5,34,5,PRICE_CLOSE,MODE_MAIN,i);
    MacdPrevious=iMACD(NULL,0,5,34,5,PRICE_CLOSE,MODE_MAIN,i+1);
    SignalCurrent=iMACD(NULL,0,5,34,5,PRICE_CLOSE,MODE_SIGNAL,i);
    SignalPrevious=iMACD(NULL,0,5,34,5,PRICE_CLOSE,MODE_SIGNAL,i+1);
    AC1=iAC(NULL,0,i);   AC1_1=iAC(NULL,0,i+1); AC1_2=iAC(NULL,0,i+2);
    AC2=iAC(NULL,0,i+1); AC2_1=iAC(NULL,0,i+2); AC2_2=iAC(NULL,0,i+3);
    AC3=iAC(NULL,0,i+2); AC3_1=iAC(NULL,0,i+3); AC3_2=iAC(NULL,0,i+4);
    AC4=iAC(NULL,0,i+3); AC4_1=iAC(NULL,0,i+4); AC4_2=iAC(NULL,0,i+5);
    AC5=iAC(NULL,0,i+4); AC5_1=iAC(NULL,0,i+5); AC5_2=iAC(NULL,0,i+6);
    
    AC1_3=iAC(NULL,0,i+3); AC1_4=iAC(NULL,0,i+4);
    AC2_3=iAC(NULL,0,i+4); AC2_4=iAC(NULL,0,i+5);
    AC3_3=iAC(NULL,0,i+5); AC3_4=iAC(NULL,0,i+6);
    AC4_3=iAC(NULL,0,i+6); AC4_4=iAC(NULL,0,i+7);
    AC5_3=iAC(NULL,0,i+7); AC5_4=iAC(NULL,0,i+8);
    
//--Ïðîâåðêà íàëè÷èÿ ñèãíàëà íà ïîêóïêó--------------------------------------------------------------------------------------+    
    if((MacdCurrent>0 && MacdCurrent>SignalCurrent && MacdPrevious<SignalPrevious) &&
      (((AC4>0 && AC3>0 && AC2>0 && AC1>0) && (AC4>AC3 && AC2>AC3 && AC1>AC2)) ||                     //... íà íóëåâîì áàðå  +
      ((AC4<0 && AC3<0 && AC2<0 && AC1>0) && (AC4>AC3 && AC2>AC3 && AC1>AC2)) ||                     //   åñòü îäèí èç òð¸õ  +
      ((AC5<0 && AC4<0 && AC3<0 && AC2<0 && AC1<0) &&                                               // ñèãíàëîâ îò ÀÑ òî ... +
      (AC5>AC4 && AC4<AC3 && AC3<AC2 && AC2<AC1))))                                                 //                       +
       ExtMapBuffer1[i]=High[i]+15*Point;
    if((MacdCurrent>0 && MacdPrevious<0) &&                                // Åñëè MACD-ãèñòîãðàììà ïåðåøëà ÷åðåç íîëü è ... +
      (((AC4>0 && AC3>0 && AC2>0 && AC1>0) && (AC4>AC3 && AC2>AC3 && AC1>AC2)) ||                     //... íà íóëåâîì áàðå  +
      ((AC4<0 && AC3<0 && AC2<0 && AC1>0) && (AC4>AC3 && AC2>AC3 && AC1>AC2)) ||                     //   åñòü îäèí èç òð¸õ  +
      ((AC5<0 && AC4<0 && AC3<0 && AC2<0 && AC1<0) &&                                               // ñèãíàëîâ îò ÀÑ òî ... +
      (AC5>AC4 && AC4<AC3 && AC3<AC2 && AC2<AC1))))                                                 //                       +
       ExtMapBuffer1[i]=High[i]+15*Point;                                                           // ... ðèñóåì ñòðåëêó    + 
 
 
    if((MacdCurrent>0 && MacdCurrent>SignalCurrent && MacdPrevious<SignalPrevious) &&
      (((AC4_1>0 && AC3_1>0 && AC2_1>0 && AC1_1>0) && (AC4_1>AC3_1 && AC2_1>AC3_1 && AC1_1>AC2_1)) || // ... íà ïåðâîì áàðå  +
      ((AC4_1<0 && AC3_1<0 && AC2_1<0 && AC1_1>0) && (AC4_1>AC3_1 && AC2_1>AC3_1 && AC1_1>AC2_1)) || //   åñòü îäèí èç òð¸õ  +
      ((AC5_1<0 && AC4_1<0 && AC3_1<0 && AC2_1<0 && AC1_1<0) &&                                     // ñèãíàëîâ îò ÀÑ òî ... +
      (AC5_1>AC4_1 && AC4_1<AC3_1 && AC3_1<AC2_1 && AC2_1<AC1_1))))                                 //                       +
       ExtMapBuffer1[i]=High[i]+15*Point;                                                           // ... ðèñóåì ñòðåëêó    +    
    if((MacdCurrent>0 && MacdPrevious<0) &&                                // Åñëè MACD-ãèñòîãðàììà ïåðåøëà ÷åðåç íîëü è ... +
      (((AC4_1>0 && AC3_1>0 && AC2_1>0 && AC1_1>0) && (AC4_1>AC3_1 && AC2_1>AC3_1 && AC1_1>AC2_1)) || // ... íà ïåðâîì áàðå  +
      ((AC4_1<0 && AC3_1<0 && AC2_1<0 && AC1_1>0) && (AC4_1>AC3_1 && AC2_1>AC3_1 && AC1_1>AC2_1)) || //   åñòü îäèí èç òð¸õ  +
      ((AC5_1<0 && AC4_1<0 && AC3_1<0 && AC2_1<0 && AC1_1<0) &&                                     // ñèãíàëîâ îò ÀÑ òî ... +
      (AC5_1>AC4_1 && AC4_1<AC3_1 && AC3_1<AC2_1 && AC2_1<AC1_1))))                                 //                       +
       ExtMapBuffer1[i]=High[i]+15*Point;                                                           // ... ðèñóåì ñòðåëêó    + 

    
    if((MacdCurrent>0 && MacdCurrent>SignalCurrent && MacdPrevious<SignalPrevious) &&
      (((AC4_2>0 && AC3_2>0 && AC2_2>0 && AC1_2>0) && (AC4_2>AC3_2 && AC2_2>AC3_2 && AC1_2>AC2_2)) || // ... íà âòîðîì áàðå  +
      ((AC4_2<0 && AC3_2<0 && AC2_2<0 && AC1_2>0) && (AC4_2>AC3_2 && AC2_2>AC3_2 && AC1_2>AC2_2)) || //   åñòü îäèí èç òð¸õ  +
      ((AC5_2<0 && AC4_2<0 && AC3_2<0 && AC2_2<0 && AC1_2<0) &&                                     // ñèãíàëîâ îò ÀÑ òî ... +
      (AC5_2>AC4_2 && AC4_2<AC3_2 && AC3_2<AC2_2 && AC2_2<AC1_2))))                                 //                       +
       ExtMapBuffer1[i]=High[i]+15*Point;                                                           // ... ðèñóåì ñòðåëêó    +  
    if((MacdCurrent>0 && MacdPrevious<0) &&                                // Åñëè MACD-ãèñòîãðàììà ïåðåøëà ÷åðåç íîëü è ... +
      (((AC4_2>0 && AC3_2>0 && AC2_2>0 && AC1_2>0) && (AC4_2>AC3_2 && AC2_2>AC3_2 && AC1_2>AC2_2)) || // ... íà âòîðîì áàðå  +
      ((AC4_2<0 && AC3_2<0 && AC2_2<0 && AC1_2>0) && (AC4_2>AC3_2 && AC2_2>AC3_2 && AC1_2>AC2_2)) || //   åñòü îäèí èç òð¸õ  +
      ((AC5_2<0 && AC4_2<0 && AC3_2<0 && AC2_2<0 && AC1_2<0) &&                                     // ñèãíàëîâ îò ÀÑ òî ... +
      (AC5_2>AC4_2 && AC4_2<AC3_2 && AC3_2<AC2_2 && AC2_2<AC1_2))))                                 //                       +
       ExtMapBuffer1[i]=High[i]+15*Point;                                                           // ... ðèñóåì ñòðåëêó    + 
    
    
    if((MacdCurrent>0 && MacdCurrent>SignalCurrent && MacdPrevious<SignalPrevious) &&
      (((AC4_3>0 && AC3_3>0 && AC2_3>0 && AC1_3>0) && (AC4_3>AC3_3 && AC2_3>AC3_3 && AC1_3>AC2_3)) || // ... íà òðåòüåì áàðå +
      ((AC4_3<0 && AC3_3<0 && AC2_3<0 && AC1_3>0) && (AC4_3>AC3_3 && AC2_3>AC3_3 && AC1_3>AC2_3)) || //   åñòü îäèí èç òð¸õ  +
      ((AC5_3<0 && AC4_3<0 && AC3_3<0 && AC2_3<0 && AC1_3<0) &&                                     // ñèãíàëîâ îò ÀÑ òî ... +
      (AC5_3>AC4_3 && AC4_3<AC3_3 && AC3_3<AC2_3 && AC2_3<AC1_3))))                                 //                       +
       ExtMapBuffer1[i]=High[i]+15*Point;                                                           // ... ðèñóåì ñòðåëêó    + 
    if((MacdCurrent>0 && MacdPrevious<0) &&                                // Åñëè MACD-ãèñòîãðàììà ïåðåøëà ÷åðåç íîëü è ... +
      (((AC4_3>0 && AC3_3>0 && AC2_3>0 && AC1_3>0) && (AC4_3>AC3_3 && AC2_3>AC3_3 && AC1_3>AC2_3)) || // ... íà òðåòüåì áàðå +
      ((AC4_3<0 && AC3_3<0 && AC2_3<0 && AC1_3>0) && (AC4_3>AC3_3 && AC2_3>AC3_3 && AC1_3>AC2_3)) || //   åñòü îäèí èç òð¸õ  +
      ((AC5_3<0 && AC4_3<0 && AC3_3<0 && AC2_3<0 && AC1_3<0) &&                                     // ñèãíàëîâ îò ÀÑ òî ... +
      (AC5_3>AC4_3 && AC4_3<AC3_3 && AC3_3<AC2_3 && AC2_3<AC1_3))))                                 //                       +
       ExtMapBuffer1[i]=High[i]+15*Point;                                                           // ... ðèñóåì ñòðåëêó    + 
       
    
    if((MacdCurrent>0 && MacdCurrent>SignalCurrent && MacdPrevious<SignalPrevious) &&
      (((AC4_4>0 && AC3_4>0 && AC2_4>0 && AC1_4>0) && (AC4_4>AC3_4 && AC2_4>AC3_4 && AC1_4>AC2_4)) ||//... íà ÷åòâ¸ðòîì áàðå +
      ((AC4_4<0 && AC3_4<0 && AC2_4<0 && AC1_4>0) && (AC4_4>AC3_4 && AC2_4>AC3_4 && AC1_4>AC2_4)) || //   åñòü îäèí èç òð¸õ  +
      ((AC5_4<0 && AC4_4<0 && AC3_4<0 && AC2_4<0 && AC1_4<0) &&                                     // ñèãíàëîâ îò ÀÑ òî ... +
      (AC5_4>AC4_4 && AC4_4<AC3_4 && AC3_4<AC2_4 && AC2_4<AC1_4))))                                 //                       +
       ExtMapBuffer1[i]=High[i]+15*Point;                                                           // ... ðèñóåì ñòðåëêó    + 
    if((MacdCurrent>0 && MacdPrevious<0) &&                                // Åñëè MACD-ãèñòîãðàììà ïåðåøëà ÷åðåç íîëü è ... +
      (((AC4_4>0 && AC3_4>0 && AC2_4>0 && AC1_4>0) && (AC4_4>AC3_4 && AC2_4>AC3_4 && AC1_4>AC2_4)) ||//... íà ÷åòâ¸ðòîì áàðå +
      ((AC4_4<0 && AC3_4<0 && AC2_4<0 && AC1_4>0) && (AC4_4>AC3_4 && AC2_4>AC3_4 && AC1_4>AC2_4)) || //   åñòü îäèí èç òð¸õ  +
      ((AC5_4<0 && AC4_4<0 && AC3_4<0 && AC2_4<0 && AC1_4<0) &&                                     // ñèãíàëîâ îò ÀÑ òî ... +
      (AC5_4>AC4_4 && AC4_4<AC3_4 && AC3_4<AC2_4 && AC2_4<AC1_4))))                                 //                       +
       ExtMapBuffer1[i]=High[i]+15*Point;                                                           // ... ðèñóåì ñòðåëêó    + 

//--Ïðîâåðêà íàëè÷èÿ ñèãíàëà íà ïðîäàæó--------------------------------------------------------------------------------------+
    if((MacdCurrent<0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious) &&
      (((AC4<0 && AC3<0 && AC2<0 && AC1<0) && (AC4<AC3 && AC2<AC3 && AC1<AC2)) ||
      ((AC4>0 && AC3>0 && AC2>0 && AC1<0) && (AC4<AC3 && AC2<AC3 && AC1<AC2)) ||
      ((AC5>0 && AC4>0 && AC3>0 && AC2>0 && AC1>0) && 
      (AC5<AC4 && AC4>AC3 && AC3>AC2 && AC2>AC1))))
       ExtMapBuffer2[i]=Low[i]-15*Point;
    if((MacdCurrent<0 && MacdPrevious>0) &&
      (((AC4<0 && AC3<0 && AC2<0 && AC1<0) && (AC4<AC3 && AC2<AC3 && AC1<AC2)) ||
      ((AC4>0 && AC3>0 && AC2>0 && AC1<0) && (AC4<AC3 && AC2<AC3 && AC1<AC2)) ||
      ((AC5>0 && AC4>0 && AC3>0 && AC2>0 && AC1>0) && 
      (AC5<AC4 && AC4>AC3 && AC3>AC2 && AC2>AC1)))) 
       ExtMapBuffer2[i]=Low[i]-15*Point;
       
       
    if((MacdCurrent<0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious) &&
      (((AC4_1<0 && AC3_1<0 && AC2_1<0 && AC1_1<0) && (AC4_1<AC3_1 && AC2_1<AC3_1 && AC1_1<AC2_1)) ||
      ((AC4_1>0 && AC3_1>0 && AC2_1>0 && AC1_1<0) && (AC4_1<AC3_1 && AC2_1<AC3_1 && AC1_1<AC2_1)) ||
      ((AC5_1>0 && AC4_1>0 && AC3_1>0 && AC2_1>0 && AC1_1>0) && 
      (AC5_1<AC4_1 && AC4_1>AC3_1 && AC3_1>AC2_1 && AC2_1>AC1_1))))
       ExtMapBuffer2[i]=Low[i]-15*Point;
    if((MacdCurrent<0 && MacdPrevious>0) &&
      (((AC4_1<0 && AC3_1<0 && AC2_1<0 && AC1_1<0) && (AC4_1<AC3_1 && AC2_1<AC3_1 && AC1_1<AC2_1)) ||
      ((AC4_1>0 && AC3_1>0 && AC2_1>0 && AC1_1<0) && (AC4_1<AC3_1 && AC2_1<AC3_1 && AC1_1<AC2_1)) ||
      ((AC5_1>0 && AC4_1>0 && AC3_1>0 && AC2_1>0 && AC1_1>0) && 
      (AC5_1<AC4_1 && AC4_1>AC3_1 && AC3_1>AC2_1 && AC2_1>AC1_1))))
       ExtMapBuffer2[i]=Low[i]-15*Point;
   
    
    if((MacdCurrent<0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious) &&
      (((AC4_2<0 && AC3_2<0 && AC2_2<0 && AC1_2<0) && (AC4_2<AC3_2 && AC2_2<AC3_2 && AC1_2<AC2_2)) ||
      ((AC4_2>0 && AC3_2>0 && AC2_2>0 && AC1_2<0) && (AC4_2<AC3_2 && AC2_2<AC3_2 && AC1_2<AC2_2)) ||
      ((AC5_2>0 && AC4_2>0 && AC3_2>0 && AC2_2>0 && AC1_2>0) && 
      (AC5_2<AC4_2 && AC4_2>AC3_2 && AC3_2>AC2_2 && AC2_2>AC1_2))))
       ExtMapBuffer2[i]=Low[i]-15*Point;
    if((MacdCurrent<0 && MacdPrevious>0) &&
      (((AC4_2<0 && AC3_2<0 && AC2_2<0 && AC1_2<0) && (AC4_2<AC3_2 && AC2_2<AC3_2 && AC1_2<AC2_2)) ||
      ((AC4_2>0 && AC3_2>0 && AC2_2>0 && AC1_2<0) && (AC4_2<AC3_2 && AC2_2<AC3_2 && AC1_2<AC2_2)) ||
      ((AC5_2>0 && AC4_2>0 && AC3_2>0 && AC2_2>0 && AC1_2>0) && 
      (AC5_2<AC4_2 && AC4_2>AC3_2 && AC3_2>AC2_2 && AC2_2>AC1_2))))
       ExtMapBuffer2[i]=Low[i]-15*Point;

 
    if((MacdCurrent<0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious) &&
      (((AC4_3<0 && AC3_3<0 && AC2_3<0 && AC1_3<0) && (AC4_3<AC3_3 && AC2_3<AC3_3 && AC1_3<AC2_3)) ||
      ((AC4_3>0 && AC3_3>0 && AC2_3>0 && AC1_3<0) && (AC4_3<AC3_3 && AC2_3<AC3_3 && AC1_3<AC2_3)) ||
      ((AC5_3>0 && AC4_3>0 && AC3_3>0 && AC2_3>0 && AC1_3>0) && 
      (AC5_3<AC4_3 && AC4_3>AC3_3 && AC3_3>AC2_3 && AC2_3>AC1_3))))
       ExtMapBuffer2[i]=Low[i]-15*Point;
    if((MacdCurrent<0 && MacdPrevious>0) &&
      (((AC4_3<0 && AC3_3<0 && AC2_3<0 && AC1_3<0) && (AC4_3<AC3_3 && AC2_3<AC3_3 && AC1_3<AC2_3)) ||
      ((AC4_3>0 && AC3_3>0 && AC2_3>0 && AC1_3<0) && (AC4_3<AC3_3 && AC2_3<AC3_3 && AC1_3<AC2_3)) ||
      ((AC5_3>0 && AC4_3>0 && AC3_3>0 && AC2_3>0 && AC1_3>0) && 
      (AC5_3<AC4_3 && AC4_3>AC3_3 && AC3_3>AC2_3 && AC2_3>AC1_3))))
       ExtMapBuffer2[i]=Low[i]-15*Point;
    
    
    if((MacdCurrent<0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious) &&
      (((AC4_4<0 && AC3_4<0 && AC2_4<0 && AC1_4<0) && (AC4_4<AC3_4 && AC2_4<AC3_4 && AC1_4<AC2_4)) ||
      ((AC4_4>0 && AC3_4>0 && AC2_4>0 && AC1_4<0) && (AC4_4<AC3_4 && AC2_4<AC3_4 && AC1_4<AC2_4)) ||
      ((AC5_4>0 && AC4_4>0 && AC3_4>0 && AC2_4>0 && AC1_4>0) && 
      (AC5_4<AC4_4 && AC4_4>AC3_4 && AC3_4>AC2_4 && AC2_4>AC1_4))))
       ExtMapBuffer2[i]=Low[i]-15*Point;
    if((MacdCurrent<0 && MacdPrevious>0) &&
      (((AC4_4<0 && AC3_4<0 && AC2_4<0 && AC1_4<0) && (AC4_4<AC3_4 && AC2_4<AC3_4 && AC1_4<AC2_4)) ||
      ((AC4_4>0 && AC3_4>0 && AC2_4>0 && AC1_4<0) && (AC4_4<AC3_4 && AC2_4<AC3_4 && AC1_4<AC2_4)) ||
      ((AC5_4>0 && AC4_4>0 && AC3_4>0 && AC2_4>0 && AC1_4>0) && 
      (AC5_4<AC4_4 && AC4_4>AC3_4 && AC3_4>AC2_4 && AC2_4>AC1_4))))
       ExtMapBuffer2[i]=Low[i]-15*Point;   
   }
//----
   return(0);
  }
//+------------------------------------------------------------------+



Sample





Analysis



Market Information Used:

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


Indicator Curves created:


Implements a curve of type DRAW_ARROW

Indicators Used:

Bill Williams Accelerator/Decelerator oscillator
MACD Histogram


Custom Indicators Used:

Order Management characteristics:

Other Features: