cam_H2_H5_Historical
Download scriptThis script is designed for the MetaTrader 4 platform to automatically calculate and display historical "Camarilla Pivot" levels directly on your trading charts. These pivots are significant technical analysis markers used by traders to identify potential support and resistance areas based on previous price action.
How it Works
The logic of this tool is centered on analyzing daily price movements to project specific price points for the current trading day. Here is a breakdown of the process:
1. Data Collection and Day Tracking The script continuously scans historical price data, specifically looking at the High, Low, and Closing prices of previous days. It features internal logic to handle time shifts (GMT) and correctly identifies the transition between different trading days, including specialized handling for weekend gaps (Sunday/Monday).
2. Pivot Calculations Once the script identifies a new day, it uses the "Previous Day" data to calculate several key price levels:
- The Pivot Point: A central equilibrium price calculated as the average of the previous day's High, Low, and Close.
- H2, H3, H4, and H5 Levels: These are specific Camarilla resistance levels. They are calculated by taking the difference between the previous day’s High and Low and applying specific mathematical multipliers to the closing price.
3. Visual Display The script automatically draws these levels as lines on your chart so you can see where historical support and resistance occurred. It also dynamically places text labels (H2, H3, H4, H5, and Pivot) on the far right of the chart. These labels move automatically as new price data arrives, ensuring they remain visible at the current market price.
4. Usage Constraints To ensure accuracy, the script includes a built-in safety check: it will only function on timeframes of 4 hours or smaller. If you attempt to use it on a daily or weekly chart, the script will alert you that the timeframe is too large for the calculation logic to be meaningful.
Summary of Visuals
- Lime Lines: Represent the specific Camarilla resistance levels (H2 through H5).
- Yellow Dashed Line: Represents the central Pivot point.
- Labels: Provide clear identification of each price level on the live chart.
//+------------------------------------------------------------------+
//| 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 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 HColor = Lime;
extern int fontsize=12;
extern int LabelShift=20;
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, 0,1,Lime);
SetIndexBuffer(0,H5Buffer);
SetIndexStyle(1,DRAW_LINE, 0,1,Lime);
SetIndexBuffer(1,H4Buffer);
SetIndexStyle(2,DRAW_LINE, 0,1,Lime);
SetIndexBuffer(2,H3Buffer);
SetIndexStyle(3,DRAW_LINE, 0,1,Lime);
SetIndexBuffer(3,H2Buffer);
SetIndexStyle(4,DRAW_LINE, STYLE_DASH, 1, Yellow);
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");
//----
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
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;
H2Buffer[cnt]=H2;
}
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[20],P);
}
if(ObjectFind("ResH2") != 0)
{
ObjectCreate("ResH2", OBJ_TEXT, 0, 0, 0);
ObjectSetText("ResH2", " H 2",fontsize,"Arial",HColor);
}
else
{
ObjectMove("ResH2", 0, Time[20],H2);
}
if(ObjectFind("ResH3") != 0)
{
ObjectCreate("ResH3", OBJ_TEXT, 0, 0, 0);
ObjectSetText("ResH3", " H 3",fontsize,"Arial",HColor);
}
else
{
ObjectMove("ResH3", 0, Time[20],H3);
}
if(ObjectFind("ResH4") != 0)
{
ObjectCreate("ResH4", OBJ_TEXT, 0, 0, 0);
ObjectSetText("ResH4", " H 4",fontsize,"Arial",HColor);
}
else
{
ObjectMove("ResH4", 0, Time[20],H4);
}
if(ObjectFind("ResH5") != 0)
{
ObjectCreate("ResH5", OBJ_TEXT, 0, 0, 0);
ObjectSetText("ResH5", " H 5",fontsize,"Arial",HColor);
}
else
{
ObjectMove("ResH5", 0, Time[20],H5);
}
}
//+------------------------------------------------------------------+
Comments