gStdPivots
Download scriptTechnical Overview: Historical Pivot Point Indicator
This script is designed to automatically calculate and display key price levels—known as Standard Pivot Points—on your trading charts. These levels act as visual benchmarks, helping traders identify potential areas of support and resistance based on historical price action.
Core Logic and Functionality
1. Automated Data Tracking The script constantly monitors the market's price movement to identify the "High," "Low," and "Close" prices for each preceding trading day. By capturing these specific data points, the tool can establish a baseline for the current day's price movement.
2. The Pivot Calculation Engine Once the previous day's data is secured, the script uses mathematical formulas to project seven distinct price levels for the current session:
- The Central Pivot: The "fair value" balance point of the market for the day.
- Resistance Levels (R1, R2, R3): These represent price ceilings where the market may face selling pressure or struggle to move higher.
- Support Levels (S1, S2, S3): These represent "floors" where the market may find buying interest or struggle to drop further.
3. Historical Mapping Unlike simple tools that only show today's levels, this script is built to map these lines across historical data. It looks back through previous days and draws the corresponding pivot lines on your chart, allowing you to see how price reacted to these levels in the past.
4. Visual Presentation To ensure ease of use for the trader, the script performs the following visual tasks:
- Line Drawing: It plots the seven levels as distinct lines on your chart window.
- Dynamic Labeling: It automatically places text labels (e.g., "R1", "S2") near the price levels so you can instantly identify which level is which.
- Timezone Synchronization: The logic includes a GMT shift setting to ensure that the "Daily" transition occurs correctly based on your specific time zone, preventing errors during day transitions.
Usage Constraints
For the logic to remain accurate and visible, the script is optimized for intraday viewing. It includes a built-in check that alerts the user if they attempt to apply it to a timeframe larger than 4 hours, as the daily pivot calculations are intended to provide detail on a shorter time scale.
//+------------------------------------------------------------------+
//| 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