3color_MACD
Download scriptThis tool is a specialized technical analysis indicator designed to provide a more nuanced visual representation of market momentum compared to the standard MACD (Moving Average Convergence Divergence). While a traditional MACD often shows a single line or histogram, this script breaks down price movement into three distinct visual categories to help traders identify the strength and direction of trends more clearly.
How the Logic Works
The indicator operates by analyzing the relationship between two different moving averages—a "fast" one that reacts quickly to price changes and a "slow" one that tracks the broader trend. The core logic follows these steps:
1. Calculating Momentum First, the script calculates the difference between the fast and slow moving averages. This difference represents the current momentum of the market. If the gap is widening, the trend is gaining strength; if it is narrowing, the trend may be losing steam.
2. Identifying Trend Direction (The Three Colors) Unlike standard indicators that simply plot a value, this script evaluates how the momentum is changing from one candle to the next. It categorizes every movement into three specific states:
- Upward Momentum: When the momentum is increasing in a positive direction, it is highlighted visually. This signals an accelerating bullish move.
- Downward Momentum: When the momentum is decreasing in a negative direction, it is shown with a different visual style. This indicates an accelerating bearish move.
- Neutral/Stagnant Momentum: If the momentum is flat (neither increasing nor decreasing), the script assigns it a neutral visual state. This helps identify periods where the market is consolidating or lacking clear direction.
3. The Signal Line In addition to the three-color momentum histogram, the script calculates a "Signal Line." This is a secondary moving average of the momentum itself. By comparing the three-colored histogram against this signal line, traders can better identify potential turning points or "overextended" market conditions.
Summary for Traders
Instead of just seeing if the price is going up or down, this indicator allows you to see the velocity of that movement. It distinguishes between a "weak" move and a "strong" move by changing colors based on whether the trend's energy is expanding, contracting, or staying still. This provides a clearer picture of market health and helps in identifying high-probability entries where momentum is actively accelerating.
//+------------------------------------------------------------------+
//| 3color_MACD.mq4 |
//| MACD: Copyright © 2004, MetaQuotes Software Corp. |
//| http://www.metaquotes.net/ |
//| 3color: Copyright © 2005, 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 MediumBlue
#property indicator_color2 Red
#property indicator_color3 Gray
#property indicator_color4 LimeGreen
#property indicator_color5 DarkSlateBlue
//---- indicator parameters
extern int FastEMA=5;
extern int SlowEMA=34;
extern int SignalSMA=5;
extern int CountBars=300;
extern int Line=3;
//---- indicator buffers
double ind_buffer1[];
double ind_buffer2[];
double ind_buffer3[];
double ind_buffer4[];
double ind_buffer5[];
double minuse;
double Vol;
double Zml;
double Color1;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicator buffers mapping
IndicatorBuffers(5);
if(!SetIndexBuffer(0,ind_buffer1) &&
!SetIndexBuffer(1,ind_buffer2) &&
!SetIndexBuffer(2,ind_buffer3) &&
!SetIndexBuffer(3,ind_buffer4) &&
!SetIndexBuffer(4,ind_buffer5))
Print("cannot set indicator buffers!");
//---- drawing settings
Color1= C'128,0,255';
SetIndexStyle(0,DRAW_HISTOGRAM, STYLE_SOLID, 2, Color1);
SetIndexStyle(1,DRAW_HISTOGRAM, STYLE_SOLID, 2);
SetIndexStyle(2,DRAW_HISTOGRAM, STYLE_SOLID, 3);
SetIndexStyle(3,DRAW_LINE, STYLE_DASHDOTDOT,1);
SetIndexDrawBegin(0,Bars-CountBars);
SetIndexDrawBegin(1,Bars-CountBars);
SetIndexDrawBegin(2,Bars-CountBars);
SetIndexDrawBegin(3,Bars-CountBars+SignalSMA);
IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS)+1);
//---- name for DataWindow and indicator subwindow label
IndicatorShortName("MACD("+FastEMA+","+SlowEMA+","+SignalSMA+")");
SetIndexLabel(0,"MACDUp");
SetIndexLabel(1,"MACDDown");
SetIndexLabel(2,"MACDStr");
SetIndexLabel(3,"Signal");
//---- initialization done
return(0);
}
//+------------------------------------------------------------------+
//| Moving Averages Convergence/Divergence |
//+------------------------------------------------------------------+
int start()
{
//---- drawing settings
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_buffer5[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++)
{
Vol = ind_buffer5[i]; minuse = Vol - ind_buffer5[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_buffer5,Bars,SignalSMA,0,MODE_SMA,i);
//---- done
return(0);
}
Comments