3colorMACD_002

Download script
3colorMACD_002

This tool is designed to provide a more visual and intuitive way to track market momentum compared to the standard Moving Average Convergence Divergence (MACD) indicator. By breaking down the movement of the market into specific colored segments, it helps traders identify the strength and direction of price trends more clearly.

Core Logic Overview

The script works by calculating the relationship between two different moving averages: a "fast" average (which reacts quickly to recent price changes) and a "slow" average (which represents the broader trend). The difference between these two lines creates the baseline momentum value.

Instead of simply showing one continuous line, this script analyzes the change in that momentum from one moment to the next. It then categorizes that change into three distinct visual categories:

  • Positive Momentum: When the current momentum is higher than it was in the previous period, the script highlights this growth with one specific color. This signifies that the upward trend is gaining strength.
  • Negative Momentum: When the current momentum is lower than the previous period, the script switches to a different color. This indicates that the downward trend is becoming more aggressive.
  • Neutral/Stationary Momentum: If there is no change in the momentum value between periods, the script uses a third "neutral" color. This identifies moments where the market is flat or transitioning without clear directional movement.

Visual Components

To make these insights easy to read on a chart, the script generates several visual elements:

  1. The Three-Color Histogram: These are the primary bars that change colors based on whether the momentum is increasing, decreasing, or staying the same. This allows you to see at a glance if a trend is accelerating or slowing down.
  2. The Signal Line: The script also calculates a "Signal" average based on the momentum data itself. This line helps smooth out minor fluctuations, allowing traders to see the overall flow of the market more clearly.
  3. The Zero Level: A baseline is established to help users quickly identify when the momentum shifts from positive (above the line) to negative (below the line).

How it Helps the User

By using this logic, you can move beyond simply knowing that a price is "up" or "down." You can see how it is moving. For example, if the bars remain the same color while the price moves, the trend is steady. If the colors shift rapidly, it indicates high volatility or a potential change in market sentiment.

Indicators Used
Moving average indicatorMoving average indicator
Miscellaneous
Implements a curve of type %1
11 Views
0 Downloads
0 Favorites
3colorMACD_002
//+------------------------------------------------------------------+
//|                                            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  Magenta
#property  indicator_color3  Gray
#property  indicator_color4  LimeGreen
#property  indicator_color5  DarkSlateBlue
//---- indicator parameters
extern int FastEMA=12;
extern int SlowEMA=26;
extern int SignalSMA=9;
extern int CountBars=300;
extern int Line=3;
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, STYLE_DASHDOTDOT,1);   
   SetIndexStyle(4,DRAW_LINE, STYLE_DASHDOTDOT,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, STYLE_DASHDOTDOT,1);
   SetIndexStyle(4,DRAW_LINE, STYLE_DASHDOTDOT,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