3colorMACD_v1
Download scriptThe Three Colour MACD is a specialized technical analysis tool designed to help traders visualize market momentum and trend direction more clearly than a standard MACD indicator. While a traditional MACD provides a single histogram, this script breaks down the movement into distinct visual categories based on the "velocity" of price changes.
Core Logic Overview
The indicator operates by calculating the difference between two moving averages: a Fast Exponential Moving Average (EMA) and a Slow EMA. By subtracting the slow average from the fast one, it determines the immediate strength of the trend. However, instead of simply showing this as a single value, the script analyzes the change in that momentum from one candle to the next to determine the color-coded output.
How the Visuals Work
The tool categorizes the market movement into three distinct states, represented by different colors in the histogram:
- Positive Momentum (Bullish): When the current momentum is higher than it was in the previous period, the script identifies this as increasing strength and highlights it in a specific color. This suggests that the upward trend is accelerating.
- Negative Momentum (Bearish): Conversely, when the momentum drops lower than the previous period, the indicator reflects a strengthening downward trend using a different color. This signifies that the bearish move is gaining power.
- Neutral/Transitionary Momentum: If there is no significant increase or decrease in momentum between periods (the change is zero), the script applies a third "neutral" color. This helps traders identify moments where the market is stalling, consolidating, or transitioning between trends.
Additional Analytical Layers
Beyond the colored histogram, the script provides two additional visual aids:
- Signal Line: It calculates a secondary average (Simple Moving Average) of the MACD values. This line acts as a smoothed guide to help identify potential turning points in the trend.
- Zero Level: A steady reference point that helps traders distinguish between overall positive territory and overall negative territory.
Summary for Traders
By using this logic, you can see not just where the price is going, but how fast it is moving. Rather than just seeing a bar go up or down, the Three Colour MACD allows you to quickly spot when a trend is gaining steam, losing steam, or becoming stagnant, providing a more nuanced view of market dynamics.
/*-----------------------------+
| |
| Shared by www.Aptrafx.com |
| |
+------------------------------*/
//+------------------------------------------------------------------+
//| 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