cam_L2_L5_Historical_v2

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

This 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.
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
14 Views
0 Downloads
0 Favorites
cam_L2_L5_Historical_v2
/*-----------------------------+
|			       |
| 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