MACD_Mirror
Download scriptThe MACD Mirror tool is a specialized technical analysis indicator designed to provide traders with a multi-dimensional view of market momentum. By utilizing and "mirroring" standard Moving Average Convergence Divergence (MACD) principles, it helps identify the relationship between opening and closing prices more clearly than a standard indicator might allow.
How the Logic Works
The core functionality of this tool is built on three distinct data streams that calculate different aspects of price action:
1. The Primary Momentum (MACD) The first component calculates the difference between the Exponential Moving Average (EMA) of the Closing Price and the EMA of the Opening Price. This tells you the direction in which the price is moving relative to where it started during the current period.
2. The Mirror Momentum (MACD2) This is the unique "mirror" component. Instead of looking at the close vs. the open, it reverses the logic by calculating the difference between the EMA of the Opening Price and the EMA of the Closing Price. By displaying this alongside the primary momentum, the tool allows you to see a symmetrical reflection of price movement, making it easier to spot extremes or reversals in price flow.
3. The Signal Line To smooth out the fluctuations of these two data points and provide actionable trend information, the script calculates a third "Signal Line." This line takes the Primary Momentum (MACD) and applies a Simple Moving Average (SMA) to it. This helps filter out market "noise" and identifies the general direction of the trend.
Summary for Traders
By combining these three elements into a single visual window, the tool provides a comprehensive view of price dynamics:
- Red/Blue Lines: Represent the primary and mirrored momentum values, showing how aggressively the price is pulling away from its opening point.
- Yellow Line: Acts as the smoothed guide to help identify when momentum is shifting significantly enough to suggest a potential change in trend.
This dual-perspective approach is intended to give you a clearer picture of market volatility and balance by visualizing both the standard movement and its mathematical opposite simultaneously.
//+------------------------------------------------------------------+
//| MACD_Mirror.mq4 |
//| Copyright © 2010, Andy Tjatur Pramono. |
//| andy.tjatur@gmail.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2010, Andy Tjatur Pramono."
#property link "andy.tjatur@gmail.com"
//---- indicator settings
#property indicator_separate_window
#property indicator_level1 0
#property indicator_levelcolor Yellow
#property indicator_buffers 3
#property indicator_color1 Red
#property indicator_color2 Blue
#property indicator_color3 Yellow
#property indicator_width1 2
#property indicator_width2 2
#property indicator_width3 2
//---- indicator parameters
extern int PeriodeEMA=20;
extern int SignalSMA=9;
//---- indicator buffers
double MacdBuffer[];
double Macd2Buffer[];
double SignalBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- drawing settings
SetIndexStyle(0,DRAW_LINE);
SetIndexStyle(1,DRAW_LINE);
SetIndexStyle(2,DRAW_LINE);
SetIndexDrawBegin(2,SignalSMA);
IndicatorDigits(Digits+1);
//---- indicator buffers mapping
SetIndexBuffer(0,MacdBuffer);
SetIndexBuffer(1,Macd2Buffer);
SetIndexBuffer(2,SignalBuffer);
//---- name for DataWindow and indicator subwindow label
IndicatorShortName("MACD_Mirror by Andy Tjatur("+PeriodeEMA+","+SignalSMA+")");
SetIndexLabel(0,"MACD");
SetIndexLabel(1,"MACD2");
SetIndexLabel(2,"Signal");
//---- initialization done
return(0);
}
//+------------------------------------------------------------------+
//| MACD MIRROR |
//+------------------------------------------------------------------+
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 mirror counted in the 1-st buffer
for(int i=0; i<limit; i++)
MacdBuffer[i]=iMA(NULL,0,PeriodeEMA,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,PeriodeEMA,0,MODE_EMA,PRICE_OPEN,i);
//---- macd mirror counted in the 2-nd buffer
for( i=0; i<limit; i++)
Macd2Buffer[i]=iMA(NULL,0,PeriodeEMA,0,MODE_EMA,PRICE_OPEN,i)-iMA(NULL,0,PeriodeEMA,0,MODE_EMA,PRICE_CLOSE,i);
//---- signal line mirror counted in the 3-rd buffer
for( i=0; i<limit; i++)
SignalBuffer[i]=iMAOnArray(MacdBuffer,Bars,SignalSMA,0,MODE_SMA,i);
//---- done
return(0);
}
//+------------------------------------------------------------------+
Comments