The i-ParamonWorkTime script is designed to provide a visual map of significant trading sessions and news events directly on your MetaTrader chart. Instead of forcing you to manually keep track of complex global market hours, this tool automatically highlights specific time windows where high activity occurs, helping traders identify periods of high liquidity or volatility at a glance.
How the Logic Works
1. Defined Market Zones The script is pre-configured with six distinct time blocks based on major global financial hubs and significant news releases:
- 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)
2. Visual Mapping Once activated, the script scans your historical data and draws semi-transparent colored rectangles over these specific times. Each session is assigned its own unique color, allowing you to quickly distinguish between, for example, a quiet Asian session and a high-activity London news window.
3. Historical Depth By default, the script looks back through the last 50 trading days. This allows you to see patterns of how price action behaved during these specific hours in the past, helping you understand which sessions are most conducive to your specific trading style.
4. Dynamic Price Scaling The script includes a unique logic for how it handles the height of these visual boxes:
- By default, it calculates the lowest price point of a session and draws the box relative to that level.
- There is a toggle option (HighRange) that allows you to adjust whether the boxes emphasize the highest price points or maintain a standard proportional size.
5. Automated Time Handling The script includes "smart" date logic. It automatically skips over weekends and correctly handles complex calendar dates (like leap years or months with 30 vs. 31 days) to ensure that the colored zones remain accurately aligned with the correct trading days on your chart.
Summary of Benefits
This tool acts as a visual "calendar" for your charts. Rather than guessing when the market might get volatile, you can see exactly where the major global sessions begin and end, allowing for better preparation and more informed decision-making during high-impact trading windows.
/*-----------------------------+
| |
| Shared by www.Aptrafx.com |
| |
+------------------------------*/
//+------------------------------------------------------------------+
//| 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