PivotDaily_v1

Download script
Author: Poul Trade Forum
PivotDaily_v1

This tool is a technical analysis indicator designed for the MetaTrader platform to help traders identify key price levels on a chart. It specifically focuses on calculating "Pivot Points," which are standard benchmarks used by market participants to determine the potential range of price action for a specific trading session.

Core Functionality

The script automatically identifies and plots seven distinct price levels on your chart:

  • The Pivot Point (P): The central baseline that represents the equilibrium of the previous trading period.
  • Resistance Levels (R1, R2, R3): These represent "ceilings" where price may face difficulty breaking upward.
  • Support Levels (S1, S2, S3): These represent "floors" where price may find buying interest or struggle to drop further.

How the Logic Works

The indicator follows a systematic mathematical approach based on historical price data:

1. Data Collection The script constantly scans the previous completed trading session to identify its most extreme boundaries—specifically the highest price reached (High) and the lowest price reached (Low).

2. Daily Transition Detection The tool is programmed to recognize when a new day begins. Every time a new day starts, it performs a calculation to "reset" the levels for the current day based on the information gathered from the day that just ended.

3. Mathematical Calculation Once a new day is detected, the script uses the following logic:

  • The Pivot Point is calculated as the average of the previous day's High, Low, and Closing price.
  • Resistance and Support Levels are then derived from that central Pivot Point by adding or subtracting the volatility (the difference between the High and Low) of the previous session.

4. Visual Representation Instead of just showing a single number, the script draws these levels as dynamic lines on your chart. It also places text labels (such as "R1", "S2", etc.) to clearly identify each zone. This allows you to see at a glance where the "strong" and "weak" zones of the current market are expected to be.

Summary for Traders

This indicator simplifies technical analysis by doing the heavy lifting for you. Rather than manually calculating complex price formulas, the script automatically projects today's potential "battlegrounds." By watching how the price reacts when it touches these R (Resistance) and S (Support) lines, you can better anticipate potential trend reversals or continuations.

Miscellaneous
Implements a curve of type %1
10 Views
0 Downloads
0 Favorites
PivotDaily_v1

//+------------------------------------------------------------------+
//|                                                        Pivot.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 DarkTurquoise
#property indicator_color3 Crimson
#property indicator_color4 DarkTurquoise
#property indicator_color5 Crimson
#property indicator_color6 YellowGreen
#property indicator_color7 YellowGreen
//---- 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()
  {
   string short_name;


   SetIndexStyle(0,DRAW_LINE,0,1,Orange);
   SetIndexStyle(1,DRAW_LINE,0,1,DarkTurquoise);
   SetIndexStyle(2,DRAW_LINE,0,1,Crimson);
   SetIndexStyle(3,DRAW_LINE,0,1,DarkTurquoise);
   SetIndexStyle(4,DRAW_LINE,0,1,Crimson);
   SetIndexStyle(5,DRAW_LINE,0,1,YellowGreen);
   SetIndexStyle(6,DRAW_LINE,0,1,YellowGreen);
   SetIndexBuffer(0,PBuffer);
   SetIndexBuffer(1,S1Buffer);
   SetIndexBuffer(2,R1Buffer);
   SetIndexBuffer(3,S2Buffer);
   SetIndexBuffer(4,R2Buffer);
   SetIndexBuffer(5,S3Buffer);
   SetIndexBuffer(6,R3Buffer);


   short_name="Pivot Point";
   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 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);
   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