MACD Hist_v1

Download script
Author: Copyright � 2004, MetaQuotes Software Corp.
MACD Hist_v1

This custom trading indicator is designed to provide a comprehensive visual analysis of market momentum and trend strength by combining three distinct mathematical models into a single viewing window. By integrating these elements, the script helps traders identify the relationship between price velocity and overall market direction.

How the Logic Works

The indicator functions by calculating three specific data points simultaneously:

1. The MACD (Moving Average Convergence Divergence) At its core, the tool tracks the distance between two different types of moving averages—a "Fast" average and a "Slow" average.

  • The Fast average reacts quickly to recent price changes.
  • The Slow average provides a broader view of the long-term trend. By subtracting the slow average from the fast average, the script generates a primary line that shows whether the current momentum is accelerating or decelerating.

2. The Signal Line To smooth out the fluctuations of the MACD and make it easier to identify clear trends, the script calculates a "Signal Line." This is essentially a moving average of the MACD itself. When the MACD line crosses over or under this Signal Line, it often provides a cue regarding potential shifts in market direction.

3. The OsMA (Oscillating Moving Average) In addition to the standard MACD components, the script includes an "OsMA" calculation. This acts as a complementary visual aid that reinforces the trend analysis. It helps by highlighting the underlying oscillations of the price movement, providing a more layered perspective on how strongly the market is moving in any given direction.

Summary for Traders

Instead of relying on just one type of data, this script merges three different perspectives:

  • Momentum: How fast the price is moving.
  • Smoothing: Filtering out "noise" to see the true trend.
  • Oscillation: Measuring the relative strength of the current price action.

By displaying these three components together, the indicator allows you to see not just if the price is moving, but how much energy is behind that movement and whether that energy is beginning to fade or strengthen.

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

//+------------------------------------------------------------------+
//| Custom MACD+OsMA.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 Lime
#property indicator_color2 Black
#property indicator_color3 Silver
//---- indicator parameters 
extern int FastEMA=12;
extern int SlowEMA=26;
extern int SignalSMA=9;
//---- indicator buffers
double ind_buffer1[];
double ind_buffer2[];
double ind_buffer3[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- drawing settings
SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,1);
SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,1);
SetIndexStyle(2,DRAW_HISTOGRAM,STYLE_SOLID,1);
SetIndexDrawBegin(1,SignalSMA);
IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS)+1);
//---- indicator buffers mapping
if(!SetIndexBuffer(0,ind_buffer1) && !SetIndexBuffer(1,ind_buffer2) && !SetIndexBuffer(2,ind_buffer3))
Print("cannot set indicator buffers!");
//---- name for DataWindow and indicator subwindow label
IndicatorShortName("MACD("+FastEMA+","+SlowEMA+","+SignalSMA+")");
SetIndexLabel(0,"MACD");
SetIndexLabel(1,"Signal");
SetIndexLabel(2,"OsMA");
//---- initialization done
return(0);
}
//+------------------------------------------------------------------+
//| Moving Averages Convergence/Divergence |
//+------------------------------------------------------------------+
int start()
{
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++)
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_SMA,i);
for(i=0; i<limit; i++)
ind_buffer3[i]=iOsMA(NULL,0,FastEMA,SlowEMA,SignalSMA,PRICE_CLOSE,i);
//---- done
return(0);
} 

Comments