WeeklyPivot_v2
Download scriptThis tool is designed to automatically calculate and display key price levels on your trading chart based on the previous week's market activity. It identifies specific "Pivot Points," which are used by traders to gauge potential support and resistance zones for the current trading week.
Core Logic and Functionality
The script operates by analyzing historical price data to identify the boundaries of the preceding week. Specifically, it looks for the highest price reached (High), the lowest price reached (Low), the closing price, and the opening price of the previous week.
Once these values are captured at the start of a new week (specifically detecting the transition on Monday), the script applies a mathematical formula to generate seven distinct price levels:
- The Weekly Pivot Point: This serves as the primary "equilibrium" or central reference point for the current week's price action.
- Support Levels (S1, S2, S3): These represent potential "floors." They indicate price zones where buying interest may increase, potentially preventing the price from falling further.
- Resistance Levels (R1, R2, R3): These represent potential "ceilings." They indicate price zones where selling pressure might increase, potentially preventing the price from rising higher.
Visual Representation
The script dynamically manages these levels on your chart by:
- Automated Plotting: It draws clear, color-coded lines across your chart so you can see these levels in real-time.
- Dynamic Labeling: It places text labels (e.g., "wS 1", "wR 1") directly on the chart to ensure you can easily identify which line corresponds to which specific support or resistance level.
- Real-Time Updating: As the current week progresses, the script tracks the highest and lowest points reached so far to ensure the calculations remain consistent with the market's movement.
Summary for Traders
Instead of manually calculating complex price averages every Monday, this script automates that process. It provides a visual roadmap of where significant price "turning points" are likely to occur based on last week's performance, helping you identify potential entry and exit zones more efficiently.
//+------------------------------------------------------------------+
//| 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,2,RoyalBlue);
SetIndexStyle(2,DRAW_LINE,0,2,Crimson);
SetIndexStyle(3,DRAW_LINE,0,2,RoyalBlue);
SetIndexStyle(4,DRAW_LINE,0,2,Crimson);
SetIndexStyle(5,DRAW_LINE,0,2,SeaGreen);
SetIndexStyle(6,DRAW_LINE,0,2,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