GMACD
Download scriptThis script is designed to provide a comprehensive overview of market trends by analyzing the Moving Average Convergence Divergence (MACD) across multiple timeframes simultaneously. Instead of forcing you to switch between different charts to see what is happening on various periods, this tool aggregates that data into a single visual display.
How the Logic Works
1. Multi-Timeframe Data Collection The script constantly monitors several different timeframes at once—ranging from very fast movements (1 minute) to long-term trends (Monthly). For each of these periods, it calculates two primary pieces of information:
- The Main Signal: The core momentum of the price.
- The Signal Line: A secondary indicator used to confirm the strength and direction of that momentum.
2. Trend Identification & Color Coding The tool translates these mathematical values into easy-to-read color signals:
- Green (Lime): Indicates positive momentum (the "Main" value is above the "Signal").
- Red: Indicates negative momentum (the "Main" value is below the "Signal").
- Orange/Other Colors: These are used to identify "Sideways" or "Consolidation" markets where the trend isn't clearly moving in one direction.
3. Tiered Analysis Logic The script doesn't just look at these timeframes individually; it groups them to provide a "big picture" summary:
- Short-Term Signal: It compares the 1-minute and 5-minute charts to tell you if the immediate, fast-moving price action is trending up, down, or moving sideways.
- Main Trend: It looks at the medium-term view (15 minutes through the 4-hour chart). It combines these into a single status update to show you the primary direction of the current trading session.
- Trend Level: This is a sophisticated logic check. The script compares multiple timeframes against each other to determine the quality of the trend. Depending on how many timeframes agree with one another, it labels the market as:
- Strong: When multiple timeframes align perfectly.
- Medium: When there is some agreement but not total consensus.
- Weak: When the timeframes are providing conflicting signals (e.g., short-term is up while long-term is down).
4. Major Trend Overlay (Optional) With a specific setting enabled, the tool also pulls in "Macro" data from the Daily, Weekly, and Monthly charts. This allows a trader to see if the very large-scale market direction supports the smaller, faster moves happening on the screen.
Summary for the User
Essentially, this script acts as a market dashboard. It automatically "scans" various timeframes in the background and summarizes them into a single line of text labels on your chart. It tells you not just where the price is going (Up or Down), but also how healthy that move is (Strong, Medium, or Weak) by checking for agreement across the entire timeframe spectrum.
//+------------------------------------------------------------------+
//| GMACD_Signals.mq4 |
//| Copyright © 2006, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
/*********************************************************************
*
* Date: December 14, 2006
* Custom Indicator: GMACD_Signals.mq4
* Version: 1.0.1
* Description: Multi TimeFrame MACD Signal
*
* Change Logs
* Version 1.0.1
* - Rewriting Code. Using less variable & ObjectCreate. Reduce CPU
* Usage. Solve multiple object label show on load.
**********************************************************************/
#property indicator_separate_window
extern int FastEMA = 8;
extern int SlowEMA = 17;
extern int SignalSMA = 9;
extern bool Show_MAJOR_TREND = true;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
IndicatorShortName("GMACD");
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
ObjectsDeleteAll(0,OBJ_LABEL);
ObjectDelete("Label1"); ObjectDelete("Label2"); ObjectDelete("Label3");
ObjectDelete("DataM1"); ObjectDelete("DataM5"); ObjectDelete("DataM15");
ObjectDelete("DataM30"); ObjectDelete("DataH1"); ObjectDelete("DataH4");
ObjectDelete("DataD1"); ObjectDelete("DataW1"); ObjectDelete("DataMN");
ObjectDelete("Trend1"); ObjectDelete("Trend2"); ObjectDelete("Level1");
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int counted_bars = IndicatorCounted();
//----
double macd_M1=iMACD(NULL,PERIOD_M1,FastEMA,SlowEMA,SignalSMA,PRICE_CLOSE,MODE_MAIN,0);
double macd_MM1=iMACD(NULL,PERIOD_M1,FastEMA,SlowEMA,SignalSMA,PRICE_CLOSE,MODE_SIGNAL,0);
double macd_M5=iMACD(NULL,PERIOD_M5,FastEMA,SlowEMA,SignalSMA,PRICE_CLOSE,MODE_MAIN,0);
double macd_MM5=iMACD(NULL,PERIOD_M5,FastEMA,SlowEMA,SignalSMA,PRICE_CLOSE,MODE_SIGNAL,0);
double macd_M15=iMACD(NULL,PERIOD_M15,FastEMA,SlowEMA,SignalSMA,PRICE_CLOSE,MODE_MAIN,0);
double macd_MM15=iMACD(NULL,PERIOD_M15,FastEMA,SlowEMA,SignalSMA,PRICE_CLOSE,MODE_SIGNAL,0);
double macd_M30=iMACD(NULL,PERIOD_M30,FastEMA,SlowEMA,SignalSMA,PRICE_CLOSE,MODE_MAIN,0);
double macd_MM30=iMACD(NULL,PERIOD_M30,FastEMA,SlowEMA,SignalSMA,PRICE_CLOSE,MODE_SIGNAL,0);
double macd_H1=iMACD(NULL,PERIOD_H1,FastEMA,SlowEMA,SignalSMA,PRICE_CLOSE,MODE_MAIN,0);
double macd_HH1=iMACD(NULL,PERIOD_H1,FastEMA,SlowEMA,SignalSMA,PRICE_CLOSE,MODE_SIGNAL,0);
double macd_H4=iMACD(NULL,PERIOD_H4,FastEMA,SlowEMA,SignalSMA,PRICE_CLOSE,MODE_MAIN,0);
double macd_HH4=iMACD(NULL,PERIOD_H4,FastEMA,SlowEMA,SignalSMA,PRICE_CLOSE,MODE_SIGNAL,0);
if (Show_MAJOR_TREND == true)
{
double macd_D1=iMACD(NULL,PERIOD_D1,FastEMA,SlowEMA,SignalSMA,PRICE_CLOSE,MODE_MAIN,0);
double macd_DD1=iMACD(NULL,PERIOD_D1,FastEMA,SlowEMA,SignalSMA,PRICE_CLOSE,MODE_SIGNAL,0);
double macd_W1=iMACD(NULL,PERIOD_W1,FastEMA,SlowEMA,SignalSMA,PRICE_CLOSE,MODE_MAIN,0);
double macd_WW1=iMACD(NULL,PERIOD_W1,FastEMA,SlowEMA,SignalSMA,PRICE_CLOSE,MODE_SIGNAL,0);
double macd_MN1=iMACD(NULL,PERIOD_MN1,FastEMA,SlowEMA,SignalSMA,PRICE_CLOSE,MODE_MAIN,0);
double macd_MMN1=iMACD(NULL,PERIOD_MN1,FastEMA,SlowEMA,SignalSMA,PRICE_CLOSE,MODE_SIGNAL,0);
}
string trend_signal = "", trend_main = "", trend_level = "";
color color_m1, color_m5, color_m15, color_m30, color_h1, color_h4, color_d1, color_w1, color_mn,
color_signal, color_main, color_level;
// UP Data
if ((macd_M5 > macd_MM5) && (macd_M1 > macd_MM1)) { trend_signal = "TREND/UP"; color_signal = Lime;}
//Down Data
if ((macd_M5 < macd_MM5) && (macd_M1 < macd_MM1)) { trend_signal = "TREND/DN"; color_signal = Red; }
//Consolidation Data
if ((macd_M5 < macd_MM5) && (macd_M1 > macd_MM1)) { trend_signal = "SIDEWAY"; color_signal = Orange; }
if ((macd_M5 > macd_MM5) && (macd_M1 < macd_MM1)) { trend_signal = "SIDEWAY"; color_signal = Orange; }
if ((macd_M15 < macd_MM15) && (macd_M30 > macd_MM30) && (macd_H1 > macd_HH1)&& (macd_H4 < macd_HH4)) { trend_level = "WEAK"; color_level = Tomato; }
if ((macd_M15 > macd_MM15) && (macd_M30 < macd_MM30) && (macd_H1 < macd_HH1)&& (macd_H4 > macd_HH4)) { trend_level = "WEAK"; color_level = Tomato; }
if ((macd_M15 < macd_MM15) && (macd_M30 > macd_MM30) && (macd_H1 < macd_HH1) && (macd_H4 < macd_HH4)) { trend_level = "MEDIUM"; color_level = Orange; }
if ((macd_M15 > macd_MM15) && (macd_M30 < macd_MM30) && (macd_H1 > macd_HH1) && (macd_H4 > macd_HH4)) { trend_level = "MEDIUM"; color_level = Orange; }
if ((macd_M5 > macd_MM5) && (macd_M15 > macd_MM15) && (macd_M30 > macd_MM30) && (macd_H1 < macd_HH1) && (macd_H4 > macd_HH4)) { trend_level = "MEDIUM"; color_level = Orange; }
if ((macd_M5 < macd_MM5) && (macd_M15 < macd_MM15) && (macd_M30 < macd_MM30) && (macd_H1 >macd_HH1) && (macd_H4 < macd_HH4)) { trend_level = "MEDIUM"; color_level = Orange; }
if ((macd_M15 < macd_MM15) && (macd_M30 > macd_MM30) && (macd_H1 > macd_HH1)) { trend_main = "TREND/UP"; color_main = YellowGreen; }
if ((macd_M15 > macd_MM15) && (macd_M30 < macd_MM30) && (macd_H1 < macd_HH1)) { trend_main = "TREND/DN"; color_main = Tomato; }
if ((macd_M15 < macd_MM15) && (macd_M30 < macd_MM30) && (macd_H1 > macd_HH1)) { trend_main = "TREND/DN"; color_main = Tomato; }
if ((macd_M15 > macd_MM15) && (macd_M30 > macd_MM30) && (macd_H1 < macd_HH1)) { trend_main = "TREND/UP"; color_main = YellowGreen; }
if ((macd_M15 < macd_MM15) && (macd_M30 > macd_MM30) && (macd_H1 < macd_HH1)) { trend_main = "TREND/DN"; color_main = Red; }
if ((macd_M15 > macd_MM15) && (macd_M30 < macd_MM30) && (macd_H1 > macd_HH1)) { trend_main = "TREND/UP"; color_main = Lime; }
if ((macd_M5 < macd_MM5) && (macd_M15 < macd_MM15) && (macd_H1 > macd_HH1) && (macd_H4 > macd_HH4)) { trend_level = "WEAK"; color_level = Tomato; }
if ((macd_M5 > macd_MM5) && (macd_M15 > macd_MM15) && (macd_H1 < macd_HH1) && (macd_H4 < macd_HH4)) { trend_level = "WEAK"; color_level = Tomato; }
if ((macd_M15 > macd_MM15) && (macd_H1 > macd_HH1) && (macd_M30 > macd_MM30) && (macd_H4 < macd_HH4)) { trend_level = "MEDIUM"; color_level = Orange; }
if ((macd_M15 < macd_MM15) && (macd_H1 < macd_HH1) && (macd_M30 < macd_MM30) && (macd_H4 > macd_HH4)) { trend_level = "MEDIUM"; color_level = Orange; }
if ((macd_M15 > macd_MM15) && (macd_H1 > macd_HH1) && (macd_M30 > macd_MM30) && (macd_H4 > macd_HH4)) { trend_level = "STRONG"; color_level = Yellow; }
if ((macd_M15 < macd_MM15) && (macd_H1 < macd_HH1) && (macd_M30 < macd_MM30) && (macd_H4 < macd_HH4)) { trend_level = "STRONG"; color_level = Yellow; }
if ((macd_M15 > macd_MM15) && (macd_H1 > macd_HH1) && (macd_M30 > macd_MM30) && (macd_H4 > macd_HH4)) { trend_main = "TREND/UP"; color_main = Lime; }
if ((macd_M15 < macd_MM15) && (macd_H1 < macd_HH1) && (macd_M30 < macd_MM30) && (macd_H4 < macd_HH4)) { trend_main = "TREND/DN"; color_main = Red; }
if ((macd_M15 > macd_MM15) && (macd_H1 > macd_HH1) && (macd_M30 > macd_MM30) && (macd_H4 < macd_HH4)) { trend_main = "TREND/UP"; color_main = Lime; }
if ((macd_M15 < macd_MM15) && (macd_H1 < macd_HH1) && (macd_M30 < macd_MM30) && (macd_H4 > macd_HH4)) { trend_main = "TREND/DN"; color_main = Red; }
//MACD Direction
if ((macd_M1 > macd_MM1)) { color_m1 = Lime; }
if ((macd_M1 < macd_MM1)) { color_m1 = Red; }
if ((macd_M5 > macd_MM5)) { color_m5 = Lime; }
if ((macd_M5 < macd_MM5)) { color_m5 = Red; }
if ((macd_M15 > macd_MM15)) { color_m15 = Lime; }
if ((macd_M15 < macd_MM15)) { color_m15 = Red; }
if ((macd_M30 > macd_MM30)) { color_m30 = Lime; }
if ((macd_M30 < macd_MM30)) { color_m30 = Red; }
if ((macd_H1 > macd_HH1)) { color_h1 = Lime; }
if ((macd_H1 < macd_HH1)) { color_h1 = Red; }
if ((macd_H4 > macd_HH4)) { color_h4 = Lime; }
if ((macd_H4 < macd_HH4)) { color_h4 = Red; }
if (Show_MAJOR_TREND == true)
{
if ((macd_D1 > macd_DD1)) { color_d1 = Lime; }
if ((macd_D1 < macd_DD1)) { color_d1 = Red; }
if ((macd_W1 > macd_WW1)) { color_w1 = Lime; }
if ((macd_W1 < macd_WW1)) { color_w1 = Red; }
if ((macd_MN1 > macd_MMN1)) { color_mn = Lime; }
if ((macd_MN1 < macd_MMN1)) { color_mn = Red; }
}
//Signal Labels
ObjectCreate("Label1", OBJ_LABEL, WindowFind("GMACD"), 0, 0);
ObjectSetText("Label1","SIGNAL",8, "Arial Bold", Silver);
ObjectSet("Label1", OBJPROP_CORNER, 0);
ObjectSet("Label1", OBJPROP_XDISTANCE, 105);
ObjectSet("Label1", OBJPROP_YDISTANCE, 4);
//MACD Direction M1-M5
ObjectCreate("DataM1", OBJ_LABEL, WindowFind("GMACD"), 0, 0);//M1 SIGNAL
ObjectSetText("DataM1","M1",9, "Arial Bold", color_m1);
ObjectSet("DataM1", OBJPROP_CORNER, 0);
ObjectSet("DataM1", OBJPROP_XDISTANCE, 150);
ObjectSet("DataM1", OBJPROP_YDISTANCE, 4);
ObjectCreate("DataM5", OBJ_LABEL, WindowFind("GMACD"), 0, 0);//M5 SIGNAL
ObjectSetText("DataM5","M5",9, "Arial Bold", color_m5);
ObjectSet("DataM5", OBJPROP_CORNER, 0);
ObjectSet("DataM5", OBJPROP_XDISTANCE, 175);
ObjectSet("DataM5", OBJPROP_YDISTANCE, 4);
//M1 & M5 TREND Data
ObjectCreate("Trend1", OBJ_LABEL, WindowFind("GMACD"), 0, 0);
ObjectSetText("Trend1",trend_signal,12, "Arial Bold", color_signal);
ObjectSet("Trend1", OBJPROP_CORNER, 0);
ObjectSet("Trend1", OBJPROP_XDISTANCE, 200);
ObjectSet("Trend1", OBJPROP_YDISTANCE, 4);
//Main Trend Label
ObjectCreate("Label2", OBJ_LABEL, WindowFind("GMACD"), 0, 0);
ObjectSetText("Label2","MAIN TREND", 8, "Arial Bold", Silver);
ObjectSet("Label2", OBJPROP_CORNER, 0);
ObjectSet("Label2", OBJPROP_XDISTANCE, 300);
ObjectSet("Label2", OBJPROP_YDISTANCE, 4);
//MACD Direction M15-H4
ObjectCreate("DataM15", OBJ_LABEL, WindowFind("GMACD"), 0, 0);//M15 SIGNAL
ObjectSetText("DataM15","M15",9, "Arial Bold", color_m15);
ObjectSet("DataM15", OBJPROP_CORNER, 0);
ObjectSet("DataM15", OBJPROP_XDISTANCE, 370);
ObjectSet("DataM15", OBJPROP_YDISTANCE, 4);
ObjectCreate("DataM30", OBJ_LABEL, WindowFind("GMACD"), 0, 0);//M30 SIGNAL
ObjectSetText("DataM30","M30",9, "Arial Bold", color_m30);
ObjectSet("DataM30", OBJPROP_CORNER, 0);
ObjectSet("DataM30", OBJPROP_XDISTANCE, 400);
ObjectSet("DataM30", OBJPROP_YDISTANCE, 4);
ObjectCreate("DataH1", OBJ_LABEL, WindowFind("GMACD"), 0, 0);//H1 SIGNAL
ObjectSetText("DataH1","H1",9, "Arial Bold", color_h1);
ObjectSet("DataH1", OBJPROP_CORNER, 0);
ObjectSet("DataH1", OBJPROP_XDISTANCE, 430);
ObjectSet("DataH1", OBJPROP_YDISTANCE, 4);
ObjectCreate("DataH4", OBJ_LABEL, WindowFind("GMACD"), 0, 0);//H4 SIGNAL
ObjectSetText("DataH4","H4",9, "Arial Bold", color_h4);
ObjectSet("DataH4", OBJPROP_CORNER, 0);
ObjectSet("DataH4", OBJPROP_XDISTANCE, 450);
ObjectSet("DataH4", OBJPROP_YDISTANCE, 4);
//M15 - H4 TREND Data
ObjectCreate("Trend2", OBJ_LABEL, WindowFind("GMACD"), 0, 0);
ObjectSetText("Trend2",trend_main,12, "Arial Bold", color_main);
ObjectSet("Trend2", OBJPROP_CORNER, 0);
ObjectSet("Trend2", OBJPROP_XDISTANCE, 475);
ObjectSet("Trend2", OBJPROP_YDISTANCE, 4);
//Level Data
ObjectCreate("Level1", OBJ_LABEL, WindowFind("GMACD"), 0, 0);
ObjectSetText("Level1",trend_level,8, "Arial Bold", color_level);
ObjectSet("Level1", OBJPROP_CORNER, 0);
ObjectSet("Level1", OBJPROP_XDISTANCE, 565);
ObjectSet("Level1", OBJPROP_YDISTANCE, 4);
if (Show_MAJOR_TREND == true)
{
ObjectCreate("Label3", OBJ_LABEL, WindowFind("GMACD"), 0, 0);
ObjectSetText("Label3","MAJOR TREND", 8, "Arial Bold", Silver);
ObjectSet("Label3", OBJPROP_CORNER, 0);
ObjectSet("Label3", OBJPROP_XDISTANCE, 615);
ObjectSet("Label3", OBJPROP_YDISTANCE, 4);
ObjectCreate("DataD1", OBJ_LABEL, WindowFind("GMACD"), 0, 0);//D1 SIGNAL
ObjectSetText("DataD1","D1",9, "Arial Bold", color_d1);
ObjectSet("DataD1", OBJPROP_CORNER, 0);
ObjectSet("DataD1", OBJPROP_XDISTANCE, 695);
ObjectSet("DataD1", OBJPROP_YDISTANCE, 4);
ObjectCreate("DataW1", OBJ_LABEL, WindowFind("GMACD"), 0, 0);//W1 SIGNAL
ObjectSetText("DataW1","W1",9, "Arial Bold", color_w1);
ObjectSet("DataW1", OBJPROP_CORNER, 0);
ObjectSet("DataW1", OBJPROP_XDISTANCE, 715);
ObjectSet("DataW1", OBJPROP_YDISTANCE, 4);
ObjectCreate("DataMN", OBJ_LABEL, WindowFind("GMACD"), 0, 0);//MN SIGNAL
ObjectSetText("DataMN","MN",9, "Arial Bold", color_mn);
ObjectSet("DataMN", OBJPROP_CORNER, 0);
ObjectSet("DataMN", OBJPROP_XDISTANCE, 740);
ObjectSet("DataMN", OBJPROP_YDISTANCE, 4);
}
//----
return(0);
//----
}
//+------------------------------------------------------------------+
Comments