//+------------------------------------------------------------------+
//|                                        camarilladtHistorical.mq4 |
//|                      Copyright © 2005, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//| Modified to chart historical camarilla pivots                    |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#property indicator_chart_window
#property indicator_buffers 7
#property indicator_color1 Green
#property indicator_color2 Green
#property indicator_color3 Green
#property indicator_color4 Yellow
#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 = Green;
extern color LColor = Red;
extern int fontsize=10;

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 yesterday_high=0;
double yesterday_low=0;
double yesterday_close=0;
double cur_day=0;
double prev_day=0;
double day_high=0;
double day_low=0;
//string Pivot="CamPivot",SupL3="L3", ResH3="H3";
//string SupL4="L4", ResH4="H4", SupL5="L5", ResH5="H5";

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   IndicatorBuffers(7);
//---- indicators
   SetIndexStyle(0,DRAW_LINE, 0,2,Green);
   SetIndexBuffer(0,H5Buffer);
   SetIndexStyle(1,DRAW_LINE, 0,2,Green);
   SetIndexBuffer(1,H4Buffer);
   SetIndexStyle(2,DRAW_LINE, 0,2,Green);
   SetIndexBuffer(2,H3Buffer);
   SetIndexStyle(3,DRAW_LINE, STYLE_DASH, 1, Yellow);
   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");
   SetIndexDrawBegin(0,200);
   SetIndexDrawBegin(1,200);
   SetIndexDrawBegin(2,200);
   SetIndexDrawBegin(3,200);
   SetIndexDrawBegin(4,200);
   SetIndexDrawBegin(5,200);
   SetIndexDrawBegin(6,200);

//----
   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 (High[cnt+1]>day_high) day_high=High[cnt+1];
      if (Low[cnt+1]<day_low) day_low=Low[cnt+1];
	
      if (TimeDay(Time[cnt])!=TimeDay(Time[cnt+1]))
*/
   	if (DayOfWeek() == 1)
	   {
        cur_day = TimeDay(Time[cnt]- ((GMTshift-3)*3600));
	   }
	   else
	   {
        cur_day = TimeDay(Time[cnt]- (GMTshift*3600));
	   }
	
   	if (prev_day != cur_day)
   	{
	   	yesterday_close = Close[cnt+1];
		   yesterday_high = day_high;
		   yesterday_low = day_low;

		   if (DayOfWeek() != 0)
		   {
		     day_high = High[cnt];
		     day_low  = Low[cnt];
		   }

		   prev_day = cur_day;
	   }
	   if (DayOfWeek() != 0)
	   {
         if (High[cnt]>day_high)
         {
            day_high = High[cnt];
         }
         if (Low[cnt]<day_low)
         {
            day_low = Low[cnt];
         }
      }

P = (yesterday_high + yesterday_low + yesterday_close)/3;//Pivot
//---- To display all 8 Camarilla pivots remove comment symbols below and
// add the appropriate object functions below
H5 = (yesterday_high/yesterday_low)*yesterday_close;
H4 = ((yesterday_high - yesterday_low)* D4) + yesterday_close;
H3 = ((yesterday_high - yesterday_low)* D3) + yesterday_close;
//H2 = ((yesterday_high - yesterday_low) * D2) + yesterday_close;
//H1 = ((yesterday_high - yesterday_low) * D1) + yesterday_close;

//L1 = yesterday_close - ((yesterday_high - yesterday_low)*(D1));
//L2 = yesterday_close - ((yesterday_high - yesterday_low)*(D2));
L3 = yesterday_close - ((yesterday_high - yesterday_low)*(D3));
L4 = yesterday_close - ((yesterday_high - yesterday_low)*(D4));
L5 = yesterday_close - (H5 - yesterday_close);

      
//         day_low=Open[cnt]; day_high=Open[cnt];
      
      if(ObjectFind("CamPivot") != 0)
      {
        ObjectCreate("CamPivot", OBJ_TEXT, 0, 0,0);
        ObjectSetText("CamPivot", "                 Pivot",fontsize,"Arial",Yellow);
      }
      else
      {
        ObjectMove("CamPivot", 0, Time[cnt],P);
      }
      
      if(ObjectFind("SupL3") != 0)
      {
      ObjectCreate("SupL3", OBJ_TEXT, 0, 0, 0);
      ObjectSetText("SupL3", "      L 3",fontsize,"Arial",LColor);
      }
      else
      {
         ObjectMove("SupL3", 0, Time[cnt],L3);
      }
      
      if(ObjectFind("ResH3") != 0)
      {
      ObjectCreate("ResH3", OBJ_TEXT, 0, 0, 0);
      ObjectSetText("ResH3", "      H 3",fontsize,"Arial",HColor);
      }
      else
      {
         ObjectMove("ResH3", 0, Time[cnt],H3);
      }
      
      if(ObjectFind("SupL4") != 0)
      {
      ObjectCreate("SupL4", OBJ_TEXT, 0, 0, 0);
      ObjectSetText("SupL4", "      L 4",fontsize,"Arial",LColor);
      }
      else
      {
         ObjectMove("SupL4", 0, Time[cnt],L4);
      }
      
      if(ObjectFind("ResH4") != 0)
      {
      ObjectCreate("ResH4", OBJ_TEXT, 0, 0, 0);
      ObjectSetText("ResH4", "      H 4",fontsize,"Arial",HColor);
      }
      else
      {
         ObjectMove("ResH4", 0, Time[cnt],H4);
      }
      
      if(ObjectFind("SupL5") != 0)
      {
      ObjectCreate("SupL5", OBJ_TEXT, 0, 0, 0);
      ObjectSetText("SupL5", "      L 5",fontsize,"Arial",LColor);
      }
      else
      {
         ObjectMove("SupL5", 0, Time[cnt],L5);
      }
      
      if(ObjectFind("ResH5") != 0)
      {
      ObjectCreate("ResH5", OBJ_TEXT, 0, 0, 0);
      ObjectSetText("ResH5", "      H 5",fontsize,"Arial",HColor);
      }
      else
      {
         ObjectMove("ResH5", 0, Time[cnt],H5);
      }

//---  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;
      
   }

//----
   return(0);
  }
//+------------------------------------------------------------------+