Pivot (Midnight to Midnight)_V2

Author: Poul Trade Forum
Pivot (Midnight to Midnight)_V2

This tool is a technical analysis indicator designed to automatically identify and plot key "Pivot Points" on your trading charts. These points are essential for traders who want to visualize potential areas of support and resistance, helping to determine where the market might pause, reverse, or break out into new trends.

Core Functionality

The script works by analyzing price action to calculate a central pivot level and three levels of support and resistance above and below that pivot. Instead of relying on arbitrary numbers, it uses a mathematical formula based on the historical performance of previous trading sessions.

How the Logic Works

To provide accurate data, the indicator follows a specific sequence of logic:

  • Historical Data Tracking: The tool constantly monitors the "High" (the highest price reached) and the "Low" (the lowest price reached) during a specific timeframe. It keeps track of these extremes to establish the boundaries of the previous price movement.
  • Daily Transition Detection: The script is programmed to look for the moment a new day begins. When it detects a change in the date, it triggers its primary calculation sequence.
  • The Pivot Calculation: Once a new day starts, the tool takes the High, Low, and Closing price of the previous period to calculate the Pivot Point. This acts as the "balance point" for the current market price.
  • Support and Resistance Levels: Using that central Pivot Point, the script calculates three additional levels:
    • R1, R2, and R3 (Resistance): These represent potential "ceilings" where the price might struggle to move higher.
    • S1, S2, and S3 (Support): These represent potential "floors" where the price might find buying interest and stop falling.

Visual Output

The indicator provides a clear visual experience on your chart by:

  1. Drawing Lines: It plots these levels as distinct lines so you can see the "zones" of interest at a glance.
  2. Dynamic Labeling: It places text labels (such as S1, R1, etc.) directly on the chart to ensure you know exactly which level you are viewing.
  3. Real-Time Updates: As the market moves and new periods begin, the script automatically recalculates these values and shifts the lines forward, ensuring your analysis is always based on the most recent price data.

Summary for Traders

In simple terms, this script removes the guesswork from identifying key price levels. By automatically calculating these zones based on previous price extremes, it allows you to see where the market "should" react, helping you manage risk by identifying where to place stop-loss orders or where to look for potential entry points.

Miscellaneous
Implements a curve of type %1
14 Views
0 Downloads
0 Favorites
Pivot (Midnight to Midnight)_V2
//+------------------------------------------------------------------+
//|                                                        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 Goldenrod
#property indicator_color2 Red
#property indicator_color3 Lime
#property indicator_color4 Red
#property indicator_color5 Lime
#property indicator_color6 Aqua
#property indicator_color7 Aqua
//---- 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()
  {
//---- 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;

   IndicatorBuffers(7);
//---- indicator line
   SetIndexStyle(0,DRAW_LINE,0,0,Goldenrod);
   SetIndexStyle(1,DRAW_LINE,0,0,Red);
   SetIndexStyle(2,DRAW_LINE,0,0,Lime);
   SetIndexStyle(3,DRAW_LINE,0,0,Red);
   SetIndexStyle(4,DRAW_LINE,0,0,Lime);
   SetIndexStyle(5,DRAW_LINE,0,0,Aqua);
   SetIndexStyle(6,DRAW_LINE,0,0,Aqua);
   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 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",White);
   ObjectCreate("Sup1", OBJ_TEXT, 0, 0, 0);
   ObjectSetText("Sup1", "      S 1",fontsize,"Arial",White);
   ObjectCreate("Res1", OBJ_TEXT, 0, 0, 0);
   ObjectSetText("Res1", "      R 1",fontsize,"Arial",White);
   ObjectCreate("Sup2", OBJ_TEXT, 0, 0, 0);
   ObjectSetText("Sup2", "      S 2",fontsize,"Arial",White);
   ObjectCreate("Res2", OBJ_TEXT, 0, 0, 0);
   ObjectSetText("Res2", "      R 2",fontsize,"Arial",White);
   ObjectCreate("Sup3", OBJ_TEXT, 0, 0, 0);
   ObjectSetText("Sup3", "      S 3",fontsize,"Arial",White);
   ObjectCreate("Res3", OBJ_TEXT, 0, 0, 0);
   ObjectSetText("Res3", "      R 3",fontsize,"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;

}

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

Comments