Pivot_AllLevels
Download scriptTechnical Overview: Pivot Point Level Indicator
This script is designed to provide traders with a visual roadmap of potential support and resistance levels on a financial chart. It automates the calculation of "Pivot Points," which are classic technical analysis markers used to identify where price action might experience significant reversals or consolidations.
Core Logic and Functionality
The script operates by analyzing historical price data to identify key price milestones. Here is how it processes that information:
1. Data Collection and Monitoring The tool continuously monitors the high, low, and closing prices of the market. Specifically, it tracks the highest and lowest points reached during previous trading sessions to establish a baseline for the current period's volatility.
2. Daily Transition Detection The logic is built to react to new trading days. Every time the calendar date changes on the chart, the script triggers a recalculation. It takes the price data from the completed day and uses it as the mathematical foundation to project levels for the new day ahead.
3. Pivot Calculation Methodology Once a new day begins, the script calculates several distinct price levels based on the previous day's performance:
- The Pivot Point (P): This is the central equilibrium point of the market. It is calculated by averaging the previous day's high, low, and closing prices.
- Resistance Levels (R1, R2, R3): These represent "ceiling" areas where the price may face selling pressure. The script projects these upward from the Pivot Point based on the previous day's range.
- Support Levels (S1, S2, S3): These represent "floor" areas where the price may find buying interest. The script projects these downward from the Pivot Point.
4. Dynamic Visual Representation The script does not just provide raw numbers; it translates these calculations into visual elements directly on your trading platform:
- Line Rendering: It draws continuous lines for all seven levels (Pivot, 3 Support, and 3 Resistance), allowing traders to see horizontal zones of interest easily.
- Text Labels: To ensure clarity, the script automatically places descriptive labels (e.g., "S1", "R2") on the chart so you can distinguish between the different levels at a glance.
Summary for the User
Essentially, this tool acts as an automated assistant that looks back at yesterday's market behavior to tell you where the "walls" and "floors" are likely to be today. By identifying these zones, it helps traders spot potential areas where price action might stall, bounce, or break out, providing a clearer structural view of the market.
//+------------------------------------------------------------------+
//| Pivot_AllLevels.mq4 |
//| Copyright © 2004, Poul_Trade_Forum |
//| Aborigen |
//| http://forex.kbpauk.ru/ |
//+------------------------------------------------------------------+
#property copyright "Poul Trade Forum"
#property link "http://forex.kbpauk.ru/"
#property indicator_chart_window
//#property indicator_separate_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 Lime
//---- 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 = 10;
double P, S1, R1, S2, R2, S3, R3;
double LastHigh, LastLow, x;
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
ObjectDelete("Pivot");
ObjectDelete("Sup1");
ObjectDelete("Res1");
ObjectDelete("Sup2");
ObjectDelete("Res2");
ObjectDelete("Sup3");
ObjectDelete("Res3");
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicator line
SetIndexStyle(0, DRAW_LINE);
SetIndexStyle(1, DRAW_LINE);
SetIndexStyle(2, DRAW_LINE);
SetIndexStyle(3, DRAW_LINE);
SetIndexStyle(4, DRAW_LINE);
SetIndexStyle(5, DRAW_LINE);
SetIndexStyle(6, DRAW_LINE);
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
IndicatorShortName("Pivot Point");
SetIndexLabel(0, "Pivot Point");
//----
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 Point", fontsize, "Arial", Red);
ObjectCreate("Sup1", OBJ_TEXT, 0, 0, 0);
ObjectSetText("Sup1", " S 1", fontsize, "Arial", Red);
ObjectCreate("Res1", OBJ_TEXT, 0, 0, 0);
ObjectSetText("Res1", " R 1", fontsize, "Arial", Red);
ObjectCreate("Sup2", OBJ_TEXT, 0, 0, 0);
ObjectSetText("Sup2", " S 2", fontsize, "Arial", Red);
ObjectCreate("Res2", OBJ_TEXT, 0, 0, 0);
ObjectSetText("Res2", " R 2", fontsize, "Arial", Red);
ObjectCreate("Sup3", OBJ_TEXT, 0, 0, 0);
ObjectSetText("Sup3", " S 3", fontsize, "Arial", Red);
ObjectCreate("Res3", OBJ_TEXT, 0, 0, 0);
ObjectSetText("Res3", " R 3", fontsize, "Arial", Red);
}
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(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