Time_Zones-black screen_v1
Download scriptThis 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.
//+------------------------------------------------------------------+
//| 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