#MTF_MACD_4_v1
Download scriptThis tool is designed to provide traders with a "Multi-Timeframe" (MTF) perspective on the MACD (Moving Average Convergence Divergence) indicator. In simple terms, it allows you to view trend data from a larger time scale—such as daily or weekly charts—while you are actually looking at a smaller, more immediate chart like a 15-minute or hourly one.
How it Works
The primary logic of this script is to bridge the gap between different timeframes. Instead of forcing you to switch back and forth between various tabs to see what the "big picture" looks like, this script automatically calculates the data from your chosen higher timeframe and overlays it onto your current screen.
Key Components of the Logic:
- Timeframe Selection: The user can specify exactly which larger timeframe they want to monitor (e.g., Daily, Weekly, 4-hour). The script takes that specific data "feed" and translates it to match the number of bars on your current chart.
- MACD Calculation: The script processes three specific data points from the chosen timeframe:
- The Main MACD Line: Represents the difference between two moving averages (Fast and Slow).
- The Signal Line: A secondary smoothing line used to identify potential trend reversals.
- The Histogram: A visual representation of the distance between the Main MACD and the Signal line, which helps in gauging the strength of a move.
- Synchronized Alignment: Because different timeframes have different numbers of candles per minute, the script includes logic to ensure that the data points align correctly in time. It "maps" the history of the larger timeframe so that the peaks and valleys correspond accurately with the current price action on your screen.
Summary for the User
Essentially, this script acts as a specialized lens. It allows you to keep your eyes on the immediate price movements while simultaneously watching the momentum and trend of a much larger market cycle. It removes the need to jump between different windows, providing a more holistic view of the market's direction at a single glance.
//+------------------------------------------------------------------+
//| MTF_MACD_4_v1.mq4 |
//| Copyright © 2006, TrendLaboratory |
//| http://finance.groups.yahoo.com/group/TrendLaboratory |
//| E-mail: igorad2003@yahoo.co.uk |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, TrendLaboratory"
#property link "http://finance.groups.yahoo.com/group/TrendLaboratory"
#property indicator_separate_window
#property indicator_buffers 3
#property indicator_color1 Blue
#property indicator_color2 Tomato
#property indicator_color3 LightBlue
#property indicator_width1 1
#property indicator_width2 1
#property indicator_style2 2
#property indicator_width3 2
//---- input parameters
/*************************************************************************
PERIOD_M1 1
PERIOD_M5 5
PERIOD_M15 15
PERIOD_M30 30
PERIOD_H1 60
PERIOD_H4 240
PERIOD_D1 1440
PERIOD_W1 10080
PERIOD_MN1 43200
You must use the numeric value of the timeframe that you want to use
when you set the TimeFrame' value with the indicator inputs.
**************************************************************************/
extern int TimeFrame = 0;
extern int Price=0;
extern int FastEMA=12;
extern int SlowEMA=26;
extern int SignalEMA=9;
//---- indicator buffers
double MACD[];
double Signal[];
double HistoMACD[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
string short_name;
//---- indicator line
SetIndexStyle(0,DRAW_LINE);
SetIndexStyle(1,DRAW_LINE);
SetIndexStyle(2,DRAW_HISTOGRAM);
SetIndexBuffer(0,MACD);
SetIndexBuffer(1,Signal);
SetIndexBuffer(2,HistoMACD);
IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS));
//---- name for DataWindow and indicator subwindow label
switch(TimeFrame)
{
case 1 : string TimeFrameStr="Period_M1"; break;
case 5 : TimeFrameStr="Period_M5"; break;
case 15 : TimeFrameStr="Period_M15"; break;
case 30 : TimeFrameStr="Period_M30"; break;
case 60 : TimeFrameStr="Period_H1"; break;
case 240 : TimeFrameStr="Period_H4"; break;
case 1440 : TimeFrameStr="Period_D1"; break;
case 10080 : TimeFrameStr="Period_W1"; break;
case 43200 : TimeFrameStr="Period_MN1"; break;
default : TimeFrameStr="Current Timeframe";
}
short_name="MTF MACD("+TimeFrameStr+","+FastEMA+","+SlowEMA+","+SignalEMA+")";
IndicatorShortName(short_name);
SetIndexLabel(0,"MTF_MACD");
SetIndexLabel(1,"Signal");
SetIndexLabel(2,"HistoMACD");
//----
//SetIndexDrawBegin(0,SlowEMA);
//SetIndexDrawBegin(1,SignalEMA);
//SetIndexDrawBegin(2,SignalEMA);
//----
return(0);
}
//+------------------------------------------------------------------+
//| MTF_MACD_4_v1 |
//+------------------------------------------------------------------+
int start()
{
datetime TimeArray[];
int i,limit,y=0,counted_bars=IndicatorCounted();
// Plot defined time frame on to current time frame
ArrayCopySeries(TimeArray,MODE_TIME,Symbol(),TimeFrame);
limit=Bars-counted_bars+TimeFrame/Period();
for(i=0,y=0;i<limit;i++)
{
if (Time[i]<TimeArray[y]) y++;
/***********************************************************
Add your main indicator loop below. You can add the full
indicator code or you can just reference an existing
indicator with its iValue or iCustom.
Rule 1: Add extern inputs above for all neccesary values
Rule 2: Use 'TimeFrame' for the indicator time frame
Rule 3: Use 'y' for your indicator's shift value
**********************************************************/
MACD[i]=iCustom(NULL,TimeFrame,"MACD_4_v1",Price,FastEMA,SlowEMA,SignalEMA,0,y);
Signal[i] = iCustom(NULL,TimeFrame,"MACD_4_v1",Price,FastEMA,SlowEMA,SignalEMA,1,y);
HistoMACD[i] = iCustom(NULL,TimeFrame,"MACD_4_v1",Price,FastEMA,SlowEMA,SignalEMA,2,y);
}
return(0);
}
//+------------------------------------------------------------------+
Comments