AsianFrankfurtLondonSessions_GMT

Download script
Author: Morning Star
AsianFrankfurtLondonSessions_GMT

This tool is designed to provide a clear visual roadmap of the global financial markets directly on your trading charts. By automatically highlighting specific time blocks, it helps traders instantly identify which global sessions (Asia, Europe, and the US) are currently active or have occurred in the past.

Core Functionality

The script organizes your chart into distinct visual zones based on the following logic:

  • Session Identification: The tool recognizes three primary trading windows:
    • Asia Session: Marked with a specific color (DimGray).
    • Europe Session: Marked with a specific color (Olive).
    • USA Session: Marked with a specific color (Silver).
  • Historical Tracking: Rather than just showing the current time, the script looks back over a user-defined period (defaulting to 50 days). This allows you to analyze historical price action and see how market volatility behaved during these specific hours in previous weeks.
  • Dynamic Price Range Detection: Instead of simply drawing flat boxes, the tool automatically calculates the highest and lowest price points reached during each specific session. It then draws a rectangle that perfectly encompasses that day's price movement for that specific time window.

How it Works on Your Chart

When you apply this script, it performs several automated tasks:

  1. Visual Rendering: It places solid, background-colored rectangles on your chart. These are set to appear "behind" the price candles so they do not clutter your view while still providing a clear context of the market's "personality" during those hours.
  2. Time Management: The logic includes an intelligent date handler. It ensures that even when moving backward through time, it correctly accounts for different month lengths and leap years, ensuring the session boxes are placed accurately on the correct days.
  3. Automated Cleanup: To keep your platform running smoothly, the script is designed to manage these objects efficiently—deleting old data and creating new visual markers as needed to maintain a clean workspace.

Why This Is Useful for Traders

For a non-technical user, this tool simplifies "market awareness." Instead of manually checking the clock or struggling to remember when the London or New York markets open, you can glance at your chart and see:

  • Exactly where the price moved during the previous day's US session.
  • The boundaries of volatility for the Asian market.
  • A clear visual distinction between different trading "moods" as they transition from one global region to another.
11 Views
0 Downloads
0 Favorites
AsianFrankfurtLondonSessions_GMT
//+------------------------------------------------------------------+
//|                                                        times.mq4 |
//|                                                                  |
//|               Made/Modified by sh _j .                           |
//+------------------------------------------------------------------+
#property copyright "Morning Star"
#property link      "http://Grand Forex.ir"

#property indicator_chart_window

 
extern int    NumberOfDays = 50;        
extern string AsiaBegin    = "00:00";   
extern string AsiaEnd      = "06:59";   
extern color  AsiaColor    = DimGray; 
extern string EurBegin     = "07:00";   
extern string EurEnd       = "07:59";   
extern color  EurColor     = Olive;//DarkGray       
extern string USABegin     = "8:00";   
extern string USAEnd       = "9:59";   
extern color  USAColor     = Silver; 


//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void init() {
  DeleteObjects();
  for (int i=0; i<NumberOfDays; i++) {
    CreateObjects("AS"+i, AsiaColor);
    CreateObjects("EU"+i, EurColor);
    CreateObjects("US"+i, USAColor);
  }
  Comment("");
}

//+------------------------------------------------------------------+
//| Custor 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("AS"+i);
    ObjectDelete("EU"+i);
    ObjectDelete("US"+i);
  }
}

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

  for (int i=0; i<NumberOfDays; i++) {
    DrawObjects(dt, "AS"+i, AsiaBegin, AsiaEnd);
    DrawObjects(dt, "EU"+i, EurBegin, EurEnd);
    DrawObjects(dt, "US"+i, USABegin, USAEnd);
    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