WeeklyPivot_002

Download script
WeeklyPivot_002

This script is designed to automatically identify and display key price levels on your trading chart based on the previous week's market activity. It functions as a "Weekly Pivot Point" indicator, providing traders with visual benchmarks that represent potential areas of support and resistance for the current week.

Core Logic and Functionality

The tool operates by analyzing historical price data to calculate seven specific price levels. These levels are updated dynamically as the trading week progresses. Here is how the logic works:

1. Data Detection The script scans the market history to identify the start of a new trading week (specifically looking for Mondays). Once it detects the beginning of a new week, it captures three critical pieces of data from the previous week:

  • The highest price reached (High)
  • The lowest price reached (Low)
  • The closing price (Close)

2. Calculation Methodology Using these historical figures along with the current week's opening price, the script calculates several distinct levels:

  • Weekly Pivot Point: This is the central equilibrium point of the week, calculated by averaging the previous week's high, low, and close alongside the current week's open.
  • Support Levels (S1, S2, S3): These represent price floors where the market may find buying interest or struggle to fall further.
  • Resistance Levels (R1, R2, R3): These represent price ceilings where the market may face selling pressure or difficulty moving higher.

3. Dynamic Visualization The script handles the heavy lifting of drawing these lines for you:

  • Automatic Labeling: It places clear text labels on your chart (e.g., "wS 1", "wR 2") so you can immediately identify each level without confusion.
  • Real-Time Tracking: As new price highs or lows are formed during the current week, the script continuously monitors these movements to ensure the displayed levels remain accurate relative to the ongoing market action.
  • Clean Interface: The indicator is designed to be visually organized using distinct colors for different levels (such as Magenta, Royal Blue, Crimson, and SeaGreen), allowing for a clean and readable workspace.

How it helps you

By automating these calculations, the script eliminates the need for manual math. It allows you to see at a glance where the "fair value" of the week sits and identifies the specific zones where the price is likely to react, helping you better plan your entries and exits based on established weekly trends.

Miscellaneous
Implements a curve of type %1
11 Views
0 Downloads
0 Favorites
WeeklyPivot_002
//+------------------------------------------------------------------+
//|                                                  WeeklyPivot.mq4 |
//|                                                                  |
//+------------------------------------------------------------------+

#property indicator_chart_window
#property indicator_buffers 7
#property indicator_color1 Magenta
#property indicator_color2 RoyalBlue
#property indicator_color3 Crimson
#property indicator_color4 RoyalBlue
#property indicator_color5 Crimson
#property indicator_color6 SeaGreen
#property indicator_color7 SeaGreen
//---- input parameters

//---- buffers
double PBuffer[];
double S1Buffer[];
double R1Buffer[];
double S2Buffer[];
double R2Buffer[];
double S3Buffer[];
double R3Buffer[];
string Pivot="WeeklyPivotPoint",Sup1="W_S 1", Res1="W_R 1";
string Sup2="W_S 2", Res2="W_R 2", Sup3="W_S 3", Res3="W_R 3";
int fontsize=10;
double P,S1,R1,S2,R2,S3,R3;
double last_week_high, last_week_low, this_week_open, last_week_close;

//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//---- TODO: add your code here

   ObjectDelete("WeeklyPivot");
   ObjectDelete("Sup1");
   ObjectDelete("Res1");
   ObjectDelete("Sup2");
   ObjectDelete("Res2");
   ObjectDelete("Sup3");
   ObjectDelete("Res3");   

//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   string short_name;


//---- indicator line
   SetIndexStyle(0,DRAW_LINE,0,2,Magenta);
   SetIndexStyle(1,DRAW_LINE,0,1,RoyalBlue);
   SetIndexStyle(2,DRAW_LINE,0,1,Crimson);
   SetIndexStyle(3,DRAW_LINE,0,1,RoyalBlue);
   SetIndexStyle(4,DRAW_LINE,0,1,Crimson);
   SetIndexStyle(5,DRAW_LINE,0,1,SeaGreen);
   SetIndexStyle(6,DRAW_LINE,0,1,SeaGreen);
   SetIndexBuffer(0,PBuffer);
   SetIndexBuffer(1,S1Buffer);
   SetIndexBuffer(2,R1Buffer);
   SetIndexBuffer(3,S2Buffer);
   SetIndexBuffer(4,R2Buffer);
   SetIndexBuffer(5,S3Buffer);
   SetIndexBuffer(6,R3Buffer);


//---- name for DataWindow and indicator subwindow label
   short_name="WeeklyPivotPoint";
   IndicatorShortName(short_name);
   SetIndexLabel(0,short_name);

//----
   SetIndexDrawBegin(0,1);
//----
 

//----
   return(0);
  }

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()

  {
   int counted_bars=IndicatorCounted();

   int limit, i;
//---- indicator calculation
if (counted_bars==0)
{

   ObjectCreate("WeeklyPivot", OBJ_TEXT, 0, 0,0);
   ObjectSetText("WeeklyPivot", "                            Weekly Pivot Point",fontsize,"Arial",Red);
   ObjectCreate("Sup1", OBJ_TEXT, 0, 0, 0);
   ObjectSetText("Sup1", "        wS 1",fontsize,"Arial",Red);
   ObjectCreate("Res1", OBJ_TEXT, 0, 0, 0);
   ObjectSetText("Res1", "        wR 1",fontsize,"Arial",Red);
   ObjectCreate("Sup2", OBJ_TEXT, 0, 0, 0);
   ObjectSetText("Sup2", "        wS 2",fontsize,"Arial",Red);
   ObjectCreate("Res2", OBJ_TEXT, 0, 0, 0);
   ObjectSetText("Res2", "        wR 2",fontsize,"Arial",Red);
   ObjectCreate("Sup3", OBJ_TEXT, 0, 0, 0);
   ObjectSetText("Sup3", "        wS 3",fontsize,"Arial",Red);
   ObjectCreate("Res3", OBJ_TEXT, 0, 0, 0);
   ObjectSetText("Res3", "        wR 3",fontsize,"Arial",Red);
}
   if(counted_bars<0) return(-1);

   limit=(Bars-counted_bars)-1;


for (i=limit; i>=0;i--)
{ 


   // Monday
	if ( 1 == TimeDayOfWeek(Time[i]) && 1 != TimeDayOfWeek(Time[i+1]) )
	{
		last_week_close = Close[i+1];
		this_week_open = Open[i];

		// WeeklyPivot
		P = (last_week_high + last_week_low + this_week_open + last_week_close) / 4;

   R1 = (2*P)-last_week_low;
   S1 = (2*P)-last_week_high;
   R2 = P+(last_week_high - last_week_low);
   S2 = P-(last_week_high - last_week_low);
   R3 = (2*P)+(last_week_high-(2*last_week_low));
   S3 = (2*P)-((2* last_week_high)-last_week_low); 
  
   last_week_low=Low[i]; last_week_high=High[i];

	ObjectMove("WeeklyPivot", 0, Time[i],P);
   ObjectMove("Sup1", 0, Time[i],S1);
   ObjectMove("Res1", 0, Time[i],R1);
   ObjectMove("Sup2", 0, Time[i],S2);
   ObjectMove("Res2", 0, Time[i],R2);
   ObjectMove("Sup3", 0, Time[i],S3);
   ObjectMove("Res3", 0, Time[i],R3);

}   
    
    last_week_high = MathMax(last_week_high, High[i]);
 	 last_week_low = MathMin(last_week_low, Low[i]);   
    PBuffer[i]=P;
    S1Buffer[i]=S1;
    R1Buffer[i]=R1;
    S2Buffer[i]=S2;
    R2Buffer[i]=R2;
    S3Buffer[i]=S3;
    R3Buffer[i]=R3;

}

//----
   return(0);
  }
//+------------------------------------------------------------------+

Comments