i-Sessions_v1

Download script
Author: ��� ����� �. aka KimIV
i-Sessions_v1

This script is designed as a visual navigation tool for traders to clearly identify and distinguish between different global trading sessions on their price charts. Instead of manually tracking time zones, the tool automatically maps out these key periods visually.

Core Functionality

Visual Session Mapping The primary purpose of this tool is to highlight three major global markets: Asia, Europe, and the United States. It creates distinct colored rectangular zones on your chart for each of these sessions. By looking at the chart, a trader can instantly see which global market is currently active or which period they are viewing in historical data.

Customizable Session Windows The tool allows you to define the exact start and end times for each session. For example, you can specify when the Asian markets open and close, as well as the corresponding windows for the European and American sessions. Additionally, you can choose specific colors for each region to make the chart easier to read at a glance.

Dynamic Historical Tracking The script doesn't just show the current time; it calculates and draws these session boxes over a significant historical period (determined by your settings). It automatically moves backward day-by-day to ensure that every trading day in the past is accurately labeled with its respective market hours.

Intelligent Price Scaling To ensure the visual blocks are useful for analysis, the script identifies the highest and lowest price points reached during each specific session. It then scales the height of the colored boxes to fit those extremes. This means that rather than being a static box of a fixed size, the rectangle expands to encompass the full range of price movement that occurred during that specific trading window.

Automated Maintenance The logic is built to be "clean." When you load the tool onto a chart, it generates the necessary objects; if you remove the tool, it automatically clears those boxes from your screen so it does not leave any leftover markings on your workspace.

13 Views
0 Downloads
0 Favorites
i-Sessions_v1
//+------------------------------------------------------------------+
//|                                                   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