Time_Zones-black screen_v1

Download script
Author: ��� ����� �. aka KimIV
Time_Zones-black screen_v1

This script is a visual charting tool designed to help traders identify and navigate key global market sessions and economic events on their trading platform. Instead of manually calculating when different world markets open or close, the script automatically draws shaded zones directly onto your price chart.

Core Functionality

The primary purpose of this tool is to provide a visual map of "Trading Work Time." It identifies specific windows of activity based on Global Market Hours (such as Asia Open, London Session, and US News periods). By highlighting these periods with distinct colors, it allows you to see at a glance when liquidity is highest or when significant economic news is expected to impact the market.

How the Logic Works

The script operates using the following logical steps:

  • Time Zone Mapping: The tool is pre-configured with several specific time blocks throughout a 24-hour cycle. These include critical transition points like the Dubai/Russia Open, the London "Big Ben" news window, and the European Settlement periods.
  • Visual Rendering: For each identified time block, the script creates a solid colored rectangle on the chart. Each session is assigned a unique color (e.g., Dark Green, Midnight Blue, Maroon), making it easy to differentiate between various geographic market movements.
  • Historical Coverage: You can customize how far back the tool should look. It will automatically draw these historical "work time" zones for a specific number of past days (defaulting to 50), providing context on how the market behaved during those same hours in previous sessions.
  • Dynamic Positioning: The script automatically calculates the correct coordinates for these shapes based on the date and time. It identifies the highest and lowest price points within each specific window to ensure the shaded boxes cover the relevant price action correctly.
  • Smart Date Handling: To ensure the visual history remains accurate, the logic includes a special handler to navigate through the calendar. This ensures that as the script draws backwards in time, it correctly skips weekends and accounts for the different number of days in various months (like February).

Key Features for the User

  • Background Visualization: The shaded zones are set to appear in the background, ensuring they provide information without obstructing your view of the price candles.
  • Customizable Sessions: The time windows and their corresponding colors can be adjusted within the settings, allowing you to tailor the chart to your specific trading style or preferred geographic regions.
  • Clean Interface: The script is designed to automatically clean up old objects when removed, ensuring your chart remains organized and free of "ghost" drawings.
11 Views
0 Downloads
0 Favorites
Time_Zones-black screen_v1
//+------------------------------------------------------------------+
//|                                            i-ParamonWorkTime.mq4 |
//|                                           Êèì Èãîðü Â. aka KimIV |
//|                                              http://www.kimiv.ru |
//|  Brad Eckerts Time Zones added by Jacob Yego                     |
//|  Asia Open -           00:00 GMT                                 |
//|  Dubai/Russia Open     04:00 GMT                                 |
//|  Europe Open           06:00 GMT                                 |
//|  London "Big Ben" News 08:30 GMT                                 |
//|  US News               12:30 GMT                                 |
//|  Europe Settlement     14:30 GMT                                 |  
//+------------------------------------------------------------------+
#property copyright "Êèì Èãîðü Â. aka KimIV"
#property link      "http://www.kimiv.ru"

#property indicator_chart_window

//------- Âíåøíèå ïàðàìåòðû èíäèêàòîðà -------------------------------
extern int    NumberOfDays = 50;        // Êîëè÷åñòâî äíåé
extern string Begin_1      = "00:00";
extern string End_1        = "03:30";
extern color  Color_1      = DarkSlateGray;
extern string Begin_2      = "04:00";
extern string End_2        = "05:30";
extern color  Color_2      = DarkGreen;
extern string Begin_3      = "06:00";
extern string End_3        = "08:00";
extern color  Color_3      = DarkBlue;
extern string Begin_4      = "08:30";
extern string End_4       = "12:00";
extern color  Color_4      = MidnightBlue;
extern string Begin_5      = "12:30";
extern string End_5        = "14:00";
extern color  Color_5      = Indigo;
extern string Begin_6      = "14:30";
extern string End_6        = "20:30";
extern color  Color_6      = Maroon;
extern bool   HighRange    = False;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void init() {
  DeleteObjects();
  for (int i=0; i<NumberOfDays; i++) {
    CreateObjects("PWT1"+i, Color_1);
    CreateObjects("PWT2"+i, Color_2);
    CreateObjects("PWT3"+i, Color_3);
    CreateObjects("PWT4"+i, Color_4);
    CreateObjects("PWT5"+i, Color_5);
    CreateObjects("PWT6"+i, Color_6);
  }
  Comment("");
}

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

//+------------------------------------------------------------------+
//| Ñîçäàíèå îáúåêòîâ èíäèêàòîðà                                     |
//| Ïàðàìåòðû:                                                       |
//|   no - íàèìåíîâàíèå îáúåêòà                                      |
//|   cl - öâåò îáúåêòà                                              |
//+------------------------------------------------------------------+
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("PWT1"+i);
    ObjectDelete("PWT2"+i);
    ObjectDelete("PWT3"+i);
    ObjectDelete("PWT4"+i);
    ObjectDelete("PWT5"+i);
    ObjectDelete("PWT6"+i);
    
  }
}

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
void start() {

  datetime dt=CurTime();

  for (int i=0; i<NumberOfDays; i++) {
    DrawObjects(dt, "PWT1"+i, Begin_1, End_1);
    DrawObjects(dt, "PWT2"+i, Begin_2, End_2);
    DrawObjects(dt, "PWT3"+i, Begin_3, End_3);
    DrawObjects(dt, "PWT4"+i, Begin_4, End_4);
    DrawObjects(dt, "PWT5"+i, Begin_5, End_5);
    DrawObjects(dt, "PWT6"+i, Begin_6, End_6);
    dt=decDateTradeDay(dt);
    while (TimeDayOfWeek(dt)>5) dt=decDateTradeDay(dt);
  }
}

//+------------------------------------------------------------------+
//| Ïðîðèñîâêà îáúåêòîâ íà ãðàôèêå                                   |
//| Ïàðàìåòðû:                                                       |
//|   dt - äàòà òîðãîâîãî äíÿ                                        |
//|   no - íàèìåíîâàíèå îáúåêòà                                      |
//|   tb - âðåìÿ íà÷àëà ñåññèè                                       |
//|   te - âðåìÿ îêîí÷àíèÿ ñåññèè                                    |
//+------------------------------------------------------------------+
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)];
  if (!HighRange) {p1=0; p2=2*p2;}
  ObjectSet(no, OBJPROP_TIME1 , t1);
  ObjectSet(no, OBJPROP_PRICE1, p1);
  ObjectSet(no, OBJPROP_TIME2 , t2);
  ObjectSet(no, OBJPROP_PRICE2, p2);
}

//+------------------------------------------------------------------+
//| Óìåíüøåíèå äàòû íà îäèí òîðãîâûé äåíü                            |
//| Ïàðàìåòðû:                                                       |
//|   dt - äàòà òîðãîâîãî äíÿ                                        |
//+------------------------------------------------------------------+
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