MACD_EMA
Download scriptThis tool is a specialized technical analysis indicator designed to provide a visual representation of market momentum and trends through a modified Moving Average Convergence Divergence (MACD) system. By analyzing the relationship between different price averages, it helps traders identify whether the market is gaining strength or losing steam in real-time.
Core Functional Logic
The script operates by processing three distinct layers of data to provide a comprehensive view of market behavior:
1. The Main Trend Line (MACD) The indicator first calculates the difference between two different types of moving averages—a "Fast" average and a "Slow" average. By subtracting the slower trend from the faster trend, the script isolates the immediate velocity of the price. If the fast average is significantly higher than the slow average, it indicates upward momentum; if it is lower, it suggests downward pressure.
2. The Signal Line To smooth out any "noise" or erratic fluctuations in the main trend, the script takes the results of the first calculation and applies a secondary smoothing process (a Signal Moving Average). This creates a secondary line that helps traders identify the overall "health" of the momentum, making it easier to spot major shifts in direction.
3. The Dynamic Histogram The most visually prominent feature of this script is the color-coded histogram. This is derived by measuring the mathematical gap between the Main Trend Line and the Signal Line.
- When the difference is positive (meaning the main momentum is above the signal), the values are plotted as a visual representation of upward strength.
- When the difference is negative (meaning the main momentum has fallen below the signal), the values are plotted to highlight downward strength.
User Experience and Visual Output
Instead of requiring the user to perform complex manual calculations, the script automatically handles the data processing and displays four distinct elements in a separate sub-window:
- Solid Line: Represents the primary MACD value.
- Dotted Line: Represents the Signal line for comparative analysis.
- Dual Histograms: These provide an instant visual cue of market sentiment. By observing the height and direction of these bars, users can quickly determine if a trend is accelerating, decelerating, or reversing at a glance.
In summary, this script translates raw price fluctuations into a structured visual format, highlighting the "tug-of-war" between different price speeds to help identify clear trends and potential shifts in market sentiment.
//+------------------------------------------------------------------+
//| MACD_ColorHist_Alert.mq4 |
//| Copyright © 2006, Robert Hill |
//| |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, Robert Hill"
//---- indicator settings
#property indicator_separate_window
#property indicator_buffers 4
#property indicator_color1 Aqua
#property indicator_color2 Red
#property indicator_color3 Green
#property indicator_color4 Red
//---- indicator parameters
extern int FastEMA=12;
extern int SlowEMA=26;
extern int SignalSMA=9;
//---- indicator buffers
double ind_buffer1[];
double ind_buffer2[];
double HistogramBufferUp[];
double HistogramBufferDown[];
int flagval1 = 0;
int flagval2 = 0;
//---- variables
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- drawing settings
// IndicatorBuffers(3);
IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS)+1);
SetIndexStyle(0,DRAW_LINE,STYLE_SOLID);
SetIndexBuffer(0,ind_buffer1);
SetIndexDrawBegin(0,SlowEMA);
SetIndexStyle(1,DRAW_LINE,STYLE_DOT);
SetIndexBuffer(1,ind_buffer2);
SetIndexDrawBegin(1,SignalSMA);
SetIndexStyle(2,DRAW_HISTOGRAM,STYLE_SOLID);
SetIndexBuffer(2,HistogramBufferUp);
SetIndexStyle(3,DRAW_HISTOGRAM,STYLE_SOLID);
SetIndexBuffer(3,HistogramBufferDown);
// SetIndexDrawBegin(2,SlowEMA + SignalSMA);
//---- name for DataWindow and indicator subwindow label
IndicatorShortName("MACD-EMA("+FastEMA+","+SlowEMA+","+SignalSMA+")");
SetIndexLabel(0,"MACD");
SetIndexLabel(1,"Signal");
SetIndexLabel(2,"Histogram");
//---- initialization done
return(0);
}
//+------------------------------------------------------------------+
//| Moving Averages Convergence/Divergence |
//+------------------------------------------------------------------+
int start()
{
int limit;
double temp;
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_buffer1[i]=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i);
//---- signal line counted in the 2-nd buffer
for(i=0; i<limit; i++)
ind_buffer2[i]=iMAOnArray(ind_buffer1,Bars,SignalSMA,0,MODE_EMA,i);
// ind_buffer2[i] = alpha*ind_buffer1[i] + alpha_1*ind_buffer2[i+1];
for(i=0; i<limit; i++)
{
HistogramBufferUp[i] = 0;
HistogramBufferDown[i] = 0;
temp = ind_buffer1[i] - ind_buffer2[i];
if (temp >= 0)
HistogramBufferUp[i] = temp;
else
HistogramBufferDown[i] = temp;
}
//---- done
return(0);
}
Comments