Pivot_Mid_Resistance_Historical2

Author: Copyright � 2005, MetaQuotes Software Corp.
Pivot_Mid_Resistance_Historical2

This script is designed to provide traders with a visual representation of specific historical price levels on a trading chart. It specifically focuses on identifying "Mid Pivot Resistance" levels, which are derived from the Camarilla Pivot calculation method.

Core Logic and Functionality

Data Collection and Historical Analysis The script automatically scans back through your chart's history to identify the high, low, and closing prices of previous trading days. It specifically tracks these values to understand how the market behaved in the past, using this data to project potential price boundaries for the current day.

Calculation Methodology The tool operates by first calculating a central "Pivot" point based on the average of the previous day's high, low, and close prices. From this central pivot, it calculates four distinct resistance levels (R1 through R4).

The unique feature of this specific script is that instead of just showing those four standard resistance lines, it calculates the Mid Points between them. These are represented as:

  • MR1 (the midpoint between the Pivot and R1)
  • MR2 (the midpoint between R1 and R2)
  • MR3 (the midpoint between R2 and R3)
  • MR4 (the midpoint between R3 and R4)

Visual Representation The script handles the heavy lifting of drawing these levels on your chart automatically:

  • Historical Tracking: It plots these mid-pivot levels as dotted lines across the chart, allowing you to see how these "zones" were formed in previous sessions.
  • Dynamic Labeling: It places text labels on the far right of the chart, identifying each level (e.g., "MR1.5") and its exact price value so that the trader does not have to guess the numerical price.
  • Real-Time Updates: The script provides horizontal lines for the current day's levels, which update dynamically as new price data arrives.

User Constraints and Compatibility To ensure accuracy, the logic includes a built-in safety check: it is designed to work on charts with a timeframe of 4 hours or less. If a user attempts to run it on a higher timeframe (like a Daily chart), the script will alert the user that the calculations may not be reliable for that scale.

Summary for the Trader

In simple terms, this tool takes complex daily price extremes and breaks them down into smaller, more granular "mid-points." By visualizing these mid-pivot resistance levels, it helps traders identify potential areas of support or resistance where the price might stall, react, or reverse during a trading session.

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
13 Views
0 Downloads
0 Favorites
Pivot_Mid_Resistance_Historical2
//+----------------------------------------------------------------------+
//|                           Mid 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 Mid 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 Blue
#property indicator_color2 Blue
#property indicator_color3 Blue
#property indicator_color4 Blue
#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 = Blue;
extern int fontsize=8;
extern int LabelShift=13;
extern int DaysDrawBack=15;
extern bool DisplayCurrentLines = true;

double MR4Buffer[];
double MR3Buffer[];
double MR2Buffer[];
double MR1Buffer[];
double PivotBuffer[];

double P, MR1, MR2, MR3, MR4, 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_DOT);
   SetIndexBuffer(0,MR4Buffer);
   SetIndexStyle(1,DRAW_LINE, STYLE_DOT);
   SetIndexBuffer(1,MR3Buffer);
   SetIndexStyle(2,DRAW_LINE, STYLE_DOT);
   SetIndexBuffer(2,MR2Buffer);
   SetIndexStyle(3,DRAW_LINE, STYLE_DOT);
   SetIndexBuffer(3,MR1Buffer);
   SetIndexStyle(4,DRAW_LINE, STYLE_DOT);
   SetIndexBuffer(4,PivotBuffer);
   
   SetIndexLabel(0,"MR4");
   SetIndexLabel(1,"MR3");
   SetIndexLabel(2,"MR2");
   SetIndexLabel(3,"MR1");
   SetIndexLabel(4,"Pivot");

   
//----
//   IndicatorShortName("Resistance Pivots");
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//---- TODO: add your code here
   ObjectDelete("CamPivot");
   ObjectDelete("ResMR1");
   ObjectDelete("ResMR2");
   ObjectDelete("ResMR3");
   ObjectDelete("ResMR4");
   ObjectDelete("CamPivotLine");
   ObjectDelete("ResMR1Line");
   ObjectDelete("ResMR2Line");
   ObjectDelete("ResMR3Line");
   ObjectDelete("ResMR4Line");
//----
   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);
MR1 = (P+R1)/2;
MR2 = (R1+R2)/2;
MR3 = (R2+R3)/2;
MR4 = (R3+R4)/2;


		   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;
      MR4Buffer[cnt]=MR4;
      MR3Buffer[cnt]=MR3;
      MR2Buffer[cnt]=MR2;
      MR1Buffer[cnt]=MR1;
      
   }

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

void DisplayLabels()
{

      SetLabel("CamPivot", "Pivot", P, PivotNameColor, LabelShift);
      SetLabel("ResMR1", "MR0.5", MR1, HColor, LabelShift);
      SetLabel("ResMR2", "MR1.5", MR2, HColor, LabelShift);
      SetLabel("ResMR3", "MR2.5", MR3, HColor, LabelShift);
      SetLabel("ResMR4", "MR3.5", MR4, HColor, LabelShift);

// Display Current Lines

     if (DisplayCurrentLines)
     {
      SetLine("CamPivotLine", P, PivotNameColor);
      SetLine("ResMR1Line", MR1, HColor);
      SetLine("ResMR2Line", MR2, HColor);
      SetLine("ResMR3Line", MR3, HColor);
      SetLine("ResMR4Line", MR4, 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