Pivot_AllLevels

Download script
Author: Poul Trade Forum
Pivot_AllLevels

Technical 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.

Miscellaneous
Implements a curve of type %1
14 Views
0 Downloads
0 Favorites
Pivot_AllLevels
//+------------------------------------------------------------------+
//|                                              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