Author: Poul Trade Forum
Pivot1_v1

This script is a technical analysis tool designed for the MetaTrader platform to automatically calculate and display Pivot Points on a price chart. Pivot Points are essential tools used by traders to identify potential support and resistance levels, helping them determine where the market might encounter "floors" (support) or "ceilings" (resistance).

Core Functionality

The script identifies key price levels based on the previous day's trading activity. It specifically looks for three main components from the preceding session:

  • The highest price reached (High).
  • The lowest price reached (Low).
  • The closing price (Close).

How the Logic Works

  1. Data Tracking: The script continuously monitors the high and low prices of the current trading session to keep track of the range.
  2. Daily Transition: Whenever the date changes (marking the start of a new trading day), the script triggers its calculation logic. It uses the data collected from the completed previous day to establish the levels for the new day.
  3. Mathematical Calculations:
    • Pivot Point (P): This is the central baseline, calculated by averaging the previous day's high, low, and closing prices.
    • Resistance Levels (R1, R2, R3): These are calculated as targets above the Pivot Point where price may face selling pressure.
    • Support Levels (S1, S2, S3): These are calculated as safety zones below the Pivot Point where price may find buying interest.
  4. Visual Representation: Once these values are calculated, the script automatically draws seven distinct lines on your chart. Each level is assigned a specific color (such as Orange, Dark Blue, Maroon, and Lime) to make them easily distinguishable at a glance.

User Experience features

  • Dynamic Labeling: The script places text labels on the chart (e.g., "S 1", "R 2") so that traders can immediately identify which line represents which level without having to guess.
  • Automated Updates: Because the logic is tied to the daily time change, the lines will automatically refresh at the start of every new trading day, providing updated levels for your current session.
  • Compatibility: The tool is designed to run on standard charts but includes a check to ensure it functions correctly within specific timeframes (specifically optimized for periods higher than 240 minutes).

In summary, this script automates the manual math required to plot Pivot Points, providing a clean, visual map of where price volatility might encounter significant barriers during a trading day.

Miscellaneous
Implements a curve of type %1
9 Views
0 Downloads
0 Favorites
Pivot1_v1
/*-----------------------------+
|			       |
| Shared by www.Aptrafx.com    |
|			       |
+------------------------------*/

//+------------------------------------------------------------------+
//|                                                        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 DarkBlue
#property indicator_color3 Maroon
#property indicator_color4 DarkBlue
#property indicator_color5 Maroon
#property indicator_color6 Lime
#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()
  {
//---- 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_LINE,0,2,Orange);
   SetIndexStyle(1,DRAW_LINE,0,2,DarkBlue);
   SetIndexStyle(2,DRAW_LINE,0,2,Maroon);
   SetIndexStyle(3,DRAW_LINE,0,2,DarkBlue);
   SetIndexStyle(4,DRAW_LINE,0,2,Maroon);
   SetIndexStyle(5,DRAW_LINE,0,2,Lime);
   SetIndexStyle(6,DRAW_LINE,0,2,Lime);
   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",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