The Daily Wood Pivot is a specialized technical analysis tool designed for MetaTrader users to identify key price levels on a trading chart. Its primary purpose is to highlight significant areas of potential support and resistance, helping traders visualize where the market might encounter "friction" or trend reversals based on previous price action.
Core Functionality
The script automatically calculates seven distinct price levels based on the high, low, and opening prices of preceding trading sessions. These levels are plotted directly onto your chart to provide a roadmap of expected market behavior:
- Pivot Point: The central equilibrium point of the current price movement.
- Support Levels (S1, S2, S3): These represent "floors" where buying interest may increase, potentially stopping a downward trend.
- Resistance Levels (R1, R2, R3): These represent "ceilings" where selling pressure may intensify, potentially stalling an upward move.
How the Logic Works
The script operates using a systematic calculation method that updates as the market progresses:
- Time Detection: The tool monitors the change in calendar days. Every time a new day begins, the script takes the extreme price data (the highest high and lowest low) from the previous day to generate the next set of levels.
- Mathematical Calculation: It uses a weighted formula to determine the central Pivot Point, factoring in the previous day's opening price alongside its highs and lows. From this central pivot, it projects out the subsequent Support and Resistance lines.
- Dynamic Updates: While the script anchors its primary calculations on daily transitions, it continuously monitors the "current" high and low of the price action to ensure the visual data remains accurate as the market moves in real-time.
- Visual Labeling: To ensure clarity for the user, the script doesn't just draw lines; it automatically places text labels (e.g., "S1", "R2") on the chart. This allows for immediate identification of price zones without having to manually interpret the data.
Usage Requirements
To function correctly, the logic is specifically calibrated for intraday trading. The script includes a built-in check that ensures it operates on timeframes lower than the Daily chart (such as H1 or lower). This makes it ideal for traders who are looking for intra-day entries and exits while using daily price structure as their primary guide.
//+------------------------------------------------------------------+
//| Daily Wood Pivot |
//| Copyright © 2006, Sheker |
//| Coded/Verified by Sheker |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006,Sheker."
#property link "Sheker"
#property indicator_chart_window
#property indicator_buffers 7
#property indicator_color1 Orange
#property indicator_color2 DarkBlue
#property indicator_color3 Maroon
#property indicator_color4 DarkBlue
#property indicator_color5 Maroon
#property indicator_color6 Green
#property indicator_color7 Green
//---- buffers
double PBuffer[];
double S1Buffer[];
double R1Buffer[];
double S2Buffer[];
double R2Buffer[];
double S3Buffer[];
double R3Buffer[];
double P,S1,R1,S2,R2,S3,R3,LastHigh,LastLow;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
SetIndexBuffer(0,PBuffer);
SetIndexBuffer(1,S1Buffer);
SetIndexBuffer(2,R1Buffer);
SetIndexBuffer(3,S2Buffer);
SetIndexBuffer(4,R2Buffer);
SetIndexBuffer(5,S3Buffer);
SetIndexBuffer(6,R3Buffer);
SetIndexStyle(0,DRAW_LINE,1,1);
SetIndexStyle(1,DRAW_LINE,0,1);
SetIndexStyle(2,DRAW_LINE,0,1);
SetIndexStyle(3,DRAW_LINE,0,1);
SetIndexStyle(4,DRAW_LINE,0,1);
SetIndexStyle(5,DRAW_LINE,0,1);
SetIndexStyle(6,DRAW_LINE,0,1);
SetIndexLabel(0,"Pivot Point");
SetIndexLabel(1,"Support 1");
SetIndexLabel(2,"Resistant 1");
SetIndexLabel(3,"Support 2");
SetIndexLabel(4,"Resistant 2");
SetIndexLabel(5,"Support 3");
SetIndexLabel(6,"Resistant 3");
return(0);
}
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
ObjectDelete("Pivot");
ObjectDelete("Sup1");
ObjectDelete("Res1");
ObjectDelete("Sup2");
ObjectDelete("Res2");
ObjectDelete("Sup3");
ObjectDelete("Res3");
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int i,counted_bars=IndicatorCounted();
//---- check for possible errors
if(counted_bars<0) return(-1);
//---- last counted bar will be recounted
if(counted_bars>0) counted_bars--;
int limit=Bars-counted_bars;
if(Period()>PERIOD_H1) return(-1);
if(counted_bars==0)
{
ObjectCreate("Pivot",OBJ_TEXT,0,0,0);
ObjectSetText("Pivot"," Wood Pivot",9,"Arial",Orange);
ObjectCreate("Sup1",OBJ_TEXT,0,0,0);
ObjectSetText("Sup1"," S 1",9,"Arial",Red);
ObjectCreate("Res1",OBJ_TEXT,0,0,0);
ObjectSetText("Res1"," R 1",9,"Arial",Red);
ObjectCreate("Sup2",OBJ_TEXT,0,0,0);
ObjectSetText("Sup2"," S 2",9,"Arial",Red);
ObjectCreate("Res2",OBJ_TEXT,0,0,0);
ObjectSetText("Res2"," R 2",9,"Arial",Red);
ObjectCreate("Sup3",OBJ_TEXT,0,0,0);
ObjectSetText("Sup3"," S 3",9,"Arial",Red);
ObjectCreate("Res3",OBJ_TEXT,0,0,0);
ObjectSetText("Res3"," R 3",9,"Arial",Red);
}
for(i=limit-1; i>=0; i--)
{
if(TimeDay(Time[i])!=TimeDay(Time[i+1]))
{
P=(LastHigh+LastLow+2*Open[i+1])/4;
R1=(2*P)-LastLow;
S1=(2*P)-LastHigh;
R2=P + R1 - S1;
S2=P + S1 - R1;
R3=R2 + (R1 - P);
S3= S2 - (P - S1);
ObjectMove("Pivot",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);
LastLow=Low[i];
LastHigh=High[i];
}
LastLow=MathMin(LastLow,Low[i]);
LastHigh=MathMax(LastHigh,High[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