cam_L2_L5_Historical_v2
Download scriptThis script is designed to automatically calculate and display specific technical analysis levels known as "Camarilla Pivots" directly on your trading charts. These pivots are used by many traders to identify potential support and resistance zones based on the price action of the previous trading day.
Core Functionality
The tool analyzes historical price data—specifically the High, Low, and Closing prices of preceding days—to project four distinct levels (labeled L2, L3, L4, and L5) onto your current chart. By visualizing these levels, traders can better anticipate where the market might react or reverse during a new trading session.
Key Logic and Features
- Automated Calculation: The script automatically tracks daily price movements. It identifies when a new day begins (accounting for various time zones via a customizable GMT shift) and instantly calculates the required pivot levels based on the previous day's range.
- Historical Mapping: Unlike some indicators that only show current data, this script is capable of plotting these levels historically across your chart history. This allows you to see how these levels behaved in past sessions to help validate your trading strategy.
- Visual Labels: To ensure the chart remains easy to read, the script automatically places text labels (L2 through L5) next to the plotted lines. These labels move dynamically with the price to stay clearly visible as new data points are generated.
- Safety & Compatibility Checks: The tool includes built-in logic to ensure it only runs on appropriate timeframes. If a user attempts to load the indicator on a timeframe larger than 4 hours, the script will provide an alert notification, as the daily pivot logic is optimized for intraday trading.
- Clean Environment: The script is programmed to tidy up your workspace; when you remove the indicator from your chart, it automatically deletes the drawn objects and labels so that no "ghost" lines are left behind.
/*-----------------------------+
| |
| Shared by www.Aptrafx.com |
| |
+------------------------------*/
//+------------------------------------------------------------------+
//| cam_L2_L5_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 4
#property indicator_color1 Red
#property indicator_color2 Red
#property indicator_color3 Red
#property indicator_color4 Red
#property indicator_width1 2
#property indicator_width2 2
#property indicator_width3 2
#property indicator_width4 2
//---- input parameters
extern int GMTshift=0;
extern color LColor = Red;
extern int fontsize=10;
extern int LabelShift=20;
double L2Buffer[];
double L3Buffer[];
double L4Buffer[];
double L5Buffer[];
double L2, 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(4);
//---- indicators
SetIndexStyle(0,DRAW_LINE, 0,2,Red);
SetIndexBuffer(0,L2Buffer);
SetIndexStyle(1,DRAW_LINE, 0,2,Red);
SetIndexBuffer(1,L3Buffer);
SetIndexStyle(2,DRAW_LINE, 0,2,Red);
SetIndexBuffer(2,L4Buffer);
SetIndexStyle(3,DRAW_LINE, 0, 2, Red);
SetIndexBuffer(3,L5Buffer);
SetIndexLabel(0,"L2");
SetIndexLabel(1,"L3");
SetIndexLabel(2,"L4");
SetIndexLabel(3,"L5");
//----
// IndicatorShortName("Cam Pivots");
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//---- TODO: add your code here
ObjectDelete("SupL3");
ObjectDelete("SupL2");
ObjectDelete("SupL4");
ObjectDelete("SupL5");
//----
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];
//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 - ((prev_high/prev_low)*prev_close - 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
L2Buffer[cnt]=L2;
L3Buffer[cnt]=L3;
L4Buffer[cnt]=L4;
L5Buffer[cnt]=L5;
}
if (cur_day == TimeDay(CurTime())) DisplayLabels();
//----
return(0);
}
void DisplayLabels()
{
if(ObjectFind("SupL2") != 0)
{
ObjectCreate("SupL2", OBJ_TEXT, 0, 0, 0);
ObjectSetText("SupL2", " L 2",fontsize,"Arial",LColor);
}
else
{
ObjectMove("SupL2", 0, Time[20],L2);
}
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("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("SupL5") != 0)
{
ObjectCreate("SupL5", OBJ_TEXT, 0, 0, 0);
ObjectSetText("SupL5", " L 5",fontsize,"Arial",LColor);
}
else
{
ObjectMove("SupL5", 0, Time[20],L5);
}
}
//+------------------------------------------------------------------+
Comments