_TRO_Multi_Meter_CandleColor
Download scriptOverview of functionality
This script is designed as a multi-timeframe visual dashboard for MetaTrader. Instead of forcing you to switch back and forth between different timeframes (like 1-minute, 5-minute, or Daily charts) to see the current market trend, this tool gathers that information and displays it simultaneously in one convenient location on your screen.
How the Logic Works
1. Multi-Timeframe Data Gathering The core logic of the script involves "scanning" nine different timeframes at once: M1, M5, M15, M30, H1, H4, D1, W1, and MN1. For each of these periods, the script calculates the price difference between the opening and closing prices of the most recent candle.
2. Trend Identification Based on that price difference, the script determines the "sentiment" or direction of the market for each specific timeframe:
- Upward Trend: If the current price is higher than the opening price of the candle, it identifies a positive movement.
- Downward Trend: If the current price is lower than the opening price, it identifies a negative movement.
- Neutral/Equal: If there is no difference, it marks the trend as neutral.
3. Visual Dashboard Creation Once the script knows the trend for all nine timeframes, it creates a visual dashboard on your chart (typically in the top-right or top-left corner, depending on your settings). It displays:
- Timeframe Labels: Clear text headers identifying each period.
- Color-Coded Signals: It uses a distinct color system to show you the trend at a glance without requiring you to read complex numbers.
- Lime (Green) typically represents an upward move.
- Red typically represents a downward move.
- Yellow represents neutral movement.
4. Dynamic Positioning and Cleanup The script includes logic to ensure the dashboard stays organized. It calculates the specific X and Y coordinates for every label so they sit side-by-side in a clean row. Additionally, it includes "cleanup" instructions to ensure that when you remove the indicator from your chart, all the labels and visual objects are automatically deleted, leaving your workspace clean.
Summary of Benefit
For a trader, this provides an instant "bird's eye view" of the market. You can see at a glance if the 1-minute trend aligns with the Daily trend, or if there is a conflict between short-term and long-term price actions, all without ever leaving your primary chart.
//+------------------------------------------------------------------+
//| _TRO_Multi_Meter_CandleColor |
//| |
//| Copyright © 2007, Avery T. Horton, Jr. aka TheRumpledOne |
//| |
//| PO BOX 43575, TUCSON, AZ 85733 |
//| |
//| GIFT AND DONATIONS ACCEPTED |
//| |
//| therumpldone@gmail.com |
//+------------------------------------------------------------------+
//| |
//| go to www.kreslik.com for the latest indicator updates |
//+------------------------------------------------------------------+
//| |
//| Use www.efxgroup.com as your forex broker... |
//| ...tell them therumpledone sent you! |
//+------------------------------------------------------------------+
// thank you Xard777 from www.forex-tsd.com for showing me how to delete the objects properly.
// thank you mladen from www.forex-tsd.com for showing me I had a locals and global variables with same name
#property indicator_chart_window
extern bool Show_Heading = true;
extern string IndName = "CAN" ; // change
extern bool Corner_of_Chart_RIGHT_TOP = true;
extern int Shift_UP_DN =0;
extern int Adjust_Side_to_side = 20; // 20
extern color BarLabel_color = LightBlue;
extern color CommentLabel_color = LightBlue;
extern color Up_color = Lime;
extern color Eq_color = Yellow;
extern color Dn_color = Red;
//*******************
// change inputs for your indicator
extern int MA_Fast = 1;
extern int MA_Slow = 5;
extern int MA_MODE = 1;
extern int MA_PRICE_TYPE = 0;
//*******************
string ObjHead01,ObjHead02,ObjHead03,ObjHead04,ObjHead05,ObjHead06,ObjHead07,ObjHead08,ObjHead09,ObjHead10,ObjHead11;
string Obj0001,Obj0002,Obj0003,Obj0004,Obj0005,Obj0006,Obj0007,Obj0008,Obj0009,Obj0010,Obj0011;
//+---------------
double prDiff(int i, int j)
{
double _Diff = ( iClose( NULL , i,j) - iOpen( NULL , i,j) ) ;
return (_Diff);
}
//+---------------
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
//***********************************************************************************************************************
string LabelTime="";
if (LabelTime=="") {LabelTime=TimeToStr(TimeLocal(),TIME_SECONDS); }
int counted_bars=IndicatorCounted();
ObjHead01 = "CANColHead01" + LabelTime ;
ObjHead02 = "CANColHead02" + LabelTime ;
ObjHead03 = "CANColHead03" + LabelTime ;
ObjHead04 = "CANColHead04" + LabelTime ;
ObjHead05 = "CANColHead05" + LabelTime ;
ObjHead06 = "CANColHead06" + LabelTime ;
ObjHead07 = "CANColHead07" + LabelTime ;
ObjHead08 = "CANColHead08" + LabelTime ;
ObjHead09 = "CANColHead09" + LabelTime ;
string CAN_ObjHead01 ="M1 " ;
string CAN_ObjHead02 ="M5 " ;
string CAN_ObjHead03 ="M15 " ;
string CAN_ObjHead04 =" M30 " ;
string CAN_ObjHead05 ="H1 " ;
string CAN_ObjHead06 ="H4 " ;
string CAN_ObjHead07 ="D1 " ;
string CAN_ObjHead08 ="W1 " ;
string CAN_ObjHead09 ="MN1" ;
if (Corner_of_Chart_RIGHT_TOP == true)
{ int Col01x = 170+Adjust_Side_to_side ;
int Col01y = 28+Shift_UP_DN ;
}
if (Corner_of_Chart_RIGHT_TOP == false)
{ Col01x = 159+Adjust_Side_to_side ;
Col01y = 24+Shift_UP_DN ;
}
int ColAdj = -20 ;
int Col02x = Col01x + ColAdj ;
int Col03x = Col01x + ColAdj*2 ;
int Col04x = Col01x + ColAdj*3 ;
int Col05x = Col01x + ColAdj*4 ;
int Col06x = Col01x + ColAdj*5 ;
int Col07x = Col01x + ColAdj*6 ;
int Col08x = Col01x + ColAdj*7 ;
int Col09x = Col01x + ColAdj*8 ;
if ( Show_Heading) {
ObjectCreate(ObjHead01, OBJ_LABEL, 0, 0, 0);
ObjectSetText(ObjHead01,CAN_ObjHead01 , 7, "Tahoma Narrow", BarLabel_color);
ObjectSet(ObjHead01, OBJPROP_CORNER, Corner_of_Chart_RIGHT_TOP);
ObjectSet(ObjHead01, OBJPROP_XDISTANCE, Col01x);
ObjectSet(ObjHead01, OBJPROP_YDISTANCE, Col01y);
ObjectCreate(ObjHead02, OBJ_LABEL, 0, 0, 0);
ObjectSetText(ObjHead02,CAN_ObjHead02 , 7, "Tahoma Narrow", BarLabel_color);
ObjectSet(ObjHead02, OBJPROP_CORNER, Corner_of_Chart_RIGHT_TOP);
ObjectSet(ObjHead02, OBJPROP_XDISTANCE, Col02x);
ObjectSet(ObjHead02, OBJPROP_YDISTANCE, Col01y);
ObjectCreate(ObjHead03, OBJ_LABEL, 0, 0, 0);
ObjectSetText(ObjHead03,CAN_ObjHead03 , 7, "Tahoma Narrow", BarLabel_color);
ObjectSet(ObjHead03, OBJPROP_CORNER, Corner_of_Chart_RIGHT_TOP);
ObjectSet(ObjHead03, OBJPROP_XDISTANCE, Col03x);
ObjectSet(ObjHead03, OBJPROP_YDISTANCE, Col01y);
ObjectCreate(ObjHead04, OBJ_LABEL, 0, 0, 0);
ObjectSetText(ObjHead04,CAN_ObjHead04 , 7, "Tahoma Narrow", BarLabel_color);
ObjectSet(ObjHead04, OBJPROP_CORNER, Corner_of_Chart_RIGHT_TOP);
ObjectSet(ObjHead04, OBJPROP_XDISTANCE, Col04x);
ObjectSet(ObjHead04, OBJPROP_YDISTANCE, Col01y);
ObjectCreate(ObjHead05, OBJ_LABEL, 0, 0, 0);
ObjectSetText(ObjHead05,CAN_ObjHead05 , 7, "Tahoma Narrow", BarLabel_color);
ObjectSet(ObjHead05, OBJPROP_CORNER, Corner_of_Chart_RIGHT_TOP);
ObjectSet(ObjHead05, OBJPROP_XDISTANCE, Col05x);
ObjectSet(ObjHead05, OBJPROP_YDISTANCE, Col01y);
ObjectCreate(ObjHead06, OBJ_LABEL, 0, 0, 0);
ObjectSetText(ObjHead06,CAN_ObjHead06 , 7, "Tahoma Narrow", BarLabel_color);
ObjectSet(ObjHead06, OBJPROP_CORNER, Corner_of_Chart_RIGHT_TOP);
ObjectSet(ObjHead06, OBJPROP_XDISTANCE, Col06x);
ObjectSet(ObjHead06, OBJPROP_YDISTANCE, Col01y);
ObjectCreate(ObjHead07, OBJ_LABEL, 0, 0, 0);
ObjectSetText(ObjHead07,CAN_ObjHead07 , 7, "Tahoma Narrow", BarLabel_color);
ObjectSet(ObjHead07, OBJPROP_CORNER, Corner_of_Chart_RIGHT_TOP);
ObjectSet(ObjHead07, OBJPROP_XDISTANCE, Col07x);
ObjectSet(ObjHead07, OBJPROP_YDISTANCE, Col01y);
ObjectCreate(ObjHead08, OBJ_LABEL, 0, 0, 0);
ObjectSetText(ObjHead08,CAN_ObjHead08 , 7, "Tahoma Narrow", BarLabel_color);
ObjectSet(ObjHead08, OBJPROP_CORNER, Corner_of_Chart_RIGHT_TOP);
ObjectSet(ObjHead08, OBJPROP_XDISTANCE, Col08x);
ObjectSet(ObjHead08, OBJPROP_YDISTANCE, Col01y);
ObjectCreate(ObjHead09, OBJ_LABEL, 0, 0, 0);
ObjectSetText(ObjHead09,CAN_ObjHead09 , 7, "Tahoma Narrow", BarLabel_color);
ObjectSet(ObjHead09, OBJPROP_CORNER, Corner_of_Chart_RIGHT_TOP);
ObjectSet(ObjHead09, OBJPROP_XDISTANCE, Col09x);
ObjectSet(ObjHead09, OBJPROP_YDISTANCE, Col01y);
} // Show_Heading
//******************* change for your indicator ********************
string M1_CAN= "-",M5_CAN= "-", M15_CAN= "-", M30_CAN= "-", H1_CAN= "-", H4_CAN= "-", D1_CAN= "-",PRC1, W1_CAN= "-", MN1_CAN= "-";
color color_CANm1,color_CANm5,color_CANm15,color_CANm30,color_CANH1,color_CANH4,color_CAND1,color_CANW1,color_CANMN1;
//CAN Signals
double CAN_M1 = prDiff( PERIOD_M1, 0 );
double CAN_M5 = prDiff( PERIOD_M5, 0 );
double CAN_M15 = prDiff( PERIOD_M15, 0 );
double CAN_M30 = prDiff( PERIOD_M30, 0 );
double CAN_H1 = prDiff( PERIOD_H1, 0 );
double CAN_H4 = prDiff( PERIOD_H4, 0 );
double CAN_D1 = prDiff( PERIOD_D1, 0 );
double CAN_W1 = prDiff( PERIOD_W1, 0 );
double CAN_MN1 = prDiff( PERIOD_MN1, 0 );
if ( CAN_M1 > 0 ) color_CANm1 = Up_color;
else {
if ( CAN_M1 < 0 ) color_CANm1 = Dn_color;
else color_CANm1 = Eq_color; }
if (CAN_M5 >0) color_CANm5 = Up_color;
else {
if (CAN_M5 <0) color_CANm5 = Dn_color;
else color_CANm5 = Eq_color; }
if (CAN_M15>0) color_CANm15 = Up_color;
else {
if (CAN_M15<0) color_CANm15 = Dn_color;
else color_CANm15 = Eq_color; }
if (CAN_M30>0) color_CANm30 = Up_color;
else {
if (CAN_M30<0) color_CANm30 = Dn_color;
else color_CANm30 = Eq_color; }
if ( CAN_H1>0) color_CANH1 = Up_color;
else {
if ( CAN_H1<0) color_CANH1 = Dn_color;
else color_CANH1 = Eq_color; }
if (CAN_H4>0) color_CANH4 = Up_color;
else {
if (CAN_H4<0) color_CANH4 = Dn_color;
else color_CANH4 = Eq_color; }
if (CAN_D1>0) color_CAND1 = Up_color;
else {
if (CAN_D1<0) color_CAND1 = Dn_color;
else color_CAND1 = Eq_color; }
if (CAN_W1>0) color_CANW1 = Up_color;
else {
if (CAN_W1<0) color_CANW1 = Dn_color;
else color_CANW1 = Eq_color; }
if (CAN_MN1>0) color_CANMN1 = Up_color;
else {
if (CAN_MN1<0) color_CANMN1 = Dn_color;
else color_CANMN1 = Eq_color; }
//*******************
int Col00x = Col01x + 20 ;
int Col00y = 50+Shift_UP_DN ;
Col01y = 20+Shift_UP_DN ;
Obj0002 = "SignalCANM1t" + LabelTime ;
ObjectCreate(Obj0002, OBJ_LABEL, 0, 0, 0);
ObjectSetText(Obj0002,IndName, 7, "Tahoma Narrow", BarLabel_color);
ObjectSet(Obj0002, OBJPROP_CORNER, Corner_of_Chart_RIGHT_TOP);
ObjectSet(Obj0002, OBJPROP_XDISTANCE, Col00x);
ObjectSet(Obj0002, OBJPROP_YDISTANCE, Col00y); // 50+Shift_UP_DN
Obj0003 = "SignalCANM1" + LabelTime ;
ObjectCreate(Obj0003, OBJ_LABEL, 0, 0, 0);
ObjectSetText(Obj0003, M1_CAN, 40, "Tahoma Narrow", color_CANm1);
ObjectSet(Obj0003, OBJPROP_CORNER, Corner_of_Chart_RIGHT_TOP);
ObjectSet(Obj0003, OBJPROP_XDISTANCE, Col01x);
ObjectSet(Obj0003, OBJPROP_YDISTANCE, Col01y);
Obj0004 = "SignalCANM5" + LabelTime ;
ObjectCreate(Obj0004, OBJ_LABEL, 0, 0, 0);
ObjectSetText(Obj0004, M5_CAN, 40, "Tahoma Narrow", color_CANm5);
ObjectSet(Obj0004, OBJPROP_CORNER, Corner_of_Chart_RIGHT_TOP);
ObjectSet(Obj0004, OBJPROP_XDISTANCE, Col02x);
ObjectSet(Obj0004, OBJPROP_YDISTANCE, Col01y);
Obj0005 = "SignalCANM15" + LabelTime ;
ObjectCreate(Obj0005, OBJ_LABEL, 0, 0, 0);
ObjectSetText(Obj0005, M15_CAN, 40, "Tahoma Narrow", color_CANm15);
ObjectSet(Obj0005, OBJPROP_CORNER, Corner_of_Chart_RIGHT_TOP);
ObjectSet(Obj0005, OBJPROP_XDISTANCE, Col03x);
ObjectSet(Obj0005, OBJPROP_YDISTANCE, Col01y);
Obj0006 = "SignalCANM30" + LabelTime ;
ObjectCreate(Obj0006, OBJ_LABEL, 0, 0, 0);
ObjectSetText(Obj0006, M30_CAN, 40, "Tahoma Narrow", color_CANm30);
ObjectSet(Obj0006, OBJPROP_CORNER, Corner_of_Chart_RIGHT_TOP);
ObjectSet(Obj0006, OBJPROP_XDISTANCE, Col04x);
ObjectSet(Obj0006, OBJPROP_YDISTANCE, Col01y);
Obj0007 = "SignalCANM60" + LabelTime ;
ObjectCreate(Obj0007, OBJ_LABEL, 0, 0, 0);
ObjectSetText(Obj0007, H1_CAN, 40, "Tahoma Narrow", color_CANH1);
ObjectSet(Obj0007, OBJPROP_CORNER, Corner_of_Chart_RIGHT_TOP);
ObjectSet(Obj0007, OBJPROP_XDISTANCE, Col05x);
ObjectSet(Obj0007, OBJPROP_YDISTANCE, Col01y);
Obj0008 = "SignalCANM240" + LabelTime ;
ObjectCreate(Obj0008, OBJ_LABEL, 0, 0, 0);
ObjectSetText(Obj0008, H4_CAN, 40, "Tahoma Narrow", color_CANH4);
ObjectSet(Obj0008, OBJPROP_CORNER, Corner_of_Chart_RIGHT_TOP);
ObjectSet(Obj0008, OBJPROP_XDISTANCE, Col06x);
ObjectSet(Obj0008, OBJPROP_YDISTANCE, Col01y);
Obj0009 = "SignalCANM1440" + LabelTime ;
ObjectCreate(Obj0009, OBJ_LABEL, 0, 0, 0);
ObjectSetText(Obj0009, D1_CAN, 40, "Tahoma Narrow", color_CAND1);
ObjectSet(Obj0009, OBJPROP_CORNER, Corner_of_Chart_RIGHT_TOP);
ObjectSet(Obj0009, OBJPROP_XDISTANCE, Col07x);
ObjectSet(Obj0009, OBJPROP_YDISTANCE, Col01y);
Obj0010 = "SignalCANW1" + LabelTime ;
ObjectCreate(Obj0010, OBJ_LABEL, 0, 0, 0);
ObjectSetText(Obj0010, W1_CAN, 40, "Tahoma Narrow", color_CANW1);
ObjectSet(Obj0010, OBJPROP_CORNER, Corner_of_Chart_RIGHT_TOP);
ObjectSet(Obj0010, OBJPROP_XDISTANCE, Col08x);
ObjectSet(Obj0010, OBJPROP_YDISTANCE, Col01y);
Obj0011 = "SignalCANMN1" + LabelTime ;
ObjectCreate(Obj0011, OBJ_LABEL, 0, 0, 0);
ObjectSetText(Obj0011, MN1_CAN, 40, "Tahoma Narrow", color_CANMN1);
ObjectSet(Obj0011, OBJPROP_CORNER, Corner_of_Chart_RIGHT_TOP);
ObjectSet(Obj0011, OBJPROP_XDISTANCE, Col09x);
ObjectSet(Obj0011, OBJPROP_YDISTANCE, Col01y);
//----
return(0);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
ObjectsDeleteAll(0,OBJ_HLINE);
ObjectsDeleteAll(0,OBJ_TEXT);
ObjectsDeleteAll(0,OBJ_LABEL);
deleteObject();
//----
return(0);
}
void deleteObject()
{
//ObjectDelete(Obj0001);
ObjectDelete(Obj0002);
ObjectDelete(Obj0003);
ObjectDelete(Obj0004);
ObjectDelete(Obj0005);
ObjectDelete(Obj0006);
ObjectDelete(Obj0007);
ObjectDelete(Obj0008);
ObjectDelete(Obj0009);
ObjectDelete(Obj0010);
ObjectDelete(Obj0011);
ObjectDelete(ObjHead01);
ObjectDelete(ObjHead02);
ObjectDelete(ObjHead03);
ObjectDelete(ObjHead04);
ObjectDelete(ObjHead05);
ObjectDelete(ObjHead06);
ObjectDelete(ObjHead07);
ObjectDelete(ObjHead08);
ObjectDelete(ObjHead09);
}
Comments