Author: Copyright � 2004, MetaQuotes Software Corp.
mqcodes

This custom trading indicator is designed to provide visual clarity on market trends by combining three distinct mathematical models into a single display window. It serves as a technical tool to help traders identify momentum shifts and price relationships through the following logic:

Core Components and Logic

1. The MACD (Moving Average Convergence Divergence) Component The script first calculates the difference between two different types of moving averages—a "fast" average and a "slow" average. By subtracting the slower trend from the faster one, the tool highlights the distance between short-term price action and long-term price trends. When this gap widens or narrows, it signals a change in the strength of the market's movement.

2. The Signal Line To make the MACD data more actionable, the script applies an additional smoothing calculation to the MACD results. This creates a "Signal Line." By observing how the primary MACD value interacts with this Signal Line (such as crossing above or below it), traders can better identify potential entry or exit points where momentum is gaining or losing steam.

3. The OsMA (Oscillator of Moving Average) Component In addition to the standard MACD metrics, the script incorporates an OsMA calculation. While the regular MACD focuses on the difference between two averages, the OsMA acts as a visual oscillator that represents the cumulative momentum of those moving averages over time. This provides a different perspective on market "velocity," helping to confirm whether a trend is accelerating or exhausting.

How it Functions Together

The script processes all three of these calculations simultaneously across your price history. It organizes them into a single window so that you can view:

  • Trend Strength: The main MACD line shows the current gap between fast and slow price movements.
  • Trend Confirmation: The Signal Line provides a smoothed reference point to filter out "noise" in the data.
  • Momentum Visualization: The OsMA histogram provides a complementary view of how the moving averages are evolving relative to one another.

By integrating these three elements, the tool aims to give a more comprehensive picture of market dynamics than any of the indicators could provide individually, allowing for a clearer distinction between temporary price fluctuations and sustained trend shifts.

Indicators Used
Moving average indicatorMoving average indicatorMoving Average of Oscillator
Miscellaneous
Implements a curve of type %1
16 Views
0 Downloads
0 Favorites
mqcodes
//compile//------------------------------------------------------------------+
//| 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