Time_Zones1_v1

Download script
Author: ��� ����� �. aka KimIV
Time_Zones1_v1

This script is designed to act as a visual roadmap for traders who need to identify specific market sessions and high-activity time zones directly on their trading charts. Instead of forcing you to constantly check your clock against various international markets, it automatically draws colored zones on the background of your chart.

Core Functionality

The primary purpose of this tool is to highlight six distinct trading windows throughout a standard day. These windows correspond to significant global market events, including:

  • Asia Open
  • Dubai/Russia Open
  • Europe Open
  • London "Big Ben" News
  • US News
  • Europe Settlement

How it Works

  1. Visual Mapping: The script identifies the start and end times for each of these six sessions (which can be customized). It then creates colored rectangles on your chart to cover those specific time periods.
  2. Historical Tracking: By default, the tool looks back over a set number of days (e.g., 50 days) and populates the history with these visual blocks. This allows you to see where high-volatility sessions occurred in previous weeks or months.
  3. Dynamic Positioning: The script is "aware" of the chart's timeline. It calculates the exact price levels and time coordinates for each session block based on the current date and the specific hours you have defined.
  4. Smart Date Handling: The logic includes a built-in calendar awareness. It understands how to navigate through different months, leap years, and weekends to ensure that the boxes are drawn accurately even when moving across complex dates.

User Experience

For the trader, this provides a "heat map" of time. By glancing at the chart, you can immediately see which zones represent high-activity news periods (like London or US News) versus standard session trading. The colors help differentiate these blocks at a glance, allowing for quicker decision-making regarding when to enter, exit, or stay out of the market based on global liquidity cycles.

12 Views
0 Downloads
0 Favorites
Time_Zones1_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      = Seashell;
extern string Begin_2      = "04:00";
extern string End_2        = "05:30";
extern color  Color_2      = MistyRose;
extern string Begin_3      = "06:00";
extern string End_3        = "08:00";
extern color  Color_3      = LightCyan;
extern string Begin_4      = "08:30";
extern string End_4       = "12:00";
extern color  Color_4      = LightGoldenrod;
extern string Begin_5      = "12:30";
extern string End_5        = "14:00";
extern color  Color_5      = PeachPuff;
extern string Begin_6      = "14:30";
extern string End_6        = "20:30";
extern color  Color_6      = Pink;
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