MACD_4_v1
Download scriptThis custom trading indicator is designed to help traders visualize market momentum by analyzing the relationship between two different types of moving averages. It provides a clear, visual representation of how quickly price trends are accelerating or slowing down, allowing for a better understanding of market "strength."
How the Logic Works
The script operates through three distinct layers of calculation to provide a comprehensive view of market movement:
1. The Core Trend Difference (MACD Line) At its foundation, the tool looks at two different price averages simultaneously: a "Fast" average and a "Slow" average.
- The Fast average reacts quickly to recent price changes.
- The Slow average captures the broader, longer-term trend.
By subtracting the Slow average from the Fast average, the tool creates a primary line. When this line moves upward, it suggests that short-term momentum is stronger than the long-term trend; when it moves downward, it indicates that short-term momentum is weakening relative to the broader trend.
2. The Smoothing Layer (Signal Line) To prevent traders from reacting too quickly to minor price fluctuations (market "noise"), the tool takes the results of the first calculation and smooths them out even further. It applies a third moving average specifically to the results of the first step. This creates a "Signal" line, which acts as a baseline for identifying significant shifts in momentum.
3. The Momentum Visualizer (Histogram) Finally, the tool calculates the mathematical difference between the primary MACD line and the Signal line. This result is displayed as a histogram (vertical bars).
- The height of these bars shows the gap between current momentum and the smoothed average.
- This allows traders to see at a glance how "stretched" the market is in its current direction.
Summary for Users
In simple terms, this tool helps you see not just where the price is going, but how fast it is moving there. By comparing short-term reactions against long-term trends and then smoothing those results, it provides a filtered view of market energy, helping to identify potential trend reversals or shifts in strength before they become obvious on a standard price chart.
//+------------------------------------------------------------------+
//| Custom MACD.mq4 |
//| Copyright © 2004, MetaQuotes Software Corp. |
//| http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2004, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net/"
//---- indicator settings
#property indicator_separate_window
#property indicator_buffers 3
#property indicator_color1 Silver
#property indicator_color2 Red
#property indicator_color3 LightBlue
#property indicator_style2 2
#property indicator_width3 2
//---- indicator parameters
extern int Price=0;
extern int FastEMA=12;
extern int SlowEMA=26;
extern int SignalEMA=9;
//---- indicator buffers
double MacdBuffer[];
double SignalBuffer[];
double HistoBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- drawing settings
SetIndexStyle(0,DRAW_LINE);
SetIndexStyle(1,DRAW_LINE);
SetIndexStyle(2,DRAW_HISTOGRAM);
SetIndexDrawBegin(1,SignalEMA);
SetIndexDrawBegin(2,SignalEMA);
IndicatorDigits(Digits+1);
//---- indicator buffers mapping
SetIndexBuffer(0,MacdBuffer);
SetIndexBuffer(1,SignalBuffer);
SetIndexBuffer(2,HistoBuffer);
//---- name for DataWindow and indicator subwindow label
IndicatorShortName("MACD("+FastEMA+","+SlowEMA+","+SignalEMA+")");
SetIndexLabel(0,"MACD");
SetIndexLabel(1,"Signal");
SetIndexLabel(2,"Histo");
//---- initialization done
return(0);
}
//+------------------------------------------------------------------+
//| Moving Averages Convergence/Divergence |
//+------------------------------------------------------------------+
int start()
{
int limit;
int counted_bars=IndicatorCounted();
//---- 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++)
MacdBuffer[i]=iMA(NULL,0,FastEMA,0,MODE_EMA,Price,i)-iMA(NULL,0,SlowEMA,0,MODE_EMA,Price,i);
//---- signal line counted in the 2-nd buffer
for(i=0; i<limit; i++)
{
SignalBuffer[i]=iMAOnArray(MacdBuffer,Bars,SignalEMA,0,MODE_EMA,i);
HistoBuffer[i]=MacdBuffer[i]-SignalBuffer[i];
}
//---- done
return(0);
}
//+------------------------------------------------------------------+
Comments