camarilladtHistorical_V4_v1
Download scriptThis script is designed to provide traders with visual support and resistance levels based on the "Camarilla" charting theory. It automatically calculates and plots specific price thresholds on your trading chart to help identify potential areas of market reversal or breakout.
Core Functionality
The primary purpose of this tool is to take historical price data—specifically the High, Low, and Close prices from previous trading sessions—and use them to project a series of levels for the current day. These levels are categorized into:
- Pivot Point: The central equilibrium point of the previous day's price action.
- Resistance Levels (H3, H4, H5): These represent upper price boundaries where sellers may become active or where the price might struggle to break through.
- Support Levels (L3, L4, L5): These represent lower price boundaries where buyers may step in or where the price might find a "floor."
How the Logic Works
- Data Collection: The script scans back through your historical chart data to identify the opening and closing points of previous days. It specifically monitors the highest and lowest prices reached during those periods.
- Automated Calculation: Once it identifies the data from a completed day, it applies specific mathematical formulas (based on Camarilla theory) to determine where the support and resistance lines should sit for the current day.
- The H3-H5 levels are calculated based on the spread between the previous high and low, added to the previous closing price.
- The L3-L5 levels are calculated by subtracting specific proportions of that same spread from the previous close.
- Dynamic Updating: The script is designed to be "aware" of time. It detects when a new day begins and automatically resets the calculations to reflect the most recent daily data.
- Visual Feedback: To make the chart easier to read, the script draws these levels as distinct colored lines (Blue for Resistance, Red for Support, and Orange for the Pivot). Additionally, it places text labels on the right side of the chart so you can immediately identify which line is which without needing to guess.
User Constraints and Requirements
- Timeframe Limitation: The script includes a built-in safety check. It is designed for intraday trading and will trigger an alert if you attempt to apply it to charts with a timeframe larger than 4 hours (such as Daily or Weekly charts), as the Camarilla logic is specifically calibrated for smaller price movements.
- Timezone Synchronization: The script includes a setting to adjust for GMT shifts, ensuring that the "start" of a new day aligns correctly with your specific broker's server time.
Summary of Benefits
By using this script, you remove the manual labor of calculating complex price levels. It provides a consistent, automated way to see where the market "should" react based on historical volatility, allowing for clearer decision-making regarding entries and exits.
/*-----------------------------+
| |
| Shared by www.Aptrafx.com |
| |
+------------------------------*/
//+------------------------------------------------------------------+
//| camarilladtHistorical_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 7
#property indicator_color1 Blue
#property indicator_color2 Blue
#property indicator_color3 Blue
#property indicator_color4 Orange
#property indicator_color5 Red
#property indicator_color6 Red
#property indicator_color7 Red
#property indicator_width1 2
#property indicator_width2 2
#property indicator_width3 2
#property indicator_width4 1
#property indicator_width5 2
#property indicator_width6 2
#property indicator_width7 2
//---- input parameters
extern int GMTshift=0;
extern color HColor = Blue;
extern color LColor = Red;
extern int fontsize=10;
extern int LabelShift=20;
double H5Buffer[];
double H4Buffer[];
double H3Buffer[];
double PivotBuffer[];
double L3Buffer[];
double L4Buffer[];
double L5Buffer[];
double P, H3, H4, H5;
double L3, L4, L5;
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(7);
//---- indicators
SetIndexStyle(0,DRAW_LINE, 0,2,Blue);
SetIndexBuffer(0,H5Buffer);
SetIndexStyle(1,DRAW_LINE, 0,2,Blue);
SetIndexBuffer(1,H4Buffer);
SetIndexStyle(2,DRAW_LINE, 0,2,Blue);
SetIndexBuffer(2,H3Buffer);
SetIndexStyle(3,DRAW_LINE, 0,2,Orange);
SetIndexBuffer(3,PivotBuffer);
SetIndexStyle(4,DRAW_LINE, 0,2,Red);
SetIndexBuffer(4,L3Buffer);
SetIndexStyle(5,DRAW_LINE, 0,2,Red);
SetIndexBuffer(5,L4Buffer);
SetIndexStyle(6,DRAW_LINE, 0,2,Red);
SetIndexBuffer(6,L5Buffer);
SetIndexLabel(0,"H5");
SetIndexLabel(1,"H4");
SetIndexLabel(2,"H3");
SetIndexLabel(3,"Pivot");
SetIndexLabel(4,"L3");
SetIndexLabel(5,"L4");
SetIndexLabel(6,"L5");
//----
// IndicatorShortName("Cam Pivots");
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//---- TODO: add your code here
ObjectDelete("CamPivot");
ObjectDelete("SupL3");
ObjectDelete("ResH3");
ObjectDelete("SupL4");
ObjectDelete("ResH4");
ObjectDelete("SupL5");
ObjectDelete("ResH5");
Comment("");
//----
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;
Comment("Limit = ",limit," Bars = ",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;
//L1 = prev_close - ((prev_high - prev_low)*(D1));
//L2 = prev_close - ((prev_high - prev_low)*(D2));
L3 = prev_close - ((prev_high - prev_low)*(D3));
L4 = prev_close - ((prev_high - prev_low)*(D4));
L5 = prev_close - (H5 - 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;
L3Buffer[cnt]=L3;
L4Buffer[cnt]=L4;
L5Buffer[cnt]=L5;
}
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",Orange);
}
else
{
ObjectMove("CamPivot", 0, Time[20],P);
}
if(ObjectFind("SupL3") != 0)
{
ObjectCreate("SupL3", OBJ_TEXT, 0, 0, 0);
ObjectSetText("SupL3", " L 3",fontsize,"Arial",LColor);
}
else
{
ObjectMove("SupL3", 0, Time[20],L3);
}
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("SupL4") != 0)
{
ObjectCreate("SupL4", OBJ_TEXT, 0, 0, 0);
ObjectSetText("SupL4", " L 4",fontsize,"Arial",LColor);
}
else
{
ObjectMove("SupL4", 0, Time[20],L4);
}
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("SupL5") != 0)
{
ObjectCreate("SupL5", OBJ_TEXT, 0, 0, 0);
ObjectSetText("SupL5", " L 5",fontsize,"Arial",LColor);
}
else
{
ObjectMove("SupL5", 0, Time[20],L5);
}
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