Pivot_Resistance_Historical2

Author: Copyright � 2005, MetaQuotes Software Corp.
Pivot_Resistance_Historical2

This script is a technical analysis tool designed to automatically calculate and visualize specific price levels on your trading charts. It focuses on identifying historical "Pivot" points and "Resistance" levels, which are key benchmarks used by traders to understand where the market might encounter friction or trend reversals.

Core Functionality

The primary purpose of this tool is to map out five distinct price levels based on the previous day's trading data:

  • Pivot: The central equilibrium point of the previous day's price action.
  • Resistance 1 (R1) through Resistance 4 (R4): Specific upper bounds calculated using a variation of the "Camarilla" method. These levels help identify areas where selling pressure may increase or where buyers might struggle to push the price higher.

How the Logic Works

The script operates by constantly scanning historical price data to find the high, low, and closing prices of previous trading sessions. Once it identifies a completed day, it performs the following steps:

  1. Data Collection: It gathers the highest price reached, the lowest price reached, and the final closing price from the previous 24-hour period.
  2. Calculation: It uses these three data points to mathematically determine the Pivot and the four Resistance levels for the current day.
  3. Historical Mapping: Instead of just showing you today's levels, the script "looks back" into history (based on a user-defined number of days) and draws these lines across your chart. This allows you to see where these significant price levels were located in the past.
  4. Visual Display:
    • It draws dashed and dotted lines across the chart to represent these levels clearly.
    • It places text labels on the right side of the chart so you can easily identify which line corresponds to which level (e.g., "R1", "R2").
    • It updates these lines in real-time as new price data arrives.

Key User Features

  • Timezone Adjustment: The logic includes a GMT shift setting to ensure that the "daily" calculations align correctly with your specific geographic time zone.
  • Visual Customization: Users can adjust colors, font sizes, and whether they want to see the current active lines displayed prominently.
  • Compatibility Check: The script includes a built-in safety check to ensure it is used on appropriate timeframes (4-hour charts or lower), as the logic is specifically optimized for intraday trading analysis.

In summary, this tool transforms raw historical price data into a visual roadmap, helping traders identify potential "ceiling" prices and significant structural levels based on previous market behavior.

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
15 Views
0 Downloads
0 Favorites
Pivot_Resistance_Historical2
//+------------------------------------------------------------------+
//|                               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 5
#property indicator_color1 Lime
#property indicator_color2 Lime
#property indicator_color3 Lime
#property indicator_color4 Lime
#property indicator_color5 Yellow
#property indicator_width1 1
#property indicator_width2 1
#property indicator_width3 1
#property indicator_width4 1
#property indicator_width5 1

//---- input parameters

extern int  GMTshift=0;
extern color PivotNameColor = Yellow;
extern color HColor = Lime;
extern int fontsize=8;
extern int LabelShift=11;
extern int DaysDrawBack=15;
extern bool DisplayCurrentLines = true;

double R4Buffer[];
double R3Buffer[];
double R2Buffer[];
double R1Buffer[];
double PivotBuffer[];

double P, R1, R2, R3, R4;

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(5);
//---- indicators
   SetIndexStyle(0,DRAW_LINE, STYLE_DASH);
   SetIndexBuffer(0,R4Buffer);
   SetIndexStyle(1,DRAW_LINE, STYLE_DASH);
   SetIndexBuffer(1,R3Buffer);
   SetIndexStyle(2,DRAW_LINE, STYLE_DASH);
   SetIndexBuffer(2,R2Buffer);
   SetIndexStyle(3,DRAW_LINE, STYLE_DASH);
   SetIndexBuffer(3,R1Buffer);
   SetIndexStyle(4,DRAW_LINE, STYLE_DOT);
   SetIndexBuffer(4,PivotBuffer);
   
   SetIndexLabel(0,"R4");
   SetIndexLabel(1,"R3");
   SetIndexLabel(2,"R2");
   SetIndexLabel(3,"R1");
   SetIndexLabel(4,"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");
   ObjectDelete("ResR4");
   ObjectDelete("CamPivotLine");
   ObjectDelete("ResR1Line");
   ObjectDelete("ResR2Line");
   ObjectDelete("ResR3Line");
   ObjectDelete("ResR4Line");
//----
   return(0);
  }

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=DaysDrawBack*1440/Period();
   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 = P+2*(prev_high-prev_low);
R4 = P+3*(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;
      R4Buffer[cnt]=R4;
      R3Buffer[cnt]=R3;
      R2Buffer[cnt]=R2;
      R1Buffer[cnt]=R1;
      
   }

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

void DisplayLabels()
{

      SetLabel("CamPivot", "Pivot", P, PivotNameColor, LabelShift);
      SetLabel("ResR1", "R 1", R1, HColor, LabelShift);
      SetLabel("ResR2", "R 2", R2, HColor, LabelShift);
      SetLabel("ResR3", "R 3", R3, HColor, LabelShift);
      SetLabel("ResR4", "R 4", R4, HColor, LabelShift);

// Display Current Lines

     if (DisplayCurrentLines)
     {
      SetLine("CamPivotLine", P, PivotNameColor);
      SetLine("ResR1Line", R1, HColor);
      SetLine("ResR2Line", R2, HColor);
      SetLine("ResR3Line", R3, HColor);
      SetLine("ResR4Line", R4, HColor);
     }
     
}     
     
// put a label on the line   
void SetLabel(string textname, string text, double level, color col1, int LabelShift)
{
   double myLevel;
   int digits = MarketInfo(Symbol(), MODE_DIGITS);
   
   myLevel = NormalizeDouble(level, digits);
   
   

      if(ObjectFind(textname) != 0)
      {
      ObjectCreate(textname, OBJ_TEXT, 0, Time[LabelShift], myLevel);
      ObjectSetText(textname, "                                                 " + text + "   " + DoubleToStr(myLevel, digits), fontsize,"Arial",col1);
      }
      else
      {
         ObjectSetText(textname, "                                                 " + text + "   " + DoubleToStr(myLevel, digits), fontsize,"Arial",col1);
         ObjectMove(textname, 0, Time[LabelShift],myLevel);
      }
}
      
// create or move the horizontal line   
void SetLine(string linename, double level, color col1)
{

      if(ObjectFind(linename) != 0)
      {
      ObjectCreate(linename, OBJ_TREND, 0, Time[1], level, Time[0], level);
//      ObjectSet(linename, OBJPROP_STYLE, STYLE_DASHDOTDOT);
      ObjectSet(linename, OBJPROP_STYLE, STYLE_DASHDOTDOT);
      ObjectSet(linename, OBJPROP_COLOR, col1);
      ObjectSet(linename, OBJPROP_WIDTH, 1);
      }
      else
      {
      ObjectMove(linename, 1, Time[0], level);
      ObjectMove(linename, 0, Time[1], level);
      }
      


}
//+------------------------------------------------------------------+

Comments