MACD_EMA

This 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.

Indicators Used
Moving average indicatorMoving average indicator
Miscellaneous
Implements a curve of type %1
11 Views
0 Downloads
0 Favorites
MACD_EMA
//+------------------------------------------------------------------+
//|                                         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