$TrillionEntryBoxes

Download script
Author: Morning Star
$TrillionEntryBoxes

This tool is designed to visually organize your trading charts by highlighting specific periods of the day. Instead of looking at a continuous stream of price action, it segments the market into distinct "sessions," allowing you to identify and focus on specific times of day that may hold different trading behaviors or volatilities.

How It Works

Customizable Time Slots The script allows you to define up to six different time sessions. For each session, you can set a specific start time, an end time, and a unique color. This means you can visually distinguish between different market phases—such as the Asian session, the London open, or the New York afternoon—by assigning them different colors on your screen.

Automated Visual Mapping Rather than manually drawing boxes every day, the script automatically handles the heavy lifting:

  • Historical Coverage: You can specify how many days of historical data you want to see highlighted (e.g., the last 50 days).
  • Dynamic Drawing: The tool scans your chart and draws shaded rectangles over the price action for each of your defined time slots.
  • Price Boundary Detection: For every session, the script automatically calculates the highest and lowest price points reached during that specific window. It then stretches the colored box to fit those exact highs and lows, providing a clear visual "container" for that period's price movement.

Smart Calendar Logic The script includes built-in logic to handle the complexities of the calendar. It automatically recognizes different month lengths and leap years to ensure that when it draws boxes for historical dates, they appear accurately on the correct days. Additionally, it contains logic to skip over non-trading days (like weekends), ensuring the visual flow of your sessions remains consistent with the actual market schedule.

Summary for Traders

Essentially, this tool acts as a visual overlay. It cleans up your workspace by clearly marking "when" things are happening. By looking at the chart, you can immediately see the boundaries of past sessions, making it easier to analyze how price behaved during specific hours and helping you stay disciplined during your preferred trading windows.

10 Views
0 Downloads
0 Favorites
$TrillionEntryBoxes
//+------------------------------------------------------------------+
//|                                                        times.mq4 |
//|                                                                  |
//|               Made/Modified by sh _j .                           |
//|                                                                  |
//|  tweaked by Accrete to generalize session names/code and add     |
//|  a fourth session box   www.accrete.com                          |
//+------------------------------------------------------------------+
#property copyright "Morning Star"
#property link      "http://Grand Forex.ir"

#property indicator_chart_window

 
extern int    NumberOfDays = 50;        
extern string Session1start    = "00:00";   
extern string Session1end      = "08:59";   
extern color  Session1color    = DimGray; 
extern string Session2start     = "09:00";   
extern string Session2end       = "09:59";   
extern color  Session2color     = DarkBlue;//DarkGray       
extern string Session3start     = "10:00";   
extern string Session3end       = "11:59";   
extern color  Session3color     = DarkBlue; 
extern string Session4start     = "14:00";   
extern string Session4end       = "14:59";   
extern color  Session4color     = Gray; 
extern string Session5start     = "15:00";   
extern string Session5end       = "18:59";   
extern color  Session5color     = Gray; 
extern string Session6start     = "23:00";//last hour of NY session   
extern string Session6end       = "23:59";   
extern color  Session6color     = DimGray; 

//+------------------------------------------------------------------+
//| CSession3tom indicator initialization function                         |
//+------------------------------------------------------------------+
void init() {
  DeleteObjects();
  for (int i=0; i<NumberOfDays; i++) {
    CreateObjects("Session1"+i, Session1color);
    CreateObjects("Session2"+i, Session2color);
    CreateObjects("Session3"+i, Session3color);
    CreateObjects("Session4"+i, Session4color);
    CreateObjects("Session5"+i, Session5color);
    CreateObjects("Session6"+i, Session6color);
  }
  Comment("");
}

//+------------------------------------------------------------------+
//| CSession3tor indicator deinitialization function                       |
//+------------------------------------------------------------------+
void deinit() {
  DeleteObjects();
  Comment("");
}

 
void CreateObjects(string no, color cl) {
  ObjectCreate(no, OBJ_RECTANGLE, 0, 0,0, 0,0);
  ObjectSet(no, OBJPROP_STYLE, STYLE_SOLID);
  ObjectSet(no, OBJPROP_COLOR, cl);
  ObjectSet(no, OBJPROP_BACK, True);
}

//+------------------------------------------------------------------+
//| Óäàëåíèå îáúåêòîâ èíäèêàòîðà                                     |
//+------------------------------------------------------------------+
void DeleteObjects() {
  for (int i=0; i<NumberOfDays; i++) {
    ObjectDelete("Session1"+i);
    ObjectDelete("Session2"+i);
    ObjectDelete("Session3"+i);
    ObjectDelete("Session4"+i);
    ObjectDelete("Session5"+i);
    ObjectDelete("Session6"+i);
  }
}

//+------------------------------------------------------------------+
//| CSession3tom indicator iteration function                              |
//+------------------------------------------------------------------+
void start() {
  datetime dt=CurTime();

  for (int i=0; i<NumberOfDays; i++) {
    DrawObjects(dt, "Session1"+i, Session1start, Session1end);
    DrawObjects(dt, "Session2"+i, Session2start, Session2end);
    DrawObjects(dt, "Session3"+i, Session3start, Session3end);
    DrawObjects(dt, "Session4"+i, Session4start, Session4end);
    DrawObjects(dt, "Session5"+i, Session5start, Session5end);
    DrawObjects(dt, "Session6"+i, Session6start, Session6end);
    dt=decDateTradeDay(dt);
    while (TimeDayOfWeek(dt)>5) dt=decDateTradeDay(dt);
  }
}

  
void DrawObjects(datetime dt, string no, string tb, string te) {
  datetime t1, t2;
  double   p1, p2;
  int      b1, b2;

  t1=StrToTime(TimeToStr(dt, TIME_DATE)+" "+tb);
  t2=StrToTime(TimeToStr(dt, TIME_DATE)+" "+te);
  b1=iBarShift(NULL, 0, t1);
  b2=iBarShift(NULL, 0, t2);
  p1=High[Highest(NULL, 0, MODE_HIGH, b1-b2, b2)];
  p2=Low [Lowest (NULL, 0, MODE_LOW , b1-b2, b2)];
  ObjectSet(no, OBJPROP_TIME1 , t1);
  ObjectSet(no, OBJPROP_PRICE1, p1);
  ObjectSet(no, OBJPROP_TIME2 , t2);
  ObjectSet(no, OBJPROP_PRICE2, p2);
}


datetime decDateTradeDay (datetime dt) {
  int ty=TimeYear(dt);
  int tm=TimeMonth(dt);
  int td=TimeDay(dt);
  int th=TimeHour(dt);
  int ti=TimeMinute(dt);

  td--;
  if (td==0) {
    tm--;
    if (tm==0) {
      ty--;
      tm=12;
    }
    if (tm==1 || tm==3 || tm==5 || tm==7 || tm==8 || tm==10 || tm==12) td=31;
    if (tm==2) if (MathMod(ty, 4)==0) td=29; else td=28;
    if (tm==4 || tm==6 || tm==9 || tm==11) td=30;
  }
  return(StrToTime(ty+"."+tm+"."+td+" "+th+":"+ti));
}
//+------------------------------------------------------------------+

Comments