MACD_DEMA
Download scriptThis tool is a specialized technical analysis indicator designed to help traders identify momentum and potential trend reversals in the financial markets. It is an advanced evolution of the standard MACD (Moving Average Convergence Divergence) indicator, optimized for faster responsiveness.
How it Works
The core logic relies on measuring the relationship between two different price averages—a "fast" one and a "slow" one. By comparing these two, the tool shows whether the market's current velocity is speeding up or slowing down.
What makes this specific version unique is the use of DEMA (Double Exponential Moving Average) instead of the standard EMA. In plain terms, DEMA is designed to reduce the "lag" often found in traditional indicators. It reacts more quickly to recent price changes while still filtering out minor market noise, allowing for a clearer picture of where the price is headed.
Visual Components
The indicator provides three distinct visual elements to help you interpret the market:
- The MACD Line: This primary line represents the raw difference between the fast and slow DEMA averages. It shows the immediate momentum of the price action.
- The Signal Line: This is a secondary, smoothed line that follows the MACD line. It acts as a reference point; when the MACD line crosses this signal line, it often suggests a potential shift in market direction.
- The Histogram: This is the vertical bar chart at the bottom. It calculates the distance between the MACD line and the Signal line.
- When the bars are above the zero mark, it indicates bullish momentum (buying pressure).
- When the bars are below the zero mark, it indicates bearish momentum (selling pressure).
Summary for Traders
By combining the speed of DEMA with the momentum tracking of a MACD, this script aims to provide a more "real-time" view of the market. It helps traders spot trend changes earlier than standard indicators might, providing a visual map of whether the current price movement has enough strength to continue or if it is beginning to exhaust itself.
//+------------------------------------------------------------------+
//| MACD_DEMA.mq4 |
//| Copyright © 2007, Robert Hill |
//| Standard MACD modified to use DEMA instead of EMA |
//| |
//| Based on the formula developed by Patrick Mulloy |
//| |
//| It can be used in place of EMA or to smooth other indicators. |
//| |
//| DEMA = 2 * EMA - EMA of EMA |
//| |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2004, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net/"
//---- 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 MACD_buffer[];
double Signal_buffer[];
double HistogramBufferUp[];
double HistogramBufferDown[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- drawing settings
IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS)+1);
SetIndexStyle(0,DRAW_LINE,STYLE_SOLID);
SetIndexBuffer(0,MACD_buffer);
SetIndexDrawBegin(0,SlowEMA);
SetIndexStyle(1,DRAW_LINE,STYLE_DOT);
SetIndexBuffer(1,Signal_buffer);
SetIndexDrawBegin(1,SignalSMA);
SetIndexStyle(2,DRAW_HISTOGRAM,STYLE_SOLID);
SetIndexBuffer(2,HistogramBufferUp);
SetIndexStyle(3,DRAW_HISTOGRAM,STYLE_SOLID);
SetIndexBuffer(3,HistogramBufferDown);
IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS)+1);
//---- name for DataWindow and indicator subwindow label
IndicatorShortName("MACD_DEMA("+FastEMA+","+SlowEMA+","+SignalSMA+")");
SetIndexLabel(0,"MACD");
SetIndexLabel(1,"Signal");
SetIndexLabel(2,"Histogram");
//---- initialization done
return(0);
}
//+------------------------------------------------------------------+
//| Moving Averages Convergence/Divergence |
//+------------------------------------------------------------------+
int start()
{
double temp;
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++)
MACD_buffer[i]=iCustom(NULL, 0, "DEMA_RLH2", FastEMA, 2, i)- iCustom(NULL, 0, "DEMA_RLH2", SlowEMA, 2, i);
//---- signal line counted in the 2-nd buffer
for(i=0; i<limit; i++)
Signal_buffer[i]=iMAOnArray(MACD_buffer,Bars,SignalSMA,0,MODE_EMA,i);
//---- done
for(i=0; i<limit; i++)
{
HistogramBufferUp[i] = 0;
HistogramBufferDown[i] = 0;
temp = MACD_buffer[i] - Signal_buffer[i];
if (temp >= 0)
HistogramBufferUp[i] = temp;
else
HistogramBufferDown[i] = temp;
}
return(0);
}
Comments