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