3FoldTradingHoursSeparateWindow

Download script
Author: cubesteak
3FoldTradingHoursSeparateWindow

The 3FoldTradingHoursSeparateWindow is a visual dashboard designed for MetaTrader users to monitor specific trading windows. Rather than acting as an automated system that restricts your account, it functions as a clear, real-time "traffic light" to help you decide when it is appropriate to execute trades based on the time of day.

Core Functionality

The script creates a dedicated visual window that monitors three independent time filters simultaneously. It checks the current market time against these user-defined windows and provides immediate visual feedback.

How the Logic Works:

  • Multi-Filter System: You can define up to three separate "Allowed" time blocks (e.g., London Session, New York Session, or specific high-volatility hours).
  • Dynamic Status Updates: The script constantly scans the live clock. If the current time falls within any of the active windows you have enabled, the dashboard will display a green "TRADE ALLOWED" message.
  • Restrictive Alerts: If the current time falls outside of all your defined windows, the dashboard will switch to a red "NO TRADING" warning. This serves as a visual guardrail to prevent trading during "dead zones" or undesirable market hours.
  • Custom Configuration: You have full control over which filters are active and what their specific start and end times are. If no time restrictions are set up, the dashboard will notify you that no configuration is active.

Visual Dashboard Elements:

To ensure clarity at a glance, the script generates a structured layout in the separate window:

  • Primary Status: A large, bold indicator showing "TRADE ALLOWED" or "NO TRADING."
  • Filter Details: A detailed breakdown for each of the three filters, showing:
    • Whether that specific filter is currently active ("Yes"/"No").
    • The exact "From" and "Until" times you have assigned to that specific filter.

Summary for the User

Think of this tool as a visual compliance assistant. It does not move your money or close your trades; instead, it provides a professional heads-up on your screen, ensuring that your trading activity aligns with your preferred market hours. It is designed to remove guesswork by giving you a "Go/No-Go" signal based on your personal trading rules.

11 Views
0 Downloads
0 Favorites
3FoldTradingHoursSeparateWindow
//+------------------------------------------------------------------------+
//|                                    3FoldTradingHoursSeparateWindow.mq4 |
//|                                                              cubesteak |
//|                                               http://www.cubesteak.net |
//|                                                                        |
//|  THIS INDICATOR DOES NOT STOP AN EA OR A MANUAL ORDER FROM TRADING!!!  |
//|  IT SIMPLY IS A VISUAL REMINDER TO TRADE OR NOT.                       |
//|  TO ACTUALLY STOP TRADING IN AN EA, VISIT:                             |
//|  http://www.cubesteak.net/2006/08/3-fold-trading-hours-filter-for-ea/  |
//+------------------------------------------------------------------------+

#property copyright "cubesteak"
#property link      "http://www.cubesteak.net"

#property indicator_separate_window     

//---- input parameters
extern string     HourlyRetrict_Parameters = "*** Font Size ***";

extern int FontSize = 11;

extern string     HourlyRetrict_Parameters1 = "*** Hourly Restrictions ***";

extern bool       UseHourTrade1     =  true;

extern string     FromHour1         =  "0:00";  //from
extern string     UntilHour1        =  "23:59"; //Until

extern bool       UseHourTrade2     =  false;   

extern string     FromHour2         =  "0:00";  //from
extern string     UntilHour2        =  "23:59"; //until

extern bool       UseHourTrade3     =  false;   

extern string     FromHour3         =  "0:00";  //from
extern string     UntilHour3        =  "23:59"; //until

string UsedOrNot1="No",UsedOrNot2="No",UsedOrNot3="No";
color UsedOrNot1Clr=Tomato,UsedOrNot2Clr=Tomato,UsedOrNot3Clr=Tomato;
int SmallerFont;


//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
IndicatorShortName("3 Fold Trading Hours");
for (int Cnter = 0;Cnter<=21;Cnter++)
{
string ObjName = "3FTH" + Cnter;
ObjectDelete(ObjName);
SmallerFont = FontSize - 2;
}
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
   
//----
   
   int HFa,HFb,HFc;


   if ((UseHourTrade1)||(UseHourTrade2)||(UseHourTrade3))
   {
      datetime FromHourTrade1    =  StrToTime(FromHour1);
      datetime ToHourTrade1      =  StrToTime(UntilHour1);
      datetime FromHourTrade2    =  StrToTime(FromHour2);
      datetime ToHourTrade2      =  StrToTime(UntilHour2);
      datetime FromHourTrade3    =  StrToTime(FromHour3);
      datetime ToHourTrade3      =  StrToTime(UntilHour3);
   
      string s_now = StringConcatenate(Hour(),":",Minute());
      int now = StrToTime(s_now);
      if (
            ( UseHourTrade1 ) &&
            ( (now>=FromHourTrade1) ) &&
            ( (now<=ToHourTrade1) )
      
         ) HFa=1;


      if (
            ( UseHourTrade2 ) &&
            ( (now>=FromHourTrade2) ) &&
            ( (now<=ToHourTrade2) )
      
         ) HFb=1;


      if (
            ( UseHourTrade3 ) &&
            ( (now>=FromHourTrade3) ) &&
            ( (now<=ToHourTrade3) )
      
         ) HFc=1;

      if (
            (HFa!=1) &&
            (HFb!=1) &&
            (HFc!=1)
         )
      {
        ObjectCreate("3FTH0", OBJ_LABEL, WindowFind("3 Fold Trading Hours"), 0, 0);
        ObjectSetText("3FTH0","NO TRADING",FontSize, "Arial Bold", Tomato);
        ObjectSet("3FTH0", OBJPROP_CORNER, 0);
        ObjectSet("3FTH0", OBJPROP_XDISTANCE, 5);
        ObjectSet("3FTH0", OBJPROP_YDISTANCE, 20);
        
        ThreeFoldObjects();
      }

      else

      {
        ObjectCreate("3FTH0", OBJ_LABEL, WindowFind("3 Fold Trading Hours"), 0, 0);
        ObjectSetText("3FTH0","TRADE ALLOWED",FontSize, "Arial Bold", Lime);
        ObjectSet("3FTH0", OBJPROP_CORNER, 0);
        ObjectSet("3FTH0", OBJPROP_XDISTANCE, 5);
        ObjectSet("3FTH0", OBJPROP_YDISTANCE, 20);

         ThreeFoldObjects();
      }
   }
   else 
   {
     ObjectCreate("3FTH0", OBJ_LABEL, WindowFind("3 Fold Trading Hours"), 0, 0);
     ObjectSetText("3FTH0","No Times Configured",FontSize, "Arial Bold", Tomato);
     ObjectSet("3FTH0", OBJPROP_CORNER, 0);
     ObjectSet("3FTH0", OBJPROP_XDISTANCE, 5);
     ObjectSet("3FTH0", OBJPROP_YDISTANCE, 20);
   }

   
//----
   return(0);
  }
//+------------------------------------------------------------------+


void ThreeFoldObjects()
{
        if (UseHourTrade1) UsedOrNot1 = "Yes";
        if (UseHourTrade2) UsedOrNot2 = "Yes";
        if (UseHourTrade3) UsedOrNot3 = "Yes";


///  FILTER 1 OBJECTS

        ObjectCreate("3FTH1", OBJ_LABEL, WindowFind("3 Fold Trading Hours"), 0, 0);
        ObjectSetText("3FTH1","Filter 1",FontSize, "Arial Bold", Lavender);
        ObjectSet("3FTH1", OBJPROP_CORNER, 0);
        ObjectSet("3FTH1", OBJPROP_XDISTANCE, 160);
        ObjectSet("3FTH1", OBJPROP_YDISTANCE, 0);
        
        ObjectCreate("3FTH2", OBJ_LABEL, WindowFind("3 Fold Trading Hours"), 0, 0);
        ObjectSetText("3FTH2","Used:",SmallerFont, "Arial Bold", PeachPuff);
        ObjectSet("3FTH2", OBJPROP_CORNER, 0);
        ObjectSet("3FTH2", OBJPROP_XDISTANCE, 160);
        ObjectSet("3FTH2", OBJPROP_YDISTANCE, 16);
        
        if (UsedOrNot1 == "Yes") UsedOrNot1Clr = Lime;
        ObjectCreate("3FTH3", OBJ_LABEL, WindowFind("3 Fold Trading Hours"), 0, 0);
        ObjectSetText("3FTH3",UsedOrNot1,SmallerFont, "Arial Bold", UsedOrNot1Clr);
        ObjectSet("3FTH3", OBJPROP_CORNER, 0);
        ObjectSet("3FTH3", OBJPROP_XDISTANCE, 200);
        ObjectSet("3FTH3", OBJPROP_YDISTANCE, 16);

        ObjectCreate("3FTH4", OBJ_LABEL, WindowFind("3 Fold Trading Hours"), 0, 0);
        ObjectSetText("3FTH4","From:",SmallerFont, "Arial Bold", PeachPuff);
        ObjectSet("3FTH4", OBJPROP_CORNER, 0);
        ObjectSet("3FTH4", OBJPROP_XDISTANCE, 160);
        ObjectSet("3FTH4", OBJPROP_YDISTANCE, 30);

        ObjectCreate("3FTH5", OBJ_LABEL, WindowFind("3 Fold Trading Hours"), 0, 0);
        ObjectSetText("3FTH5",FromHour1,SmallerFont, "Arial Bold", Ivory);
        ObjectSet("3FTH5", OBJPROP_CORNER, 0);
        ObjectSet("3FTH5", OBJPROP_XDISTANCE, 200);
        ObjectSet("3FTH5", OBJPROP_YDISTANCE, 30);

        ObjectCreate("3FTH6", OBJ_LABEL, WindowFind("3 Fold Trading Hours"), 0, 0);
        ObjectSetText("3FTH6","Until:",SmallerFont, "Arial Bold", PeachPuff);
        ObjectSet("3FTH6", OBJPROP_CORNER, 0);
        ObjectSet("3FTH6", OBJPROP_XDISTANCE, 160);
        ObjectSet("3FTH6", OBJPROP_YDISTANCE, 44);

        ObjectCreate("3FTH7", OBJ_LABEL, WindowFind("3 Fold Trading Hours"), 0, 0);
        ObjectSetText("3FTH7",UntilHour1,SmallerFont, "Arial Bold", Ivory);
        ObjectSet("3FTH7", OBJPROP_CORNER, 0);
        ObjectSet("3FTH7", OBJPROP_XDISTANCE, 200);
        ObjectSet("3FTH7", OBJPROP_YDISTANCE, 44);

///  FILTER 2 OBJECTS

        ObjectCreate("3FTH8", OBJ_LABEL, WindowFind("3 Fold Trading Hours"), 0, 0);
        ObjectSetText("3FTH8","Filter 2",FontSize, "Arial Bold", Lavender);
        ObjectSet("3FTH8", OBJPROP_CORNER, 0);
        ObjectSet("3FTH8", OBJPROP_XDISTANCE, 260);
        ObjectSet("3FTH8", OBJPROP_YDISTANCE, 0);
        
        ObjectCreate("3FTH9", OBJ_LABEL, WindowFind("3 Fold Trading Hours"), 0, 0);
        ObjectSetText("3FTH9","Used:",SmallerFont, "Arial Bold", PeachPuff);
        ObjectSet("3FTH9", OBJPROP_CORNER, 0);
        ObjectSet("3FTH9", OBJPROP_XDISTANCE, 260);
        ObjectSet("3FTH9", OBJPROP_YDISTANCE, 16);

        ObjectCreate("3FTH10", OBJ_LABEL, WindowFind("3 Fold Trading Hours"), 0, 0);
        if (UsedOrNot2 == "Yes") UsedOrNot2Clr = Lime;
        ObjectSetText("3FTH10",UsedOrNot2,SmallerFont, "Arial Bold", UsedOrNot2Clr);
        ObjectSet("3FTH10", OBJPROP_CORNER, 0);
        ObjectSet("3FTH10", OBJPROP_XDISTANCE, 300);
        ObjectSet("3FTH10", OBJPROP_YDISTANCE, 16);

        ObjectCreate("3FTH11", OBJ_LABEL, WindowFind("3 Fold Trading Hours"), 0, 0);
        ObjectSetText("3FTH11","From:",SmallerFont, "Arial Bold", PeachPuff);
        ObjectSet("3FTH11", OBJPROP_CORNER, 0);
        ObjectSet("3FTH11", OBJPROP_XDISTANCE, 260);
        ObjectSet("3FTH11", OBJPROP_YDISTANCE, 30);

        ObjectCreate("3FTH12", OBJ_LABEL, WindowFind("3 Fold Trading Hours"), 0, 0);
        ObjectSetText("3FTH12",FromHour2,SmallerFont, "Arial Bold", Ivory);
        ObjectSet("3FTH12", OBJPROP_CORNER, 0);
        ObjectSet("3FTH12", OBJPROP_XDISTANCE, 300);
        ObjectSet("3FTH12", OBJPROP_YDISTANCE, 30);

        ObjectCreate("3FTH13", OBJ_LABEL, WindowFind("3 Fold Trading Hours"), 0, 0);
        ObjectSetText("3FTH13","Until:",SmallerFont, "Arial Bold", PeachPuff);
        ObjectSet("3FTH13", OBJPROP_CORNER, 0);
        ObjectSet("3FTH13", OBJPROP_XDISTANCE, 260);
        ObjectSet("3FTH13", OBJPROP_YDISTANCE, 44);

        ObjectCreate("3FTH14", OBJ_LABEL, WindowFind("3 Fold Trading Hours"), 0, 0);
        ObjectSetText("3FTH14",UntilHour2,SmallerFont, "Arial Bold", Ivory);
        ObjectSet("3FTH14", OBJPROP_CORNER, 0);
        ObjectSet("3FTH14", OBJPROP_XDISTANCE, 300);
        ObjectSet("3FTH14", OBJPROP_YDISTANCE, 44);

///  FILTER 3 OBJECTS

        ObjectCreate("3FTH15", OBJ_LABEL, WindowFind("3 Fold Trading Hours"), 0, 0);
        ObjectSetText("3FTH15","Filter 3",FontSize, "Arial Bold", Lavender);
        ObjectSet("3FTH15", OBJPROP_CORNER, 0);
        ObjectSet("3FTH15", OBJPROP_XDISTANCE, 360);
        ObjectSet("3FTH15", OBJPROP_YDISTANCE, 0);
        
        ObjectCreate("3FTH16", OBJ_LABEL, WindowFind("3 Fold Trading Hours"), 0, 0);
        ObjectSetText("3FTH16","Used:",SmallerFont, "Arial Bold", PeachPuff);
        ObjectSet("3FTH16", OBJPROP_CORNER, 0);
        ObjectSet("3FTH16", OBJPROP_XDISTANCE, 360);
        ObjectSet("3FTH16", OBJPROP_YDISTANCE, 16);

        ObjectCreate("3FTH17", OBJ_LABEL, WindowFind("3 Fold Trading Hours"), 0, 0);
        if (UsedOrNot3 == "Yes") UsedOrNot3Clr = Lime;
        ObjectSetText("3FTH17",UsedOrNot2,SmallerFont, "Arial Bold", UsedOrNot3Clr);
        ObjectSet("3FTH17", OBJPROP_CORNER, 0);
        ObjectSet("3FTH17", OBJPROP_XDISTANCE, 400);
        ObjectSet("3FTH17", OBJPROP_YDISTANCE, 16);

        ObjectCreate("3FTH18", OBJ_LABEL, WindowFind("3 Fold Trading Hours"), 0, 0);
        ObjectSetText("3FTH18","From:",SmallerFont, "Arial Bold", PeachPuff);
        ObjectSet("3FTH18", OBJPROP_CORNER, 0);
        ObjectSet("3FTH18", OBJPROP_XDISTANCE, 360);
        ObjectSet("3FTH18", OBJPROP_YDISTANCE, 30);

        ObjectCreate("3FTH19", OBJ_LABEL, WindowFind("3 Fold Trading Hours"), 0, 0);
        ObjectSetText("3FTH19",FromHour2,SmallerFont, "Arial Bold", Ivory);
        ObjectSet("3FTH19", OBJPROP_CORNER, 0);
        ObjectSet("3FTH19", OBJPROP_XDISTANCE, 400);
        ObjectSet("3FTH19", OBJPROP_YDISTANCE, 30);

        ObjectCreate("3FTH20", OBJ_LABEL, WindowFind("3 Fold Trading Hours"), 0, 0);
        ObjectSetText("3FTH20","Until:",SmallerFont, "Arial Bold", PeachPuff);
        ObjectSet("3FTH20", OBJPROP_CORNER, 0);
        ObjectSet("3FTH20", OBJPROP_XDISTANCE, 360);
        ObjectSet("3FTH20", OBJPROP_YDISTANCE, 44);

        ObjectCreate("3FTH21", OBJ_LABEL, WindowFind("3 Fold Trading Hours"), 0, 0);
        ObjectSetText("3FTH21",UntilHour2,SmallerFont, "Arial Bold", Ivory);
        ObjectSet("3FTH21", OBJPROP_CORNER, 0);
        ObjectSet("3FTH21", OBJPROP_XDISTANCE, 400);
        ObjectSet("3FTH21", OBJPROP_YDISTANCE, 44);
}

Comments