Pivot_Resistance_Historical
Download scriptThis tool is designed to provide traders with a clear visual representation of key price levels based on the previous day's market activity. By automatically identifying and plotting these historical resistance points, it helps users understand where the market might face pressure or find support during the current trading session.
Core Logic Overview
The script operates by analyzing the "High," "Low," and "Close" prices of the preceding trading day. It uses these three data points to calculate specific mathematical benchmarks known as Pivot points. Instead of just showing one price level, it generates a series of levels that represent different tiers of resistance.
How the Calculations Work
Every time a new trading day begins, the script looks back at the completed previous day and performs the following steps:
- The Base Pivot: It calculates a central "Pivot" point by taking the average of the previous day's high, low, and closing price. This serves as the equilibrium point for the current day.
- Resistance Levels (R1, R2, R3): Using that base pivot and the previous day's range, the script calculates three distinct resistance levels:
- R1: A primary resistance level based on the relationship between the pivot and the previous low.
- R2: A secondary resistance level derived from the total price range (the distance between high and low) of the previous day.
- R3: A tertiary, higher-strength resistance level calculated to identify more significant overhead price barriers.
Visual Presentation and Automation
To ensure these levels are easy for a trader to read at a glance, the script handles several automated tasks:
- Historical Mapping: The tool doesn't just show today's levels; it draws these lines across your historical chart so you can see how the market reacted to these specific prices in the past.
- Dynamic Labeling: The script automatically places text labels (Pivot, R1, R2, R3) on the right side of your chart. These labels move in real-time to stay aligned with the current price action, ensuring you always know which line is which.
- Timezone Awareness: It includes a customizable GMT shift to ensure that "days" are calculated correctly based on your specific region's time.
- Safety Constraints: To maintain accuracy, the script includes a built-in check to ensure it is only used on charts with a timeframe of 4 hours or less. If a larger timeframe is selected, the tool will alert you, as the calculation logic is optimized for intraday precision.
//+------------------------------------------------------------------+
//| Pivot Resistance Historical_V1.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.) |
//| Modified 4/14/07 to chart historical Pivot resistance by Traden4x|
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 Lime
#property indicator_color2 Lime
#property indicator_color3 Lime
#property indicator_color4 Yellow
#property indicator_width1 1
#property indicator_width1 1
#property indicator_width2 2
#property indicator_width3 1
//---- input parameters
extern int GMTshift=0;
extern color HColor = Lime;
extern int fontsize=12;
extern int LabelShift=20;
double R3Buffer[];
double R2Buffer[];
double R1Buffer[];
double PivotBuffer[];
double P, R1, R2, R3, H5;
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(4);
//---- indicators
SetIndexStyle(0,DRAW_LINE, STYLE_DOT,1,Lime);
SetIndexBuffer(0,R3Buffer);
SetIndexStyle(1,DRAW_LINE, 0,2,Lime);
SetIndexBuffer(1,R2Buffer);
SetIndexStyle(2,DRAW_LINE,STYLE_DASH,1,Lime);
SetIndexBuffer(2,R1Buffer);
SetIndexStyle(3,DRAW_LINE, 1,1, Yellow);
SetIndexBuffer(3,PivotBuffer);
SetIndexLabel(0,"R3");
SetIndexLabel(1,"R2 SHORT");
SetIndexLabel(2,"R1");
SetIndexLabel(3,"Pivot");
//----
// IndicatorShortName("Resistance Pivots");
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//---- TODO: add your code here
ObjectDelete("CamPivot");
ObjectDelete("ResR1");
ObjectDelete("ResR2");
ObjectDelete("ResR3");
//----
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
//---- To display all 8 Camarilla pivots remove comment symbols below and
// add the appropriate object functions below
R1 = (2*P)-prev_low;
R2 = P+(prev_high-prev_low);
R3 = (2*P)+(prev_high-(2*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;
}
if (cur_day == TimeDay(CurTime())) DisplayLabels();
//----
return(0);
}
void DisplayLabels()
{
if(ObjectFind("CamPivot") != 0)
{
ObjectCreate("CamPivot", OBJ_TEXT, 0, 0,0);
ObjectSetText("CamPivot", " Pivot",fontsize,"Arial",Yellow);
}
else
{
ObjectMove("CamPivot", 0, Time[60],P);
}
if(ObjectFind("ResR1") != 0)
{
ObjectCreate("ResR1", OBJ_TEXT, 0, 0, 0);
ObjectSetText("ResR1", " R 1",fontsize,"Arial",HColor);
}
else
{
ObjectMove("ResR1", 0, Time[60],R1);
}
if(ObjectFind("ResR2") != 0)
{
ObjectCreate("ResR2", OBJ_TEXT, 0, 0, 0);
ObjectSetText("ResR2", " R 2",fontsize,"Arial",HColor);
}
else
{
ObjectMove("ResR2", 0, Time[60],R2);
}
if(ObjectFind("ResR3") != 0)
{
ObjectCreate("ResR3", OBJ_TEXT, 0, 0, 0);
ObjectSetText("ResR3", " R 3",fontsize,"Arial",HColor);
}
else
{
ObjectMove("ResR3", 0, Time[60],R3);
}
}
//+------------------------------------------------------------------+
Comments