_TRO_Multi_Meter_Control
Download scriptThis script functions as a multi-timeframe dashboard for MetaTrader, designed to provide a quick visual overview of market sentiment across various time periods simultaneously. Instead of requiring you to switch back and forth between different charts (like looking at the 1-minute, 5-minute, or Daily charts individually), this tool aggregates that data into a single display on your current screen.
How the Logic Works
Multi-Timeframe Data Gathering The core logic of the script involves scanning nine different timeframes: M1, M5, M15, M30, H1, H4, D1, W1, and MN1 (Monthly). For every single one of these periods, the script identifies the "middle point" (the midpoint between the highest and lowest price) of both the current candle and the previous candle.
Trend Detection The tool then compares the current closing price of each timeframe against those two midpoints to determine the market direction:
- Upward Trend: If the current price is higher than the midpoints of both the current and previous candles, the script identifies this as an upward movement.
- Downward Trend: If the current price is lower than the midpoints of both candles, it identifies a downward movement.
- Neutral/Equal: If the price sits between these points, it is flagged as neutral or sideways.
Visual Representation Once the logic determines the trend for each timeframe, it translates that information into a color-coded dashboard:
- Lime Green: Indicates an upward trend.
- Red: Indicates a downward trend.
- Yellow: Indicates a neutral or undecided market state.
Dynamic Dashboard Display The script handles all the "heavy lifting" of the visual layout. It automatically creates and places text labels on your chart (typically in the top right corner). It organizes these labels into a clean row, displaying the timeframe name followed by the corresponding colored symbol. Because it uses unique timestamps for these objects, it ensures that the dashboard refreshes accurately as new price data arrives, providing you with a real-time "heartbeat" of the market across multiple scales at once.
Clean Exit Logic To ensure your trading platform remains tidy, the script includes a cleanup routine. When you remove the tool from your chart, it automatically deletes all the labels and visual objects it created, leaving your workspace exactly as it was before the script was applied.
//+------------------------------------------------------------------+
//| _TRO_Multi_Meter_Control |
//| |
//| 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 = false;
extern string IndName = "CTL" ; // change
extern bool Corner_of_Chart_RIGHT_TOP = true;
extern int Shift_UP_DN =15;
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
//*******************
string ObjHead01,ObjHead02,ObjHead03,ObjHead04,ObjHead05,ObjHead06,ObjHead07,ObjHead08,ObjHead09,ObjHead10,ObjHead11;
string Obj0001,Obj0002,Obj0003,Obj0004,Obj0005,Obj0006,Obj0007,Obj0008,Obj0009,Obj0010,Obj0011;
//+------------------------------------------------------------------+
//| 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 = "CTLColHead01" + LabelTime ;
ObjHead02 = "CTLColHead02" + LabelTime ;
ObjHead03 = "CTLColHead03" + LabelTime ;
ObjHead04 = "CTLColHead04" + LabelTime ;
ObjHead05 = "CTLColHead05" + LabelTime ;
ObjHead06 = "CTLColHead06" + LabelTime ;
ObjHead07 = "CTLColHead07" + LabelTime ;
ObjHead08 = "CTLColHead08" + LabelTime ;
ObjHead09 = "CTLColHead09" + LabelTime ;
string CTL_ObjHead01 ="M1 " ;
string CTL_ObjHead02 ="M5 " ;
string CTL_ObjHead03 ="M15 " ;
string CTL_ObjHead04 =" M30 " ;
string CTL_ObjHead05 ="H1 " ;
string CTL_ObjHead06 ="H4 " ;
string CTL_ObjHead07 ="D1 " ;
string CTL_ObjHead08 ="W1 " ;
string CTL_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,CTL_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,CTL_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,CTL_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,CTL_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,CTL_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,CTL_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,CTL_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,CTL_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,CTL_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_CTL= "-",M5_CTL= "-", M15_CTL= "-", M30_CTL= "-", H1_CTL= "-", H4_CTL= "-", D1_CTL= "-",PRC1, W1_CTL= "-", MN1_CTL= "-";
color color_CTLm1,color_CTLm5,color_CTLm15,color_CTLm30,color_CTLH1,color_CTLH4,color_CTLD1,color_CTLW1,color_CTLMN1;
//CTL Signals
double CTL_M1 = ( iHigh(NULL,PERIOD_M1,0) + iLow(NULL,PERIOD_M1,0) ) * 0.5 ;
double CTL_m1 = ( iHigh(NULL,PERIOD_M1,1) + iLow(NULL,PERIOD_M1,1) ) * 0.5 ;
double CTL_M5 = ( iHigh(NULL,PERIOD_M5,0) + iLow(NULL,PERIOD_M5,0) ) * 0.5 ;
double CTL_m5 = ( iHigh(NULL,PERIOD_M5,1) + iLow(NULL,PERIOD_M5,1) ) * 0.5 ;
double CTL_M15 = ( iHigh(NULL,PERIOD_M15,0) + iLow(NULL,PERIOD_M15,0) ) * 0.5 ;
double CTL_m15 = ( iHigh(NULL,PERIOD_M15,1) + iLow(NULL,PERIOD_M15,1) ) * 0.5 ;
double CTL_M30 = ( iHigh(NULL,PERIOD_M30,0) + iLow(NULL,PERIOD_M30,0) ) * 0.5 ;
double CTL_m30 = ( iHigh(NULL,PERIOD_M30,1) + iLow(NULL,PERIOD_M30,1) ) * 0.5 ;
double CTL_H1 = ( iHigh(NULL,PERIOD_H1,0) + iLow(NULL,PERIOD_H1,0) ) * 0.5 ;
double CTL_h1 = ( iHigh(NULL,PERIOD_H1,1) + iLow(NULL,PERIOD_H1,1) ) * 0.5 ;
double CTL_H4 = ( iHigh(NULL,PERIOD_H4,0) + iLow(NULL,PERIOD_H4,0) ) * 0.5 ;
double CTL_h4 = ( iHigh(NULL,PERIOD_H4,1) + iLow(NULL,PERIOD_H4,1) ) * 0.5 ;
double CTL_D1 = ( iHigh(NULL,PERIOD_D1,0) + iLow(NULL,PERIOD_D1,0) ) * 0.5 ;
double CTL_d1 = ( iHigh(NULL,PERIOD_D1,1) + iLow(NULL,PERIOD_D1,1) ) * 0.5 ;
double CTL_W1 = ( iHigh(NULL,PERIOD_W1,0) + iLow(NULL,PERIOD_W1,0) ) * 0.5 ;
double CTL_w1 = ( iHigh(NULL,PERIOD_W1,1) + iLow(NULL,PERIOD_W1,1) ) * 0.5 ;
double CTL_MN1 = ( iHigh(NULL,PERIOD_MN1,0) + iLow(NULL,PERIOD_MN1,0) ) * 0.5 ;
double CTL_mn1 = ( iHigh(NULL,PERIOD_MN1,1) + iLow(NULL,PERIOD_MN1,1) ) * 0.5 ;
if ((iClose(NULL,PERIOD_M1,0) > CTL_M1)
&& (iClose(NULL,PERIOD_M1,0) > CTL_m1)) color_CTLm1 = Up_color;
else {
if ((iClose(NULL,PERIOD_M1,0) < CTL_M1)
&& (iClose(NULL,PERIOD_M1,0) < CTL_m1)) color_CTLm1 = Dn_color;
else color_CTLm1 = Eq_color; }
if ((iClose(NULL,PERIOD_M5,0) > CTL_M5)
&& (iClose(NULL,PERIOD_M5,0) > CTL_m5)) color_CTLm5 = Up_color;
else {
if ((iClose(NULL,PERIOD_M5,0) < CTL_M5)
&& (iClose(NULL,PERIOD_M5,0) < CTL_m5)) color_CTLm5 = Dn_color;
else color_CTLm5 = Eq_color; }
if ((iClose(NULL,PERIOD_M15,0) > CTL_M15)
&& (iClose(NULL,PERIOD_M15,0) > CTL_m15)) color_CTLm15 = Up_color;
else {
if ((iClose(NULL,PERIOD_M15,0) < CTL_M15)
&& (iClose(NULL,PERIOD_M15,0) < CTL_m15)) color_CTLm15 = Dn_color;
else color_CTLm15 = Eq_color; }
if ((iClose(NULL,PERIOD_M30,0) > CTL_M30)
&& (iClose(NULL,PERIOD_M30,0) > CTL_m30)) color_CTLm30 = Up_color;
else {
if ((iClose(NULL,PERIOD_M30,0) < CTL_M30)
&& (iClose(NULL,PERIOD_M30,0) < CTL_m30)) color_CTLm30 = Dn_color;
else color_CTLm30 = Eq_color; }
if ((iClose(NULL,PERIOD_H1,0) > CTL_H1)
&& (iClose(NULL,PERIOD_H1,0) > CTL_h1)) color_CTLH1 = Up_color;
else {
if ((iClose(NULL,PERIOD_H1,0) < CTL_H1)
&& (iClose(NULL,PERIOD_H1,0) < CTL_h1)) color_CTLH1 = Dn_color;
else color_CTLH1 = Eq_color; }
if ((iClose(NULL,PERIOD_H4,0) > CTL_H4)
&& (iClose(NULL,PERIOD_H4,0) > CTL_h4)) color_CTLH4 = Up_color;
else {
if ((iClose(NULL,PERIOD_H4,0) < CTL_H4)
&& (iClose(NULL,PERIOD_H4,0) < CTL_h4)) color_CTLH4 = Dn_color;
else color_CTLH4 = Eq_color; }
if ((iClose(NULL,PERIOD_D1,0) > CTL_D1)
&& (iClose(NULL,PERIOD_D1,0) > CTL_d1)) color_CTLD1 = Up_color;
else {
if ((iClose(NULL,PERIOD_D1,0) < CTL_D1)
&& (iClose(NULL,PERIOD_D1,0) < CTL_d1)) color_CTLD1 = Dn_color;
else color_CTLD1 = Eq_color; }
if ((iClose(NULL,PERIOD_W1,0) > CTL_W1)
&& (iClose(NULL,PERIOD_W1,0) > CTL_w1)) color_CTLW1 = Up_color;
else {
if ((iClose(NULL,PERIOD_W1,0) < CTL_W1)
&& (iClose(NULL,PERIOD_W1,0) < CTL_w1)) color_CTLW1 = Dn_color;
else color_CTLW1 = Eq_color; }
if ((iClose(NULL,PERIOD_MN1,0) > CTL_MN1)
&& (iClose(NULL,PERIOD_MN1,0) > CTL_mn1)) color_CTLMN1 = Up_color;
else {
if ((iClose(NULL,PERIOD_MN1,0) < CTL_MN1)
&& (iClose(NULL,PERIOD_MN1,0) < CTL_MN1)) color_CTLMN1 = Dn_color;
else color_CTLMN1 = Eq_color; }
//*******************
int Col00x = Col01x + 20 ;
int Col00y = 50+Shift_UP_DN ;
Col01y = 20+Shift_UP_DN ;
Obj0002 = "SignalCTLM1t" + 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 = "SignalCTLM1" + LabelTime ;
ObjectCreate(Obj0003, OBJ_LABEL, 0, 0, 0);
ObjectSetText(Obj0003, M1_CTL, 40, "Tahoma Narrow", color_CTLm1);
ObjectSet(Obj0003, OBJPROP_CORNER, Corner_of_Chart_RIGHT_TOP);
ObjectSet(Obj0003, OBJPROP_XDISTANCE, Col01x);
ObjectSet(Obj0003, OBJPROP_YDISTANCE, Col01y);
Obj0004 = "SignalCTLM5" + LabelTime ;
ObjectCreate(Obj0004, OBJ_LABEL, 0, 0, 0);
ObjectSetText(Obj0004, M5_CTL, 40, "Tahoma Narrow", color_CTLm5);
ObjectSet(Obj0004, OBJPROP_CORNER, Corner_of_Chart_RIGHT_TOP);
ObjectSet(Obj0004, OBJPROP_XDISTANCE, Col02x);
ObjectSet(Obj0004, OBJPROP_YDISTANCE, Col01y);
Obj0005 = "SignalCTLM15" + LabelTime ;
ObjectCreate(Obj0005, OBJ_LABEL, 0, 0, 0);
ObjectSetText(Obj0005, M15_CTL, 40, "Tahoma Narrow", color_CTLm15);
ObjectSet(Obj0005, OBJPROP_CORNER, Corner_of_Chart_RIGHT_TOP);
ObjectSet(Obj0005, OBJPROP_XDISTANCE, Col03x);
ObjectSet(Obj0005, OBJPROP_YDISTANCE, Col01y);
Obj0006 = "SignalCTLM30" + LabelTime ;
ObjectCreate(Obj0006, OBJ_LABEL, 0, 0, 0);
ObjectSetText(Obj0006, M30_CTL, 40, "Tahoma Narrow", color_CTLm30);
ObjectSet(Obj0006, OBJPROP_CORNER, Corner_of_Chart_RIGHT_TOP);
ObjectSet(Obj0006, OBJPROP_XDISTANCE, Col04x);
ObjectSet(Obj0006, OBJPROP_YDISTANCE, Col01y);
Obj0007 = "SignalCTLM60" + LabelTime ;
ObjectCreate(Obj0007, OBJ_LABEL, 0, 0, 0);
ObjectSetText(Obj0007, H1_CTL, 40, "Tahoma Narrow", color_CTLH1);
ObjectSet(Obj0007, OBJPROP_CORNER, Corner_of_Chart_RIGHT_TOP);
ObjectSet(Obj0007, OBJPROP_XDISTANCE, Col05x);
ObjectSet(Obj0007, OBJPROP_YDISTANCE, Col01y);
Obj0008 = "SignalCTLM240" + LabelTime ;
ObjectCreate(Obj0008, OBJ_LABEL, 0, 0, 0);
ObjectSetText(Obj0008, H4_CTL, 40, "Tahoma Narrow", color_CTLH4);
ObjectSet(Obj0008, OBJPROP_CORNER, Corner_of_Chart_RIGHT_TOP);
ObjectSet(Obj0008, OBJPROP_XDISTANCE, Col06x);
ObjectSet(Obj0008, OBJPROP_YDISTANCE, Col01y);
Obj0009 = "SignalCTLM1440" + LabelTime ;
ObjectCreate(Obj0009, OBJ_LABEL, 0, 0, 0);
ObjectSetText(Obj0009, D1_CTL, 40, "Tahoma Narrow", color_CTLD1);
ObjectSet(Obj0009, OBJPROP_CORNER, Corner_of_Chart_RIGHT_TOP);
ObjectSet(Obj0009, OBJPROP_XDISTANCE, Col07x);
ObjectSet(Obj0009, OBJPROP_YDISTANCE, Col01y);
Obj0010 = "SignalCTLW1" + LabelTime ;
ObjectCreate(Obj0010, OBJ_LABEL, 0, 0, 0);
ObjectSetText(Obj0010, W1_CTL, 40, "Tahoma Narrow", color_CTLW1);
ObjectSet(Obj0010, OBJPROP_CORNER, Corner_of_Chart_RIGHT_TOP);
ObjectSet(Obj0010, OBJPROP_XDISTANCE, Col08x);
ObjectSet(Obj0010, OBJPROP_YDISTANCE, Col01y);
Obj0011 = "SignalCTLMN1" + LabelTime ;
ObjectCreate(Obj0011, OBJ_LABEL, 0, 0, 0);
ObjectSetText(Obj0011, MN1_CTL, 40, "Tahoma Narrow", color_CTLMN1);
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