gStdPivots_v1

Download script
Author: Copyright � 2005, MetaQuotes Software Corp.
gStdPivots_v1

This script is designed for the MetaTrader platform to automatically calculate and display "Standard Pivot Points" on a trading chart. These pivots serve as technical analysis markers that help traders identify potential support and resistance levels based on historical price action.

Core Functionality

The primary purpose of this tool is to take the price data from one completed day (the previous session) and project a series of key price levels onto the current day's chart. These levels include a central Pivot Point, three Resistance levels (R1, R2, R3), and three Support levels (S1, S2, S3).

How the Logic Works

The script processes data in the following sequence:

  • Timeframe Validation: Before performing any calculations, the script checks the user's chart timeframe. It is specifically designed for short-term analysis; if a user attempts to run it on a chart larger than 4 hours, the script will trigger an alert and stop, as the pivot logic is intended for intraday use.
  • Data Collection: The script scans through historical price bars to identify the "High," "Low," and "Close" prices of the previous trading day. It also accounts for time zone differences (GMT shift) to ensure that it correctly identifies when one day ends and another begins, specifically handling the transition between Sunday and Monday accurately.
  • Mathematical Calculation: Once it identifies the previous day's data, it applies a standardized mathematical formula to generate the current day's levels:
    • Pivot Point (P): Calculated as the average of the previous High, Low, and Close.
    • Resistance Levels (R1-R3): Derived from the Pivot Point and the distance between the previous day's highs and lows.
    • Support Levels (S1-S3): Derived using similar logic to identify areas where price might find a "floor."
  • Dynamic Visualization: As the script runs, it plots these seven levels as horizontal lines on your chart. It also includes a labeling system that automatically places text markers (e.g., "R1", "S2") on the right side of the screen, making it easy for a trader to identify which line represents which level at a glance.

Key Features for the User

  • Historical Accuracy: Unlike basic pivots that only show today's lines, this script calculates historical pivots, allowing you to see how price reacted to these levels in previous days.
  • Automatic Updates: The script constantly monitors the current time; as soon as a new day begins, it updates the calculations to reflect the most recent data.
  • Customizable Aesthetics: Users can adjust the colors of the support and resistance lines (e.g., Red for Support, Green for Resistance) and modify font sizes to ensure the labels are clearly visible on their specific workspace.
Price Data Components
Series array that contains open time of each bar
Miscellaneous
Implements a curve of type %1It issuies visual alerts to the screen
14 Views
0 Downloads
0 Favorites
gStdPivots_v1
/*-----------------------------+
|			       |
| Shared by www.Aptrafx.com    |
|			       |
+------------------------------*/

//+------------------------------------------------------------------+
//|              cam_H2_H5_Historical_V4.mq4           gStdPivots.mq4|
//|                      Copyright © 2005, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//| Modified to chart historical camarilla pivots by MrPip           |
//| 3/28/06 Fixed problem of Sunday/Monday pivots                    |
//|         and added some ideas from goodtiding5 (Kenneth Z.) 
//| 10/18/06 Modified by Stache to convert to std pivots      |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#property indicator_chart_window
#property indicator_buffers 7
#property indicator_color1 Yellow
#property indicator_width1 1
#property indicator_style1 3
#property indicator_color2 DodgerBlue
#property indicator_width2 1
#property indicator_style2 3
#property indicator_color3 FireBrick
#property indicator_width3 1
#property indicator_style3 3
#property indicator_color4 Magenta
#property indicator_width4 1
#property indicator_style4 1
#property indicator_color5 FireBrick
#property indicator_width5 1
#property indicator_style5 3
#property indicator_color6 DodgerBlue
#property indicator_width6 1
#property indicator_style6 3
#property indicator_color7 Yellow
#property indicator_width7 1
#property indicator_style7 3



//---- input parameters

extern int  GMTshift=0;
extern color RColor = Green;
extern color SColor= Red;
extern int fontsize=10;
extern int LabelShift=20;


double R3Buffer[];
double R2Buffer[];
double R1Buffer[];
double PivotBuffer[];
double S1Buffer[];
double S2Buffer[];
double S3Buffer[];

double P, R1,R2,R3,S1,S2,S3;

double prev_high=0;
double prev_low=0;
double prev_close=0;
double cur_day=0;
double prev_day=0;
double day_high=0;
double day_low=0;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   IndicatorBuffers(7);
//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,R3Buffer);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,R2Buffer);
   SetIndexStyle(2,DRAW_LINE);
   SetIndexBuffer(2,R1Buffer);
   SetIndexStyle(3,DRAW_LINE);
   SetIndexBuffer(3,PivotBuffer);
   SetIndexStyle(4,DRAW_LINE);
   SetIndexBuffer(4,S1Buffer);
   SetIndexStyle(5,DRAW_LINE);
   SetIndexBuffer(5,S2Buffer);
   SetIndexStyle(6,DRAW_LINE);
   SetIndexBuffer(6,S3Buffer);
   SetIndexLabel(0,"S3");
   SetIndexLabel(1,"S2");
   SetIndexLabel(2,"S1");
   SetIndexLabel(3,"Pivot");
   SetIndexLabel(4,"R1");
   SetIndexLabel(5,"R2");
   SetIndexLabel(6,"R3");
   
//----
//   IndicatorShortName("gStdPivots);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//---- TODO: add your code here
   ObjectDelete("CamPivot");
   ObjectDelete("ResH2");
   ObjectDelete("ResH3");
   ObjectDelete("ResH4");
   ObjectDelete("ResH5");  
   ObjectDelete("ResH4");
   ObjectDelete("ResH5"); 
//----
   return(0);
  }

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
   int cnt, limit;

//---- exit if period is greater than 4 hr charts
   if(Period() > 240)
   {
      Alert("Error - Chart period is greater than 4 Hr.");
      return(-1); // then exit
   }
   if(counted_bars<0) return(-1);

//---- last counted bar will be recounted
//   if(counted_bars>0) counted_bars--;

//   limit=(Bars-counted_bars)-1;
   limit=counted_bars;

//---- Get new daily prices & calculate pivots

   for (cnt=limit;cnt >=0;cnt--)
   {
   	if (TimeDayOfWeek(Time[cnt]) == 0)
	   {
        cur_day = prev_day;
	   }
	   else
	   {
        cur_day = TimeDay(Time[cnt]- (GMTshift*3600));
	   }
	   
   	if (prev_day != cur_day)
   	{
	   	prev_close = Close[cnt+1];
		   prev_high = day_high;
		   prev_low = day_low;

	      day_high = High[cnt];
 	      day_low  = Low[cnt];

   P  = (prev_high + prev_low + prev_close)/3;//Pivot
   R1 = (2*P)-prev_low;
   S1 = (2*P)-prev_high;
   R2 = P+(prev_high - prev_low);
   S2 = P-(prev_high - prev_low);
   R3 = (2*P)+(prev_high-(2*prev_low));
   S3 = (2*P)-((2* prev_high)-prev_low); 


		   prev_day = cur_day;
	   }
      if (High[cnt]>day_high)
      {
         day_high = High[cnt];
      }
      if (Low[cnt]<day_low)
      {
         day_low = Low[cnt];
      }
      
      
      
//         day_low=Open[cnt]; day_high=Open[cnt];
      
      

//---  Draw  Pivot lines on chart

      PivotBuffer[cnt]=P;
      R3Buffer[cnt]=R3;
      R2Buffer[cnt]=R2;
      R1Buffer[cnt]=R1;
      S1Buffer[cnt]=S1;
      S2Buffer[cnt]=S2;
      S3Buffer[cnt]=S3;
   }

   if (cur_day == TimeDay(CurTime()))   DisplayLabels();
//----
   return(0);
  }

void DisplayLabels()
{
      if(ObjectFind("CamPivot") != 0)
      {
        ObjectCreate("StsPivot", OBJ_TEXT, 0, 0,0);
        ObjectSetText("StdPivot", "                 Pivot",fontsize,"Arial",Yellow);
      }
      else
      {
        ObjectMove("StdPivot", 0, Time[20],P);
      }
      
      if(ObjectFind("Res 3") != 0)
      {
      ObjectCreate("Res 3", OBJ_TEXT, 0, 0, 0);
      ObjectSetText("Res 3", "      R 3",fontsize,"Arial",RColor);
      }
      else
      {
         ObjectMove("Res 3", 0, Time[20],R3);
      }
      
      if(ObjectFind("Res 2") != 0)
      {
      ObjectCreate("Res 2", OBJ_TEXT, 0, 0, 0);
      ObjectSetText("Res 2", "      R 2",fontsize,"Arial",RColor);
      }
      else
      {
         ObjectMove("Res 2", 0, Time[20],R2);
      }
      
      if(ObjectFind("Res 1") != 0)
      {
      ObjectCreate("Res 1", OBJ_TEXT, 0, 0, 0);
      ObjectSetText("Res 1", "      R 1",fontsize,"Arial",RColor);
      }
      else
      {
         ObjectMove("Res 1", 0, Time[20],R1);
      }
      
      if(ObjectFind("Sup 1") != 0)
      {
      ObjectCreate("Sup 1", OBJ_TEXT, 0, 0, 0);
      ObjectSetText("Sup 1", "      S 1",fontsize,"Arial",SColor);
      }
      else
      {
         ObjectMove("Sup 1", 0, Time[20],S1);
      }
      
      if(ObjectFind("Sup 2") != 0)
      {
      ObjectCreate("Sup 2", OBJ_TEXT, 0, 0, 0);
      ObjectSetText("Sup 2", "      S 2",fontsize,"Arial",SColor);
      }
      else
      {
         ObjectMove("Sup 2", 0, Time[20],S2);
      }
      if(ObjectFind("Sup 3") != 0)
      {
      ObjectCreate("Sup 3", OBJ_TEXT, 0, 0, 0);
      ObjectSetText("Sup 3", "      S 3",fontsize,"Arial",SColor);
      }
      else
      {
         ObjectMove("Sup 3", 0, Time[20],S3);
      }
      
      
}
//+------------------------------------------------------------------+

Comments