AsianFrankfurtLondonSessions_GMT+2
Download scriptThis tool is designed to enhance your trading charts by visually highlighting the most active market sessions throughout the day. Instead of trying to guess when specific global markets are moving, this script automatically draws shaded background zones on your screen to mark key timeframes.
How it Works
The logic focuses on identifying three major global trading periods: Asia, Europe (EUR), and the USA. By using the settings provided, the script scans your historical data and places colored rectangles over these specific hours.
- Visual Identification: Each session is assigned a unique color (e.g., DimGray for Asia, Olive for Europe, and Silver for the USA). These appear as solid blocks in the background of your chart, ensuring that the price candles stay visible while clearly defining which "market" is currently leading the price action.
- Dynamic Range Detection: The script doesn't just draw a flat box from the top to the bottom of your screen. It intelligently looks back at the price action during those specific hours and identifies the highest and lowest price points reached. It then stretches the background color to fit that exact range, providing a "container" for the price movement of that session.
- Historical Coverage: You can customize how far back you want to see these zones. By default, it maps out these sessions over 50 days, allowing you to see patterns of volatility and liquidity across weeks of trading history at a glance.
- Automated Calendar Logic: The script includes internal logic to handle the complexities of the calendar—such as leap years and varying month lengths—to ensure that the shaded boxes align correctly with the dates on your chart without overlapping or skipping days.
Key Benefits for the User
By using this script, you gain a clearer sense of "Market Context." You can easily see when the Asian session ends and the European session begins, helping you identify periods of high liquidity and transition phases. It transforms a blank chart into a structured roadmap, allowing you to see exactly how price behaves during the most important hours of the trading day.
//+------------------------------------------------------------------+
//| 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 = "08:59";
extern color AsiaColor = DimGray;
extern string EurBegin = "09:00";
extern string EurEnd = "09:59";
extern color EurColor = Olive;//DarkGray
extern string USABegin = "10:00";
extern string USAEnd = "11: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