i-ParamonWorkTime_v1

Author: ��� ����� �. aka KimIV
i-ParamonWorkTime_v1

This script is designed for the MetaTrader 4 platform to provide a visual representation of specific trading sessions on your price charts. It identifies and highlights key periods of market activity, allowing traders to easily see when significant price movements or "working hours" occur over a historical period.

Key Functionalities

Visual Session Mapping The primary purpose of this tool is to automatically draw shaded rectangular blocks on your chart. These blocks correspond to three distinct time windows that you can customize. By highlighting these periods, the script helps traders instantly identify active market zones versus quieter periods, making it easier to manage trade entries and exits based on the time of day.

Customizable Time Slots The logic allows for the definition of three unique sessions. You can set:

  • Start and End Times: Define exactly when each session begins and ends (e.g., a morning session, an afternoon session, and an evening session).
  • Unique Colors: Assign different colors to each session so you can visually distinguish between different market behaviors (such as the London open vs. the New York session).

Historical Data Coverage The script is not limited to just the current day. It includes a mechanism to look back across a user-defined number of days. This means that when you load the indicator, it will automatically populate your chart with the historical "work time" blocks for the past several weeks or months, providing a consistent visual history of market activity.

Price Range Logic The tool handles the height of the shaded boxes based on market volatility:

  • By default, the script calculates the highest and lowest prices reached during each specific time window to determine the boundaries of the box.
  • It includes a toggle feature that allows you to adjust how these price levels are displayed, providing flexibility depending on whether you prefer to see the exact price range or a modified visual representation.

Smart Calendar Handling To ensure the blocks appear correctly across months and years, the script includes internal logic to handle calendar transitions. It intelligently calculates dates to ensure that session boxes are placed accurately even when moving from the end of one month to the beginning of the next, including leap year adjustments.

Summary for the Trader

Essentially, this tool serves as a "time map" for your charts. Instead of manually drawing lines or guessing which hours are most active, the script automatically paints the history of the market's working hours. This helps in identifying recurring patterns and ensures that your focus remains on the most relevant trading windows defined by your specific strategy.

8 Views
0 Downloads
0 Favorites
i-ParamonWorkTime_v1
//+------------------------------------------------------------------+
//|                                            i-ParamonWorkTime.mq4 |
//|                                           Êèì Èãîðü Â. aka KimIV |
//|                                              http://www.kimiv.ru |
//|                                                                  |
//|                                                       23.11.2005 |
//+------------------------------------------------------------------+
#property copyright "Êèì Èãîðü Â. aka KimIV"
#property link      "http://www.kimiv.ru"

#property indicator_chart_window

//-------  -------------------------------
extern int    NumberOfDays = 50;
extern string Begin_1      = "07:00";
extern string End_1        = "11:00";
extern color  Color_1      = BlanchedAlmond;
extern string Begin_2      = "13:00";
extern string End_2        = "17:00";
extern color  Color_2      = Lavender;
extern string Begin_3      = "19:00";
extern string End_3        = "23:00";
extern color  Color_3      = MistyRose;
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);
  }
  Comment("");
}

//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
void deinit() {
  DeleteObjects();
  Comment("");
}

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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);
  }
}

//+------------------------------------------------------------------+
//| 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);
    dt=decDateTradeDay(dt);
    while (TimeDayOfWeek(dt)>5) dt=decDateTradeDay(dt);
  }
}

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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);
}

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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