cam_H2_H5_Historical5

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

This script is designed for traders using the MetaTrader platform to visualize specific price levels known as Camarilla Pivots on their charts. These pivots are used by many technical analysts to identify potential support and resistance zones based on previous market activity.

Core Functionality

The primary goal of this tool is to automatically calculate and plot five distinct price levels (H2, H3, H4, H5, and the Pivot) onto a trading chart. These lines help traders see where "ceiling" and "floor" prices might occur during a trading session.

How the Logic Works

The script operates by looking at the price action of the previous trading day to determine where the levels should be placed for the current day. Here is the step-by-step breakdown:

  • Data Collection: The script identifies the highest price reached, the lowest price reached, and the closing price of the previous completed day.
  • Calculation Logic:
    • The Pivot: This is the central baseline, calculated by taking the average of the previous day's high, low, and close.
    • H-Levels (Resistance): The script uses specific mathematical coefficients (multipliers) to project four different resistance levels (H2 through H5). These levels vary in "strength," with higher numbers typically representing more significant price targets or barriers.
  • Dynamic Updates: As the current trading day progresses, the script constantly tracks the new highs and lows being made in real-time. This ensures that the calculations remain accurate based on the most recent data available.

Visual Features

  • Historical Mapping: The script doesn't just show today's levels; it draws these lines back into the past (based on a user-defined number of days), allowing traders to see how previous price levels behaved historically.
  • Visual Styles: The levels are rendered using different line styles (such as dotted or dashed) and colors to make them easy to distinguish at a glance.
  • On-Chart Labels: To ensure clarity, the script places text labels on the right side of the chart that display the specific name and price value of each level (e.g., "H3" followed by its actual numerical price).
  • Live Tracking: The tool can be configured to highlight the "Current Lines," which provides a clear visual of where the active trading levels sit for the live market session.

User Constraints

To ensure the math remains accurate and the visuals remain clean, the script includes a built-in safety check: it will only function correctly on timeframes of 4 hours or less. If a user attempts to view this on a daily or weekly chart, the script will provide an alert notifying them that the timeframe is too large for these specific calculations.

16 Views
0 Downloads
0 Favorites
cam_H2_H5_Historical5
//+------------------------------------------------------------------+
//|                                      cam_H2_H5_Historical_V4.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.)       |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#property indicator_chart_window
#property indicator_buffers 5
#property indicator_color1 Green
#property indicator_color2 Green
#property indicator_color3 Green
#property indicator_color4 Green
#property indicator_color5 Yellow
#property indicator_width1 1
#property indicator_width2 1
#property indicator_width3 1
#property indicator_width4 1
#property indicator_width5 1
#property indicator_style1 STYLE_DASHDOTDOT
#property indicator_style2 STYLE_DASHDOTDOT
#property indicator_style3 STYLE_DASHDOTDOT
#property indicator_style4 STYLE_DASHDOTDOT
#property indicator_style5 STYLE_DOT

//---- input parameters

extern int  GMTshift=0;
extern color HColor = Green;
extern int fontsize=8;
extern int LabelShift=11;
extern int DaysDrawBack=15;
extern bool DisplayH2 = true;
extern bool DisplayCurrentLines = true;

double H5Buffer[];
double H4Buffer[];
double H3Buffer[];
double H2Buffer[];
double PivotBuffer[];

double P, H2, H3, H4, H5;

double D1=0.091667;
double D2=0.183333;
double D3=0.2750;
double D4=0.55;

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_DASHDOTDOT);
   SetIndexBuffer(0,H5Buffer);
   SetIndexStyle(1,DRAW_LINE, STYLE_DASHDOTDOT);
   SetIndexBuffer(1,H4Buffer);
   SetIndexStyle(2,DRAW_LINE, STYLE_DASHDOTDOT);
   SetIndexBuffer(2,H3Buffer);
   SetIndexStyle(3,DRAW_LINE, STYLE_DASHDOTDOT);
   SetIndexBuffer(3,H2Buffer);
   SetIndexStyle(4,DRAW_LINE, STYLE_DOT);
   SetIndexBuffer(4,PivotBuffer);
   
   SetIndexLabel(0,"H5");
   SetIndexLabel(1,"H4");
   SetIndexLabel(2,"H3");
   SetIndexLabel(3,"H2");
   SetIndexLabel(4,"Pivot");

//----
//   IndicatorShortName("Cam H Pivots");
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//---- TODO: add your code here
   ObjectDelete("CamPivot");
   ObjectDelete("ResH2");
   ObjectDelete("ResH3");
   ObjectDelete("ResH4");
   ObjectDelete("ResH5");   
   ObjectDelete("CamPivotLine");
   ObjectDelete("ResH2Line");
   ObjectDelete("ResH3Line");
   ObjectDelete("ResH4Line");
   ObjectDelete("ResH5Line");   
//----
   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;

   if (counted_bars > DaysDrawBack*1440/Period()) counted_bars = DaysDrawBack*1440/Period();
   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
H5 = (prev_high/prev_low)*prev_close;
H4 = ((prev_high - prev_low)* D4) + prev_close;
H3 = ((prev_high - prev_low)* D3) + prev_close;
H2 = ((prev_high - prev_low) * D2) + prev_close;
//H1 = ((prev_high - prev_low) * D1) + prev_close;


		   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;
      H5Buffer[cnt]=H5;
      H4Buffer[cnt]=H4;
      H3Buffer[cnt]=H3;
      if (DisplayH2) H2Buffer[cnt]=H2;
      
   }

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

void DisplayLabels()
{

      SetLabel("CamPivot", "Pivot", P, Yellow, LabelShift);
      
      if (DisplayH2)
      {
        SetLabel("ResH2", "H 2", H2, HColor, LabelShift);
      }
      SetLabel("ResH3", "H 3", H3, HColor, LabelShift);
      SetLabel("ResH4", "H 4", H4, HColor, LabelShift);
      SetLabel("ResH5", "H 5", H5, HColor, LabelShift);

// Display Current Lines

     if (DisplayCurrentLines)
     {
      SetLine("CamPivotLine", P, Yellow);
      if (DisplayH2)
      {
        SetLine("ResH2Line", H2, HColor);
      }
      SetLine("ResH3Line", H3, HColor);
      SetLine("ResH4Line", H4, HColor);
      SetLine("ResH5Line", H5, 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