i-Sessions_v2
Download scriptThis tool is designed to enhance your trading chart by visually highlighting the different global market sessions—specifically the Asian, European, and American (US) markets. Instead of having to manually track what time each session opens and closes, this script automatically draws distinct colored blocks on your price chart to represent these active periods.
Core Functionality
The primary purpose of this indicator is to provide a clear visual "roadmap" of the trading day. By identifying when specific markets are open, it helps traders recognize high-volume periods, expected volatility shifts, and session transitions at a glance.
How it Works
- Customizable Session Times: You can define the specific start and end times for the Asian, European, and American sessions. For example, if you prefer to see different opening hours based on your preferred timezone, the script allows you to adjust these settings easily.
- Color Coding: Each major session is assigned its own unique color (such as Goldenrod, Tan, or Pale Green). This allows you to instantly differentiate between market activity types as you scroll through historical data.
- Automatic Historical Mapping: The script doesn't just show the current time; it can project these sessions backward over a set number of previous days. This creates a continuous visual history of market activity on your chart.
- Dynamic Price Scaling: To ensure the highlighted blocks are easy to see, the logic automatically identifies the highest and lowest price points reached during each specific session. It then draws the colored rectangle to cover that entire price range, ensuring the "background" highlight perfectly encompasses the price action of that period.
- Smart Date Handling: The script includes internal logic to handle the complexities of the calendar, such as transitioning between months and years correctly, ensuring the boxes are placed on the accurate dates regardless of weekends or varying month lengths.
Practical Use for Traders
By using this indicator, you can quickly identify "trading zones." For instance, you might notice that price movements become more erratic during the overlapping period of the European and American sessions, or you may prefer to trade only when the specific color block for your preferred market is visible. It removes the guesswork of time management, letting you focus entirely on price analysis.
/*-----------------------------+
| |
| Shared by www.Aptrafx.com |
| |
+------------------------------*/
//+------------------------------------------------------------------+
//| i-Sessions.mq4 |
//| Êèì Èãîðü Â. aka KimIV |
//| http://www.kimiv.ru |
//| |
//| 16.11.2005 Èíäèêàòîð òîðãîâûõ ñåññèé |
//+------------------------------------------------------------------+
#property copyright "Êèì Èãîðü Â. aka KimIV"
#property link "http://www.kimiv.ru"
#property indicator_chart_window
//------- Âíåøíèå ïàðàìåòðû èíäèêàòîðà -------------------------------
extern int NumberOfDays = 50; // Êîëè÷åñòâî äíåé
extern string AsiaBegin = "01:00"; // Îòêðûòèå àçèàòñêîé ñåññèè
extern string AsiaEnd = "10:00"; // Çàêðûòèå àçèàòñêîé ñåññèè
extern color AsiaColor = Goldenrod; // Öâåò àçèàòñêîé ñåññèè
extern string EurBegin = "07:00"; // Îòêðûòèå åâðîïåéñêîé ñåññèè
extern string EurEnd = "16:00"; // Çàêðûòèå åâðîïåéñêîé ñåññèè
extern color EurColor = Tan; // Öâåò åâðîïåéñêîé ñåññèè
extern string USABegin = "14:00"; // Îòêðûòèå àìåðèêàíñêîé ñåññèè
extern string USAEnd = "23:00"; // Çàêðûòèå àìåðèêàíñêîé ñåññèè
extern color USAColor = PaleGreen; // Öâåò àìåðèêàíñêîé ñåññèè
//+------------------------------------------------------------------+
//| 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("");
}
//+------------------------------------------------------------------+
//| Ñîçäàíèå îáúåêòîâ èíäèêàòîðà |
//| Ïàðàìåòðû: |
//| 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("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);
}
}
//+------------------------------------------------------------------+
//| Ïðîðèñîâêà îáúåêòîâ íà ãðàôèêå |
//| Ïàðàìåòðû: |
//| 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)];
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