Daily PIVOT LEVELS
Download scriptThis tool is designed to automatically calculate and display key psychological price levels—specifically Daily Pivot Points—directly on your trading charts. For many traders, these levels act as vital "roadmaps," indicating areas where the market might encounter resistance (where prices struggle to go higher) or support (where prices find a floor and bounce back up).
How the Logic Works
The script functions by analyzing historical price data from the previous trading sessions to predict significant price boundaries for the current session. Here is a breakdown of the underlying logic:
1. Data Gathering The tool constantly monitors the "High," "Low," and "Closing" prices of completed candles. Specifically, it looks at the price action of the previous day to establish the boundaries of the market's recent range.
2. Pivot Point Calculation At the start of a new trading day, the script uses a standard mathematical formula to determine the central "Pivot" point. This is essentially the balance point of the previous day's price movement.
3. Support and Resistance Levels Once the central Pivot Point is established, the script calculates three distinct levels above it (Resistance) and three levels below it (Support):
- Primary Levels (R1/S1 & R2/S2): These are calculated based on the distance between the previous day's high and low relative to the Pivot Point. They represent the most immediate areas of interest where a trend might pause or reverse.
- Secondary Levels (R3/S3): These are "extended" levels. They are used to identify extreme price targets or major zones of volatility that occur when the market moves significantly beyond the standard range.
4. Visual Execution Instead of requiring you to do any manual math, the script performs these calculations instantly as new days begin. It then places visual labels and lines on your chart (labeled as Pivot, S1, R1, S2, R2, S3, and R3) so you can see exactly where these levels sit in real-time.
Summary for the Trader
Essentially, this script automates the "math" of technical analysis. It looks backward at what happened yesterday to help you visualize where important price battles are likely to occur today. By clearly marking these Support and Resistance zones, it helps you identify potential entry and exit points more efficiently.
//+------------------------------------------------------------------+
//| Daily PIVOT LEVELS.mq4 |
//| Copyright © 2006, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
#property indicator_chart_window
//#property indicator_separate_window
#property indicator_buffers 7
#property indicator_color1 LightSlateGray
#property indicator_color2 Gray
#property indicator_color3 Gray
#property indicator_color4 Gray
#property indicator_color5 Gray
#property indicator_color6 Gray
#property indicator_color7 Gray
//---- input parameters
//---- buffers
double PBuffer[];
double S1Buffer[];
double R1Buffer[];
double S2Buffer[];
double R2Buffer[];
double S3Buffer[];
double R3Buffer[];
string Pivot="Pivot Point",Sup1="S 1", Res1="R 1";
string Sup2="S 2", Res2="R 2", Sup3="S 3", Res3="R 3";
int fontsize=8;
double P,S1,R1,S2,R2,S3,R3;
double LastHigh,LastLow,x;
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//---- TODO: add your code here
ObjectDelete("Pivot");
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,3,LightSlateGray);
SetIndexStyle(1,DRAW_LINE,0,1,Gray);
SetIndexStyle(2,DRAW_LINE,0,1,Gray);
SetIndexStyle(3,DRAW_LINE,0,1,Gray);
SetIndexStyle(4,DRAW_LINE,0,1,Gray);
SetIndexStyle(5,DRAW_LINE,0,1,Gray);
SetIndexStyle(6,DRAW_LINE,0,1,Gray);
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="Daily PIVOTS";
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)
{
x=Period();
if (x>240) return(-1);
ObjectCreate("Pivot", OBJ_TEXT, 0, 0,0);
ObjectSetText("Pivot", " Pivot ",fontsize,"Arial ",Red);
SetIndexLabel(0, "Pivot Point");
ObjectCreate("Sup1", OBJ_TEXT, 0, 0, 0);
ObjectSetText("Sup1", " S1",fontsize,"Arial",Red);
SetIndexLabel(1, "S1");
ObjectCreate("Res1", OBJ_TEXT, 0, 0, 0);
ObjectSetText("Res1", " R1",fontsize,"Arial",Red);
SetIndexLabel(2, "R1");
ObjectCreate("Sup2", OBJ_TEXT, 0, 0, 0);
ObjectSetText("Sup2", " S2",fontsize,"Arial",Red);
SetIndexLabel(3, "S2");
ObjectCreate("Res2", OBJ_TEXT, 0, 0, 0);
ObjectSetText("Res2", " R2",fontsize,"Arial",Red);
SetIndexLabel(4, "R2");
ObjectCreate("Sup3", OBJ_TEXT, 0, 0, 0);
ObjectSetText("Sup3", " S3",fontsize,"Arial",Red);
SetIndexLabel(5, "S3");
ObjectCreate("Res3", OBJ_TEXT, 0, 0, 0);
ObjectSetText("Res3", " R3",fontsize,"Arial",Red);
SetIndexLabel(6, "R3");
}
if(counted_bars<0) return(-1);
//---- last counted bar will be recounted
// if(counted_bars>0) counted_bars--;
limit=(Bars-counted_bars)-1;
for (i=limit; i>=0;i--) {
if (TimeDayOfWeek(Time[i+1])!=0){ // Monday Fix
if (High[i+1]>LastHigh) LastHigh=High[i+1];
if (Low[i+1]<LastLow) LastLow=Low[i+1];
if (TimeDay(Time[i])!= TimeDay(Time[i+1]))
{
P=(LastHigh+LastLow+Close[i+1])/3;
R1 = (2*P)-LastLow;
S1 = (2*P)-LastHigh;
R2 = P+(LastHigh - LastLow);
S2 = P-(LastHigh - LastLow);
R3 = (2*P)+(LastHigh-(2*LastLow));
S3 = (2*P)-((2* LastHigh)-LastLow);
LastLow=Open[i]; LastHigh=Open[i];
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);
}
}
PBuffer[i]=P;
S1Buffer[i]=S1;
R1Buffer[i]=R1;
S2Buffer[i]=S2;
R2Buffer[i]=R2;
S3Buffer[i]=S3;
R3Buffer[i]=R3;
}
//----
return(0);
}
//+------------------------------------------------------------------+
Comments