i-ParamonWorkTime_v2

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

This tool is designed for traders who want to visualize specific periods of high market activity directly on their price charts. Its primary purpose is to automatically identify and highlight distinct "work windows" or trading sessions across a historical timeline, allowing you to see at a glance when certain price movements occur.

Core Functionality

The script works by scanning the market history for a user-defined number of days. For each day within that period, it identifies three separate time blocks (which can be customized by the user). It then draws colored rectangular zones on your chart to represent these periods.

How it Processes Data

  1. Time Period Definition: The logic uses specific start and end times provided in the settings (e.g., a morning session, an afternoon session, and an evening session).
  2. Price Calculation: For each defined time block, the script looks back at the price action to determine the boundaries of the zone. Depending on your settings, it can automatically identify the highest and lowest price reached during that specific timeframe.
  3. Visual Representation: Once it calculates these coordinates, it draws a colored box on the chart. These boxes are layered behind the price candles, making them easy to see without cluttering your workspace.
  4. Smart Calendar Handling: The logic includes a built-in "trade day" calculator. This ensures that when the script moves backward through history to draw these zones, it correctly skips over weekends and accounts for different month lengths and leap years, ensuring the boxes appear on the correct calendar days.

Key User Benefits

  • Visual Organization: It turns abstract time data into clear visual blocks, helping you identify recurring patterns during specific sessions.
  • Historical Analysis: By looking back at 50 days (or your chosen amount), you can quickly analyze how price behavior differs between morning, afternoon, and evening windows.
  • Customizable Visibility: You can adjust the colors of the zones to suit your preference, making it easy to differentiate between different types of market sessions.
13 Views
0 Downloads
0 Favorites
i-ParamonWorkTime_v2
/*-----------------------------+
|			       |
| Shared by www.Aptrafx.com    |
|			       |
+------------------------------*/

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