3colorMACD_001

Download script
3colorMACD_001

This custom trading indicator for MetaTrader 4 is designed to provide a more visual and intuitive way to analyze market momentum by expanding upon the traditional Moving Average Convergence Divergence (MACD) tool. While a standard MACD often uses a single histogram, this version utilizes a "Three Colour" logic to make changes in price direction and velocity much easier for a trader to identify at a glance.

Core Methodology

The script begins by calculating the relationship between two different types of moving averages: a "Fast" average (which reacts quickly to price changes) and a "Slow" average (which tracks the broader trend). By subtracting the slow value from the fast value, the indicator determines the momentum of the market.

Visual Differentiation Logic

The primary innovation of this script is how it renders that momentum. Instead of showing one uniform bar, it categorizes the movement into three distinct visual categories based on the relationship between the current bar and the previous one:

  • Positive Momentum: When the momentum is increasing (moving upwards), the indicator highlights this specific movement in one color.
  • Negative Momentum: When the momentum is decreasing (moving downwards), it highlights the shift in a different color.
  • Neutral/Stable Momentum: If there is no change in the momentum between bars, it applies a third distinct color.

By separating these movements into different colors, the tool helps traders distinguish between accelerating trends and slowing ones, which can be difficult to see on a standard single-color histogram.

Signal and Baseline Components

In addition to the multi-colored histogram, the script calculates two essential reference lines:

  1. The Signal Line: This is a smoothed average of the entire momentum data. It helps traders identify "crosses"—points where the rapid momentum shifts enough to potentially signal a trend reversal.
  2. The Zero Level: A steady baseline that acts as the anchor for the indicator. It allows the trader to see whether the overall market sentiment is currently leaning toward the positive or negative side.

Summary of Use

For a user viewing this on a chart, the logic serves to simplify trend analysis. Rather than just seeing "up" or "down," the three-color system allows you to see the strength and consistency of those movements. It effectively filters out market noise by visually categorizing whether the current price action is gaining speed, losing speed, or remaining steady.

Indicators Used
Moving average indicatorMoving average indicator
Miscellaneous
Implements a curve of type %1
16 Views
0 Downloads
0 Favorites
3colorMACD_001
//+------------------------------------------------------------------+
//|                                            Three Colour MACD.mq4 |
//|                      Copyright © 2004, MetaQuotes Software Corp. |
//|                                       http://www.metaquotes.net/ |
//|                                              Nikolay Kositsin    |
//+------------------------------------------------------------------+
#property  copyright "Copyright © 2004, MetaQuotes Software Corp."
#property  link      "http://www.metaquotes.net/"
//---- indicator settings
#property  indicator_separate_window
#property  indicator_buffers 5
#property  indicator_color1  Blue
#property  indicator_color2  Red
#property  indicator_color3  Gray
#property  indicator_color4  Red
#property  indicator_color5  Silver
//---- indicator parameters
extern int FastEMA=12;
extern int SlowEMA=26;
extern int SignalSMA=4;   //9;
extern int CountBars=300;
extern int Line=2;
extern double  Zero_level=0.0;
//---- indicator buffers
double     ind_buffer1[];
double     ind_buffer2[];
double     ind_buffer3[];
double     ind_buffer4[];
double     ind_buffer5[];
double     ind_buffer6[];

double minuse;
double Vol;
double Zml;
double Color1;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
  
//---- indicator buffers mapping
   IndicatorBuffers(6);
   if(!SetIndexBuffer(0,ind_buffer1) &&
      !SetIndexBuffer(1,ind_buffer2) &&
      !SetIndexBuffer(2,ind_buffer3) &&
      !SetIndexBuffer(3,ind_buffer4) &&
      !SetIndexBuffer(4,ind_buffer5) &&
      !SetIndexBuffer(5,ind_buffer6))
       Print("cannot set indicator buffers!");
//---- drawing settings
    
   Color1= C'128,0,255';                                            
   SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID, Line, Color1); 
   SetIndexStyle(1,DRAW_HISTOGRAM,STYLE_SOLID, Line);
   SetIndexStyle(2,DRAW_HISTOGRAM,STYLE_SOLID, Line);
   SetIndexStyle(3,DRAW_LINE,0,2);   
   SetIndexStyle(4,DRAW_LINE,2,1); 

   SetIndexDrawBegin(0,Bars-CountBars);
   SetIndexDrawBegin(1,Bars-CountBars);
   SetIndexDrawBegin(2,Bars-CountBars);
   SetIndexDrawBegin(3,Bars-CountBars+SignalSMA); 
   SetIndexDrawBegin(4,Bars-CountBars-100); 
   SetIndexShift(4,100);
     
   IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS)+1);

//---- name for DataWindow and indicator subwindow label
   IndicatorShortName("MACD("+FastEMA+","+SlowEMA+","+SignalSMA+")");
   SetIndexLabel(0,"MACD+");
   SetIndexLabel(1,"MACD-");
   SetIndexLabel(2,"MACD0");
   SetIndexLabel(3,"Signal");
   SetIndexLabel(4,"Zero");
//---- initialization done
   return(0);
  }
//+------------------------------------------------------------------+
//| Moving Averages Convergence/Divergence                           |
//+------------------------------------------------------------------+
int start()   
   {
//---- drawing settings
   SetIndexStyle(0,DRAW_HISTOGRAM, STYLE_SOLID,Line); 
   SetIndexStyle(1,DRAW_HISTOGRAM, STYLE_SOLID,Line);
   SetIndexStyle(2,DRAW_HISTOGRAM, STYLE_SOLID,Line);
   SetIndexStyle(3,DRAW_LINE, 0,2);
   SetIndexStyle(4,DRAW_LINE, 2,1);
   
   int limit;  
   int counted_bars=IndicatorCounted(); 
//---- check for possible errors
   if(counted_bars<0) return(-1);
//---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
//---- macd counted in the 1-st buffer
   
   for(int i=0; i<limit; i++)      
   
      ind_buffer6[i]=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i);      
      
//---- Three Colour MACD mapping 
     for(i=0; i<limit; i++)
   {   
       ind_buffer5[i]=Zero_level;
       
       Vol = ind_buffer6[i];     minuse = Vol - ind_buffer6[i+1];  
     
           if(minuse>0.0){ind_buffer1[i]=Vol; ind_buffer2[i]=0.0; ind_buffer3[i]=0.0;} 
     else {if(minuse<0.0){ind_buffer1[i]=0.0; ind_buffer2[i]=Vol; ind_buffer3[i]=0.0;}
     else                {ind_buffer1[i]=0.0; ind_buffer2[i]=0.0; ind_buffer3[i]=Vol;}} 
 //---- 
   } 
        
//---- signal line counted in the 2-nd buffer
   for(i=0; i<limit; i++)
      ind_buffer4[i]=iMAOnArray(ind_buffer6,Bars,SignalSMA,0,MODE_SMA,i);
//---- done
   return(0);
  }

Comments