MACD + osMA

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

This custom trading indicator is designed to provide a multi-layered analysis of market momentum by combining three distinct technical components into a single visual display. It functions by tracking the relationship between different price averages to help traders identify trends, strength, and potential turning points in the market.

The logic behind the tool can be broken down into three primary layers:

1. The MACD Component (The Difference)

At its core, the script calculates a "Moving Average Convergence Divergence" (MACD). It does this by comparing two different types of averages: a "Fast" average (which reacts quickly to recent price changes) and a "Slow" average (which reflects the longer-term trend). By subtracting the slow average from the fast one, the tool produces a line that shows whether the current momentum is accelerating upward or downward.

2. The Signal Line (The Smoothing Filter)

To prevent traders from reacting to minor, insignificant "noise" in the price, the script takes the data from the MACD calculation mentioned above and applies a second layer of smoothing. This creates a "Signal Line." When the primary MACD line crosses over or under this signal line, it acts as a secondary confirmation of whether a trend is gaining strength or losing steam.

3. The OsMA Component (The Volume/Momentum Histogram)

In addition to the lines described above, the script includes an "On Balance Momentum" (OsMA) calculation. This part of the logic provides a visual histogram. It essentially measures the cumulative momentum of the price movement. While the lines help identify the direction and crossover points, this histogram gives you a broader view of how much "force" is behind the current price move.

Summary for the User

When you view this on your chart, you are seeing a comprehensive snapshot of market energy:

  • The Lines: Show you the immediate relationship between short-term and long-term price trends and provide specific points of interest when they intersect.
  • The Histogram: Provides a visual representation of momentum intensity over time.

By combining these three elements, the script allows you to see not just where the price is going, but how fast it is moving and whether that movement has enough momentum to sustain itself.

Indicators Used
Moving average indicatorMoving average indicatorMoving Average of Oscillator
Miscellaneous
Implements a curve of type %1
12 Views
0 Downloads
0 Favorites
MACD + osMA
//+------------------------------------------------------------------+
//| 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 Silver
#property indicator_color2 Red
#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