Author: Poul Trade Forum
Pivot-2_v1

This script is designed to automatically identify and plot key price levels on your trading chart, specifically focusing on "Pivot Points." In trading, these are standard levels used by technicians to determine the equilibrium of the market and identify potential areas of support (where prices may stop falling) and resistance (where prices may stop rising).

Core Logic and Functionality

The indicator functions by analyzing historical price movements to calculate seven specific levels for every new trading day. Here is a breakdown of how it processes this data:

1. Data Tracking The script monitors the "High" and "Low" prices over a specific period. It continuously keeps track of the highest and lowest points reached in the preceding session. This information serves as the foundation for all subsequent calculations.

2. Daily Transition Detection The logic is designed to trigger every time the calendar day changes. When the script detects a new day starting, it takes the high, low, and closing prices from the previous day and applies a mathematical formula to project the price levels for the current day.

3. The Pivot Calculations For each new day, the script calculates seven distinct values:

  • The Pivot Point (P): This is the central baseline, calculated as the average of the previous day's high, low, and closing prices.
  • Resistance Levels (R1, R2, R3): These represent "ceilings." The script calculates these to show where the price might face selling pressure.
    • R1 is the immediate upper target.
    • R2 and R3 are deeper, more significant resistance levels used for broader trend analysis.
  • Support Levels (S1, S2, S3): These represent "floors." The script calculates these to show where the price might find a buyer and bounce back up.
    • S1 is the immediate lower target.
    • S2 and S3 are deeper, more significant support levels.

4. Visual Presentation Once the calculations are complete for the day, the script performs three actions simultaneously:

  • Plotting: It draws these levels onto your chart as visual markers (arrows/lines) so you can see them in real-time.
  • Labeling: It updates text objects on the screen to identify each level clearly (e.g., "R1", "S2").
  • Data Window: It displays the exact numerical values of all seven levels in the chart's comment section, allowing for quick reference without having to hover your mouse over the lines.

Summary for the User

Instead of you having to manually calculate complex formulas every morning, this tool does the "heavy lifting." It looks at what happened yesterday and automatically draws a map for today, showing you exactly where the market's structural "floors" and "ceilings" are likely to be based on standard trading mathematics.

Miscellaneous
Implements a curve of type %1
12 Views
0 Downloads
0 Favorites
Pivot-2_v1
/*-----------------------------+
|			       |
| Shared by www.Aptrafx.com    |
|			       |
+------------------------------*/

//+------------------------------------------------------------------+
//|                                                        Pivot-2.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 Lime
#property indicator_color3 Maroon
#property indicator_color4 Lime
#property indicator_color5 Maroon
#property indicator_color6 Lime
#property indicator_color7 Green

//---- input parameters
extern int CountBars=300;
//---- buffers
double PBuffer[];
double S1Buffer[];
double R1Buffer[];
double S2Buffer[];
double R2Buffer[];
double S3Buffer[];
double R3Buffer[];
string Pivot="P",Sup1="S 1", Res1="R 1";
string Sup2="S 2", Res2="R 2", Sup3="S 3", Res3="R 3";
int fontsize=6;
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_ARROW,2,1,White);
   SetIndexArrow(0,158);
   SetIndexStyle(1,DRAW_ARROW,2,1,Red);
   SetIndexArrow(1,158);
   SetIndexStyle(2,DRAW_ARROW,2,1,Aquamarine);
   SetIndexArrow(2,158);
   SetIndexStyle(3,DRAW_ARROW,2,1,Red);
   SetIndexArrow(3,158);
   SetIndexStyle(4,DRAW_ARROW,2,1,Aquamarine);
   SetIndexArrow(4,158);
   SetIndexStyle(5,DRAW_ARROW,2,1,Red);
   SetIndexArrow(5,158);
   SetIndexStyle(6,DRAW_ARROW,2,1,Aquamarine);
   SetIndexArrow(6,158);
    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="Pivot";
   IndicatorShortName(short_name);
   SetIndexLabel(0,short_name);
short_name="Res1";
   IndicatorShortName(short_name);
   SetIndexLabel(2,short_name);
short_name="Res2";
   IndicatorShortName(short_name);
   SetIndexLabel(4,short_name);
short_name="Res3";
   IndicatorShortName(short_name);
   SetIndexLabel(6,short_name);
short_name="Sup1";
   IndicatorShortName(short_name);
   SetIndexLabel(1,short_name);
short_name="Sup2";
   IndicatorShortName(short_name);
   SetIndexLabel(3,short_name);
short_name="Sup3";
   IndicatorShortName(short_name);
   SetIndexLabel(5,short_name);


//----
   SetIndexDrawBegin(0,6);
//----
 




//----
   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>CountBars) return(-1);
   //ObjectCreate("Pivot", OBJ_TEXT, 0, 0,0);
   //ObjectSetText("Pivot", "P",7,"Arial",White);
   //ObjectCreate("Sup1", OBJ_TEXT, 0, 0, 0);
   //ObjectSetText("Sup1", "s1",7,"Arial",White);
   //ObjectCreate("Res1", OBJ_TEXT, 0, 0, 0);
   //ObjectSetText("Res1", "r1",7,"Arial",White);
   //ObjectCreate("Sup2", OBJ_TEXT, 0, 0, 0);
   //ObjectSetText("Sup2", "s2",7,"Arial",White);
   //ObjectCreate("Res2", OBJ_TEXT, 0, 0, 0);
   //ObjectSetText("Res2", "r2",7,"Arial",White);
   //ObjectCreate("Sup3", OBJ_TEXT, 0, 0, 0);
   //ObjectSetText("Sup3", "s3",7,"Arial",White);
  // ObjectCreate("Res3", OBJ_TEXT, 0, 0, 0);
   //ObjectSetText("Res3", "r3",7,"Arial",White);
}
   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;
Comment("Res3=",R3Buffer[i],"\n","Res2=",R2Buffer[i],"\n","Res1=",R1Buffer[i],"\n","Pivot=",PBuffer[i],"\n","Sup1=",S1Buffer[i],"\n","Sup2=",S2Buffer[i],"\n","Sup3=",S3Buffer[i]);
}

//----
   return(0);
  }
//+------------------------------------------------------------------+

Comments