Sessions_v1
Download scriptThis tool is designed to provide a clear visual map of the global financial markets by highlighting specific trading sessions on your price chart. It helps traders identify distinct periods of high activity—specifically the Asian, European, and American sessions—by shading them with different colors.
Core Functionality
The script automatically identifies and draws rectangular blocks on your chart corresponding to the start and end times of three major market regions:
- Asian Session: Highlights the early trading period.
- European Session: Highlights the mid-day global trading activity.
- American Session: Highlights the late-day Western markets.
Key Features
- Visual Segmentation: Each session is assigned a unique color (such as Goldenrod, Tan, and Pink), allowing you to see at a glance which market is currently active or which period a specific price movement occurred in.
- Dynamic Price Tracking: The script automatically calculates the "High" and "Low" prices reached during each specific session. Instead of just showing a flat box, it identifies the extremes (the highest and lowest points) for that time window.
- Price Labeling: For the most recent trading day, the tool can display text labels on the chart. These labels show the specific price levels for the highs and lows reached during each session, helping you quickly identify key support and resistance areas.
- Multi-Day History: You can configure the tool to display these sessions over a set number of previous days (e.g., showing the last 2 days of data), which is useful for spotting patterns in how the market behaves at specific times of the day.
- Automated Calendar Logic: The script includes internal logic to handle the transition between trading days, ensuring that the session boxes are placed correctly even when navigating through different months or leap years.
Summary for the User
Essentially, this tool cleans up your chart by providing a "timetable" of the day. It removes the guesswork of knowing which market is currently leading and highlights the price extremes of those markets, allowing you to better understand the rhythm of the global trading cycle.
/*-----------------------------+
| |
| 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 = 2; // Êîëè÷åñòâî äíåé
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 = Pink; // Öâåò àìåðèêàíñêîé ñåññèè
extern bool ShowPrice = True; // Ïîêàçûâàòü öåíîâûå óðîâíè
extern color clFont = Blue; // Öâåò øðèôòà
extern int SizeFont = 8; // Ðàçìåð øðèôòà
extern int OffSet = 10; // Ñìåùåíèå
//+------------------------------------------------------------------+
//| 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);
}
ObjectDelete("ASup");
ObjectDelete("ASdn");
ObjectDelete("EUup");
ObjectDelete("EUdn");
ObjectDelete("USup");
ObjectDelete("USdn");
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
void start() {
datetime dt=CurTime();
for (int i=0; i<NumberOfDays; i++) {
if (ShowPrice && i==0) {
DrawPrices(dt, "AS", AsiaBegin, AsiaEnd);
DrawPrices(dt, "EU", EurBegin, EurEnd);
DrawPrices(dt, "US", USABegin, USAEnd);
}
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 - äàòà òîðãîâîãî äíÿ |
//| no - íàèìåíîâàíèå îáúåêòà |
//| tb - âðåìÿ íà÷àëà ñåññèè |
//| te - âðåìÿ îêîí÷àíèÿ ñåññèè |
//+------------------------------------------------------------------+
void DrawPrices(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 (ObjectFind(no+"up")<0) ObjectCreate(no+"up", OBJ_TEXT, 0, 0,0);
ObjectSet(no+"up", OBJPROP_TIME1 , t2);
ObjectSet(no+"up", OBJPROP_PRICE1 , p1+OffSet*Point);
ObjectSet(no+"up", OBJPROP_COLOR , clFont);
ObjectSet(no+"up", OBJPROP_FONTSIZE, SizeFont);
ObjectSetText(no+"up", DoubleToStr(p1+Ask-Bid, Digits));
if (ObjectFind(no+"dn")<0) ObjectCreate(no+"dn", OBJ_TEXT, 0, 0,0);
ObjectSet(no+"dn", OBJPROP_TIME1 , t2);
ObjectSet(no+"dn", OBJPROP_PRICE1 , p2);
ObjectSet(no+"dn", OBJPROP_COLOR , clFont);
ObjectSet(no+"dn", OBJPROP_FONTSIZE, SizeFont);
ObjectSetText(no+"dn", DoubleToStr(p2, Digits));
}
//+------------------------------------------------------------------+
//| Óìåíüøåíèå äàòû íà îäèí òîðãîâûé äåíü |
//| Ïàðàìåòðû: |
//| 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