Author: Copyright ?2004, MetaQuotes Software Corp.
MACD-2_v3

This tool is designed to help traders visualize market momentum by analyzing the relationship between fast-moving and slow-moving price trends. It serves as a visual guide to identify shifts in the market's strength, helping you see whether a move is gaining steam or beginning to lose power.

How the Logic Works

The script operates through a three-step calculation process:

1. Establishing the Trend Gap The tool starts by comparing two different types of moving averages: a "Fast" average and a "Slow" average. By calculating the difference between these two, the tool identifies the gap between immediate price action and long-term trends. This gap tells you how much the current price is "pulling away" from its historical average.

2. Smoothing the Data (The Signal Line) To ensure the data isn't too "jittery" or reactive to tiny, insignificant price flickers, the tool takes that calculated gap and applies a secondary smoothing process. This creates a "Signal Line," which acts as a steady reference point to help filter out market noise.

3. Visualizing Momentum Direction The final part of the logic compares the current position of the trend gap against its previous position. It looks for changes in direction:

  • If the momentum is moving upward compared to the previous point, it highlights this as a positive movement.
  • If the momentum is moving downward, it identifies it as a negative movement.

Visual Representation

Rather than just showing a single line, the script translates these calculations into a clear visual format:

  • It uses two distinct histograms (bars) to represent the direction of the momentum.
  • When the trend is gaining strength in one direction, one set of bars will appear while the other remains at zero.
  • When the trend flips, the visual focus switches to the opposite side.

By using this method, the tool allows you to see not just where the price is going, but how aggressively it is moving there, providing a clearer picture of the market's "speed" and direction at a glance.

Indicators Used
Moving average indicatorMoving average indicator
Miscellaneous
Implements a curve of type %1
15 Views
0 Downloads
0 Favorites
MACD-2_v3
/*-----------------------------+
|			       |
| Shared by www.Aptrafx.com    |
|			       |
+------------------------------*/

//+------------------------------------------------------------------+
//| macd-2.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 4
#property indicator_color1 Magenta
#property indicator_color2 Yellow
#property indicator_color3 White
#property indicator_color4 Yellow
//---- indicator parameters
extern int FastEMA=12;
extern int SlowEMA=26;
extern int SignalEMA=8;
//---- indicator buffers
double ind_buffer1[];
double ind_buffer2[];
double ind_buffer3[];
double ind_buffer4[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- 2 additional buffers are used for counting.
IndicatorBuffers(5);
//---- drawing settings
SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,2);
SetIndexStyle(1,DRAW_HISTOGRAM,STYLE_SOLID,2);
IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS)+2 );
SetIndexDrawBegin(0,SignalEMA);
SetIndexDrawBegin(1,SignalEMA);
//---- 4 indicator buffers mapping
if(!SetIndexBuffer(0,ind_buffer1) &&
!SetIndexBuffer(1,ind_buffer2) &&
!SetIndexBuffer(2,ind_buffer3) &&
!SetIndexBuffer(3,ind_buffer4))
Print("cannot set indicators\' buffers!");
//---- name for DataWindow and indicator subwindow label
IndicatorShortName("MACD-2");
//---- initialization done
return(0);
}
//+------------------------------------------------------------------+
//| Oscillator |
//+------------------------------------------------------------------+
int start()
{
int limit;
int counted_bars=IndicatorCounted();
double prev,current;
//---- 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 additional buffer
for(int i=0; i<limit; i++)
ind_buffer3[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 additional buffer
for(i=0; i<limit; i++)
ind_buffer4[i]=iMAOnArray(ind_buffer3,Bars,SignalEMA,0,MODE_EMA, i);
//---- dispatch values between 2 buffers
bool up=true;
for(i=limit-1; i>=0; i--)
{
current=ind_buffer3[i]-ind_buffer4[i];
prev=ind_buffer3[i+1]-ind_buffer4[i+1];
if(current>prev) up=true;
if(current<prev) up=false;
if(!up)
{
ind_buffer2[i]=3*current;
ind_buffer1[i]=0.0;
}
else
{
ind_buffer1[i]=3*current;
ind_buffer2[i]=0.0;
}
}
return(0);
}

Comments