AsianFrankfurtLondonSessions_GMT
Download scriptThis 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:
- 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.
- 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.
- 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.
//+------------------------------------------------------------------+
//| 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