Weekly_Pivots_TZ





//+------------------------------------------------------------------+
//|                                             Weekly_Pivots_TZ.mq4 |
//|                                                                  |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright ""
#property link      ""

#property indicator_chart_window

/* Introduction:
   TZ = Time Zone
   Calculation of pivot and similar levels based on TZ.
   If you want to modify the colours, please scroll down to line
   200 and below (where it says "Calculate Levels") and change
   the colors.  Valid color names can be obtained by placing
   the curor on a color name (e.g. somewhere in the word "DarkGray"
   and pressing F1).
   
   TZ Inputs:

   LocalTZ: TZ for which MT4 shows your local time, e.g. 1 or 2 for Europe
            (GMT+1 or GMT+2 (daylight savings time). Use zero for no
            adjustment. The MetaQuotes demo server uses GMT +2.
                  
   DestinationTZ:  TZ for the session from which to calculate the levels
            (e.g. 1 or 2 for the European session (without or with daylight
            savings time). Use zero for GMT
           
   Example: If your MT server is living in the EST (Eastern Standard Time, 
            GMT-5) zone and want to calculate the levels for the London trading
            session (European time in summer GMT+1), then enter -5 for 
            LocalTZ, 1 for DestinationTZ. 
            If you want to know whether your servers are GMT time Google "GMT
            time now" and compare that time to your active MetaTrader charts
            The number of hours that your charts are ahead or behind is your
            local time setting(for example the demo server from MetaQuotes always
            lives in CDT(+2) or CET (+1), no matter what the clock on your wall
            says.
            If in doubt, leave everything to zero.
*/

extern int LocalTZ= 0;
extern int DestinationTZ= -0;

extern int LineType= 1;
extern int LineWidth= 0;

extern int VLineStyle= 0;
extern int VLineThickness= 3;

extern bool ShowComment = true;
extern bool ShowHighLowOpen = true;
extern bool ShowSweetSpots = false;
extern bool ShowPivots = true;
extern bool ShowMidPitvot = false;
extern bool ShowFibos= true;
extern bool ShowCamarilla = false;
extern bool ShowLevelPrices = true;

extern int BarForLabels= 0;     // number of bars from right, where lines labels will be shown

extern bool DebugLogger = false;

int TradingHoursFrom= 0;
int TradingHoursTo= 24;
int PIPplaces; //decimal PIPplaces for symbol's price       



//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
{
	deinit();
	if (Ask>10) PIPplaces=2; else PIPplaces=4;
   Print("Period= ", Period());
   return(0);
}

int deinit()
{
   int total_object_count= ObjectsTotal();
   string pivotname;
   
   for (int i= total_object_count; i>=0; i--) {
      string name= ObjectName(i);
    
      if (StringSubstr(name,0,7)=="[PIVOT]") 
         ObjectDelete(name);
   }
   	pivotname=Symbol()+"st";
   	GlobalVariableDel(pivotname);
   	pivotname=Symbol()+"p";
   	GlobalVariableDel(pivotname);
   	pivotname=Symbol()+"r1";
   	GlobalVariableDel(pivotname);
   	pivotname=Symbol()+"r2";
   	GlobalVariableDel(pivotname);
   	pivotname=Symbol()+"r3";
   	GlobalVariableDel(pivotname);
   	pivotname=Symbol()+"s1";
   	GlobalVariableDel(pivotname);
   	pivotname=Symbol()+"s2";
   	GlobalVariableDel(pivotname);
   	pivotname=Symbol()+"s3";
   	GlobalVariableDel(pivotname);
   	pivotname=Symbol()+"yh";
   	GlobalVariableDel(pivotname);
   	pivotname=Symbol()+"to";
   	GlobalVariableDel(pivotname);
   	pivotname=Symbol()+"yl";
   	GlobalVariableDel(pivotname);
   	pivotname=Symbol()+"ds1";
   	GlobalVariableDel(pivotname);
   	pivotname=Symbol()+"ds2";
   	GlobalVariableDel(pivotname);
   	pivotname=Symbol()+"flm618";
   	GlobalVariableDel(pivotname);
   	pivotname=Symbol()+"flm382";
   	GlobalVariableDel(pivotname);
   	pivotname=Symbol()+"flp382";
   	GlobalVariableDel(pivotname);
   	pivotname=Symbol()+"flp5";
   	GlobalVariableDel(pivotname);
   	pivotname=Symbol()+"fhm382";
   	GlobalVariableDel(pivotname);
   	pivotname=Symbol()+"fhp382";
   	GlobalVariableDel(pivotname);
   	pivotname=Symbol()+"fhp618";
   	GlobalVariableDel(pivotname);
   	pivotname=Symbol()+"h3";
   	GlobalVariableDel(pivotname);
   	pivotname=Symbol()+"h4";
   	GlobalVariableDel(pivotname);
   	pivotname=Symbol()+"l3";
   	GlobalVariableDel(pivotname);
   	pivotname=Symbol()+"l4";
   	GlobalVariableDel(pivotname);
   	pivotname=Symbol()+"mr3";
   	GlobalVariableDel(pivotname);
   	pivotname=Symbol()+"mr2";
   	GlobalVariableDel(pivotname);
   	pivotname=Symbol()+"mr1";
   	GlobalVariableDel(pivotname);
   	pivotname=Symbol()+"ms1";
   	GlobalVariableDel(pivotname);
   	pivotname=Symbol()+"ms2";
   	GlobalVariableDel(pivotname);
   	pivotname=Symbol()+"ms3";
   	GlobalVariableDel(pivotname);

   
   return(0);
}
  
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
{
   static datetime timesincelastupdate= 0;
   static datetime mostrecenttimeframe= 0;
   
   datetime start_of_week= 0,
            start_of_last_week= 0;

   double this_weeks_high= 0,
            this_weeks_low= 0,
            this_weeks_open= 0,
            last_weeks_high= 0,
            last_weeks_open= 0,
            last_weeks_low= 0,
            last_weeks_close= 0;

   int gotofirstbarofthisweek= 0,
       gotofirstbaroflastweek= 0,
       gotolastbaroflastweek= 0;

   
   // Will not update these too often   
   if (TimeCurrent()-timesincelastupdate<60 && Period()==mostrecenttimeframe)
      return (0);
      
   mostrecenttimeframe= Period();
   timesincelastupdate= TimeCurrent();
   
   //---- period greater than weekly charts
   if(Period() > 10080) {
      Alert("Error - Chart period is greater than 1 week.");
      return(-1); // then exit
   }
if (DayOfWeek()==0|DayOfWeek()==1)
   {if (DebugLogger) {
      Print("Local time current bar:", TimeToStr(Time[0]));
      Print("Dest  time current bar: ", TimeToStr(Time[0]- (LocalTZ - DestinationTZ)*3600), ", TZDifEntered= ", LocalTZ - DestinationTZ);
   }}

if (DayOfWeek()==0|DayOfWeek()==1)
   {   string pivotname; double pivotalvalue;

   // Determine which hour bars make this week and last week
   ComputeDayIndices(LocalTZ, DestinationTZ, gotofirstbarofthisweek, gotofirstbaroflastweek, gotolastbaroflastweek);

   start_of_week= Time[gotofirstbarofthisweek];  // datetime (x-value) for labels on horizontal bars
   pivotname=Symbol()+"st";
   pivotalvalue=start_of_week;
   GlobalVariableSet(pivotname,pivotalvalue);
   start_of_last_week= Time[gotofirstbaroflastweek];  // datetime (x-value) for labels on horizontal bars

   

   // 
   // walk forward through last week's start and collect high/lows within the same week
   //
   last_weeks_high= -99999;  // not high enough to remain alltime high
   last_weeks_low=  +99999;  // not low enough to remain alltime low
   
   for (int gotobar=gotofirstbaroflastweek; gotobar>=gotolastbaroflastweek; gotobar--) {

      if (last_weeks_open==0)  // grab first value for open
         last_weeks_open= Open[gotobar];                      
      
      last_weeks_high= MathMax(High[gotobar], last_weeks_high);
      last_weeks_low= MathMin(Low[gotobar], last_weeks_low);
      
      // overwrite close in loop until we leave with the last iteration's value
      last_weeks_close= Close[gotobar];
   }

   

   // 
   // walk forward through this week and collect high/lows within the same week
   //
   this_weeks_open= Open[gotofirstbarofthisweek];  // should be open of this week start trading hour

   this_weeks_high= -99999; // not high enough to remain alltime high
   this_weeks_low=  +99999; // not low enough to remain alltime low
   for (int j= gotofirstbarofthisweek; j>=0; j--) {
      this_weeks_high= MathMax(this_weeks_high, High[j]);
      this_weeks_low= MathMin(this_weeks_low, Low[j]);
   }
      
   
   
   // draw the vertical bars that marks the time span
   double level= (last_weeks_high + last_weeks_low + last_weeks_close + this_weeks_open) / 4;
   SetTimeLine("LastWeeksStart", "LastWeek", gotofirstbaroflastweek, RoyalBlue, level - 4*Point);
   SetTimeLine("LastWeeksEnd", "ThisWeek", gotofirstbarofthisweek, RoyalBlue, level - 4*Point);
   
   
   
   if (DebugLogger) 
      Print("Timezoned values: lwo= ", last_weeks_open, ", lwc=", last_weeks_close, ", lwhigh= ", last_weeks_high, ", lwlow== ", last_weeks_low, ", tweo= ", this_weeks_open);

}
   //
   //---- Calculate Levels
   //
if (DayOfWeek()==0|DayOfWeek()==1)
{
   double p, q, d, r1,r2,r3, s1,s2,s3;
   
   d = (this_weeks_high - this_weeks_low);
   q = (last_weeks_high - last_weeks_low);
   p = (last_weeks_high + last_weeks_low + last_weeks_close + this_weeks_open)/4;
   p=NormalizeDouble(p,PIPplaces);
   pivotname=Symbol()+"p";
   pivotalvalue=p;
   GlobalVariableSet(pivotname,pivotalvalue);
   
   r1 = (2*p)-last_weeks_low;
   r1=NormalizeDouble(r1,PIPplaces);
   pivotname=Symbol()+"r1";
   pivotalvalue=r1;
   GlobalVariableSet(pivotname,pivotalvalue);
   r2 = p+(last_weeks_high - last_weeks_low);              //	r2 = p-s1+r1;
   r2=NormalizeDouble(r2,PIPplaces);
   pivotname=Symbol()+"r2";
   pivotalvalue=r2;
   GlobalVariableSet(pivotname,pivotalvalue);
	r3 = (2*p)+(last_weeks_high-(2*last_weeks_low));
   r3=NormalizeDouble(r3,PIPplaces);
   pivotname=Symbol()+"r3";
   pivotalvalue=r3;
   GlobalVariableSet(pivotname,pivotalvalue);
   s1 = (2*p)-last_weeks_high;
   s1=NormalizeDouble(s1,PIPplaces);
   pivotname=Symbol()+"s1";
   pivotalvalue=s1;
   GlobalVariableSet(pivotname,pivotalvalue);
   s2 = p-(last_weeks_high - last_weeks_low);              //	s2 = p-r1+s1;
   s2=NormalizeDouble(s2,PIPplaces);
   pivotname=Symbol()+"s2";
   pivotalvalue=s2;
   GlobalVariableSet(pivotname,pivotalvalue);
	s3 = (2*p)-((2* last_weeks_high)-last_weeks_low);
   s3=NormalizeDouble(s3,PIPplaces);
   pivotname=Symbol()+"s3";
   pivotalvalue=s3;
   GlobalVariableSet(pivotname,pivotalvalue);


   //---- High/Low, Open
   if (ShowHighLowOpen) {
      EstablishLevel("LW\'s High", last_weeks_high,  MediumBlue, VLineStyle, VLineThickness, start_of_last_week);
      EstablishLevel("TW\'s Open", this_weeks_open,      MediumBlue, LineType, LineWidth, start_of_week);
      EstablishLevel("LW\'s Low", last_weeks_low,    MediumBlue, VLineStyle, VLineThickness, start_of_last_week);

   	pivotname=Symbol()+"lwhigh";
   	pivotalvalue=last_weeks_high;
   	GlobalVariableSet(pivotname,pivotalvalue);
   	pivotname=Symbol()+"tweo";
   	pivotalvalue=this_weeks_open;
   	GlobalVariableSet(pivotname,pivotalvalue);
   	pivotname=Symbol()+"lwlow";
   	pivotalvalue=last_weeks_low;
   	GlobalVariableSet(pivotname,pivotalvalue);
   }


   //---- High/Low, Open
   if (ShowSweetSpots) {
      int ssp1, ssp2;
      double ds1, ds2;
      
      ssp1= Bid / Point;
      ssp1= ssp1 - ssp1%50;
      ssp2= ssp1 + 50;
      
      ds1= ssp1*Point;
      ds2= ssp2*Point;
      
      EstablishLevel(DoubleToStr(ds1,PIPplaces), ds1,  Maroon, LineType, LineWidth, Time[10]);
      EstablishLevel(DoubleToStr(ds2,PIPplaces), ds2,  Maroon, LineType, LineWidth, Time[10]);

   	pivotname=Symbol()+"ds1";
   	pivotalvalue=ds1;
   	GlobalVariableSet(pivotname,pivotalvalue);
   	pivotname=Symbol()+"ds2";
   	pivotalvalue=ds2;
   	GlobalVariableSet(pivotname,pivotalvalue);
   }

   //---- Pivot Lines
   if (ShowPivots==true) {
      EstablishLevel("R1", r1,      Red, VLineStyle, VLineThickness, start_of_week);
      EstablishLevel("R2", r2,      Red, VLineStyle, VLineThickness, start_of_week);
      EstablishLevel("R3", r3,      Red, VLineStyle, VLineThickness, start_of_week);
      
      EstablishLevel("Pivot", p,    Black, VLineStyle, VLineThickness, start_of_week);

      EstablishLevel("S1", s1,      Green, VLineStyle, VLineThickness, start_of_week);
      EstablishLevel("S2", s2,      Green, VLineStyle, VLineThickness, start_of_week);
      EstablishLevel("S3", s3,      Green, VLineStyle, VLineThickness, start_of_week);
   }
   
   //---- Fibos of yesterday's range
   if (ShowFibos) {
      // .618, .5 and .382
      EstablishLevel("Low - 61.8%", last_weeks_low - q*0.618,      DarkGoldenrod, LineType, LineWidth, start_of_week);
      EstablishLevel("Low - 38.2%", last_weeks_low - q*0.382,      DarkOrange, LineType, LineWidth, start_of_week);
      EstablishLevel("Low + 38.2%", last_weeks_low + q*0.382,      DarkOrange, LineType, LineWidth, start_of_week);
      EstablishLevel("LowHigh 50%", last_weeks_low + q*0.5,        Orange, VLineStyle, LineWidth, start_of_week);
      EstablishLevel("High - 38.2%", last_weeks_high - q*0.382,    DarkOrange, LineType, LineWidth, start_of_week);
      EstablishLevel("High + 38.2%", last_weeks_high + q*0.382,    DarkOrange, LineType, LineWidth, start_of_week);
      EstablishLevel("High + 61.8%", last_weeks_high +  q*0.618,   DarkGoldenrod, LineType, LineWidth, start_of_week);

   	pivotname=Symbol()+"flm618";
   	pivotalvalue=last_weeks_low - q*0.618;
   	pivotalvalue=NormalizeDouble(pivotalvalue,PIPplaces);
   	GlobalVariableSet(pivotname,pivotalvalue);
   	pivotname=Symbol()+"flm382";
   	pivotalvalue=last_weeks_low - q*0.382;
   	pivotalvalue=NormalizeDouble(pivotalvalue,PIPplaces);
   	GlobalVariableSet(pivotname,pivotalvalue);
   	pivotname=Symbol()+"flp382";
   	pivotalvalue=last_weeks_low + q*0.382;
   	pivotalvalue=NormalizeDouble(pivotalvalue,PIPplaces);
   	GlobalVariableSet(pivotname,pivotalvalue);
   	pivotname=Symbol()+"flp5";
   	pivotalvalue=last_weeks_low + q*0.5;
   	pivotalvalue=NormalizeDouble(pivotalvalue,PIPplaces);
   	GlobalVariableSet(pivotname,pivotalvalue);
   	pivotname=Symbol()+"fhm382";
   	pivotalvalue=last_weeks_high - q*0.382;
   	pivotalvalue=NormalizeDouble(pivotalvalue,PIPplaces);
   	GlobalVariableSet(pivotname,pivotalvalue);
   	pivotname=Symbol()+"fhp382";
   	pivotalvalue=last_weeks_high + q*0.382;
   	pivotalvalue=NormalizeDouble(pivotalvalue,PIPplaces);
   	GlobalVariableSet(pivotname,pivotalvalue);
   	pivotname=Symbol()+"fhp618";
   	pivotalvalue=last_weeks_high + q*0.618;
   	pivotalvalue=NormalizeDouble(pivotalvalue,PIPplaces);
   	GlobalVariableSet(pivotname,pivotalvalue);

   }


   //----- Camarilla Lines
   if (ShowCamarilla==true) {
      
      double h4,h3,l4,l3;
	   h4 = (q*0.55)+last_weeks_close;
	   h3 = (q*0.27)+last_weeks_close;
	   l3 = last_weeks_close-(q*0.27);	
	   l4 = last_weeks_close-(q*0.55);	
	   
      EstablishLevel("H3", h3,   Khaki, LineType, LineWidth, start_of_week);
      EstablishLevel("H4", h4,   Khaki, LineType, LineWidth, start_of_week);
      EstablishLevel("L3", l3,   Khaki, LineType, LineWidth, start_of_week);
      EstablishLevel("L4", l4,   Khaki, LineType, LineWidth, start_of_week);

   	pivotname=Symbol()+"h3";
   	pivotalvalue=h3;
   	pivotalvalue=NormalizeDouble(pivotalvalue,PIPplaces);
   	GlobalVariableSet(pivotname,pivotalvalue);
   	pivotname=Symbol()+"h4";
   	pivotalvalue=h4;
   	pivotalvalue=NormalizeDouble(pivotalvalue,PIPplaces);
   	GlobalVariableSet(pivotname,pivotalvalue);
   	pivotname=Symbol()+"l3";
   	pivotalvalue=l3;
   	pivotalvalue=NormalizeDouble(pivotalvalue,PIPplaces);
   	GlobalVariableSet(pivotname,pivotalvalue);
   	pivotname=Symbol()+"l4";
   	pivotalvalue=l4;
   	pivotalvalue=NormalizeDouble(pivotalvalue,PIPplaces);
   	GlobalVariableSet(pivotname,pivotalvalue);
   }


   //------ Midpoints Pivots 
   if (ShowMidPitvot==true) {
      // mid levels between pivots
      EstablishLevel("MR3", (r2+r3)/2,    Red, LineType, LineWidth, start_of_week);
      EstablishLevel("MR2", (r1+r2)/2,    Red, LineType, LineWidth, start_of_week);
      EstablishLevel("MR1", (p+r1)/2,     Red, LineType, LineWidth, start_of_week);
      EstablishLevel("MS1", (p+s1)/2,     Green, LineType, LineWidth, start_of_week);
      EstablishLevel("MS2", (s1+s2)/2,    Green, LineType, LineWidth, start_of_week);
      EstablishLevel("MS3", (s2+s3)/2,    Green, LineType, LineWidth, start_of_week);

   	pivotname=Symbol()+"mr3";
   	pivotalvalue=(r2+r3)/2;
   	pivotalvalue=NormalizeDouble(pivotalvalue,PIPplaces);
   	GlobalVariableSet(pivotname,pivotalvalue);
   	pivotname=Symbol()+"mr2";
   	pivotalvalue=(r1+r2)/2;
   	pivotalvalue=NormalizeDouble(pivotalvalue,PIPplaces);
   	GlobalVariableSet(pivotname,pivotalvalue);
   	pivotname=Symbol()+"mr1";
   	pivotalvalue=(p+r1)/2;
   	pivotalvalue=NormalizeDouble(pivotalvalue,PIPplaces);
   	GlobalVariableSet(pivotname,pivotalvalue);
   	pivotname=Symbol()+"ms1";
   	pivotalvalue=(p+s1)/2;
   	pivotalvalue=NormalizeDouble(pivotalvalue,PIPplaces);
   	GlobalVariableSet(pivotname,pivotalvalue);
   	pivotname=Symbol()+"ms2";
   	pivotalvalue=(p+s2)/2;
   	pivotalvalue=NormalizeDouble(pivotalvalue,PIPplaces);
   	GlobalVariableSet(pivotname,pivotalvalue);
   	pivotname=Symbol()+"ms3";
   	pivotalvalue=(p+s3)/2;
   	pivotalvalue=NormalizeDouble(pivotalvalue,PIPplaces);
   	GlobalVariableSet(pivotname,pivotalvalue);
   }


   //------ Comment for upper left corner
   if (ShowComment) {
      string comment= ""; 
      
      comment= comment + "-- The Latham Group ---\n";
      comment= comment + "Range: Yesterday "+DoubleToStr(MathRound(q/Point),0)   +" PIPplaces, Today "+DoubleToStr(MathRound(d/Point),0)+" PIPplaces" + "\n";
      comment= comment + "Highs: Yesterday "+DoubleToStr(last_weeks_high,PIPplaces)  +", Today "+DoubleToStr(this_weeks_high,PIPplaces) +"\n";
      comment= comment + "Lows:  Yesterday "+DoubleToStr(last_weeks_low,PIPplaces)   +", Today "+DoubleToStr(this_weeks_low,PIPplaces)  +"\n";
      comment= comment + "Close: Yesterday "+DoubleToStr(last_weeks_close,PIPplaces) + "\n";
   // comment= comment + "Pivot: " + DoubleToStr(p,PIPplaces) + ", S1/2/3: " + DoubleToStr(s1,PIPplaces) + "/" + DoubleToStr(s2,PIPplaces) + "/" + DoubleToStr(s3,PIPplaces) + "\n" ;
   // comment= comment + "Fibos: " + DoubleToStr(last_weeks_low + q*0.382, PIPplaces) + ", " + DoubleToStr(last_weeks_high - q*0.382,PIPplaces) + "\n";
      
      Comment(comment); 
   }

   return(0);
}
}

 
//+------------------------------------------------------------------+
//| Compute index of first/last bar of last week and this week       |
//+------------------------------------------------------------------+

void ComputeDayIndices(int TZLocal, int TZDest, int &gotofirstbarofthisweek, int &gotofirstbaroflastweek, int &gotolastbaroflastweek)
{     
if (DayOfWeek()==0|DayOfWeek()==1)
   {int TZDifEntered= TZLocal - TZDest,
       TZdifSeconds= TZDifEntered*3600,
       weekminutes= 7 * 24 * 60,
       barsperweek= weekminutes/Period();
   
   int dayofweektoday= TimeDayOfWeek(Time[0] - TZdifSeconds),  // what day is today in the dest timezone?
       FindOneWeekBack= -1;
}
   //
   // due to gaps in the data, and shift of time around weekends (due 
   // to time zone) it is not as easy as to just look back for a bar 
   // with 00:00 time
   //
   
   gotofirstbarofthisweek= 0;
   gotofirstbaroflastweek= 0;
   gotolastbaroflastweek= 0;
       
   switch (dayofweektoday) {
      case 6: // sat
      case 5: // sun
      case 4: // mon
      case 3: // sun
      case 2: // mon

            FindOneWeekBack= 0|1; // last week in terms of trading was Monday or Sunday that the pivots were being calculated upon.
            break;
   }
if (DayOfWeek()==0|DayOfWeek()==1)
   {if (DebugLogger) {
      Print("Dayofweektoday= ", dayofweektoday);
      Print("Dayofweekyesterday= ", FindOneWeekBack);
   }
   }
       
       
   // search  backwards for the last occrrence (backwards) of the week this week (this week's first bar)
if (DayOfWeek()==0|DayOfWeek()==1)
   {for (int i=1; i<=barsperweek+1; i++) {
      datetime timet= Time[i] - TZdifSeconds;
      if (TimeDayOfWeek(timet)!=dayofweektoday) {
         gotofirstbarofthisweek= i-1;
         break;
      }
   }}
   

   // search  backwards for the first occrrence (backwards) of the weekday we are looking for (lastweek's last bar)
if (DayOfWeek()==0|DayOfWeek()==1)
   {for (int j= 0; j<=2*barsperweek+1; j++) {
      datetime timey= Time[i+j] - TZdifSeconds;
      if (TimeDayOfWeek(timey)==FindOneWeekBack) {  // ignore saturdays (a Sa may happen due to TZ conversion)
         gotolastbaroflastweek= i+j;
         break;
      }
   }}


   // search  backwards for the first occurrence of this day before yesterday (to determine this week's first bar)
if (DayOfWeek()==0|DayOfWeek()==1)
   {for (j= 1; j<=barsperweek; j++) {
      datetime timey2= Time[gotolastbaroflastweek+j] - TZdifSeconds;
      if (TimeDayOfWeek(timey2)!=FindOneWeekBack) {  // ignore saturdays (a Sa may happen due to TZ conversion)
         gotofirstbaroflastweek= gotolastbaroflastweek+j-1;
         break;
      }
   }}

if (DayOfWeek()==0|DayOfWeek()==1)
   {if (DebugLogger) {
      Print("Dest time zone\'s current day starts:", TimeToStr(Time[gotofirstbarofthisweek]), 
                                                      " (local time), gotobar= ", gotofirstbarofthisweek);

      Print("Dest time zone\'s previous day starts:", TimeToStr(Time[gotofirstbaroflastweek]), 
                                                      " (local time), gotobar= ", gotofirstbaroflastweek);
      Print("Dest time zone\'s previous day ends:", TimeToStr(Time[gotolastbaroflastweek]), 
                                                      " (local time), gotobar= ", gotolastbaroflastweek);
   }
   }
}


//+------------------------------------------------------------------+
//| Helper                                                           |
//+------------------------------------------------------------------+
void EstablishLevel(string text, double level, color col1, int LineType, int thickness, datetime start_of_week)
{
   int PIPplaces= PIPplaces;
   string labelname= "[PIVOT] " + text + " Label",
          linename= "[PIVOT] " + text + " Line",
          pricelabel; 

   // create or move the horizontal line   
   if (ObjectFind(linename) != 0) {
      ObjectCreate(linename, OBJ_TREND, 0, start_of_week, level, Time[0],level);
      ObjectSet(linename, OBJPROP_STYLE, LineType);
      ObjectSet(linename, OBJPROP_COLOR, col1);
      ObjectSet(linename, OBJPROP_WIDTH, thickness);
   }
   else {
      ObjectMove(linename, 1, Time[0],level);
      ObjectMove(linename, 0, start_of_week, level);
   }
   

   // put a label on the line   
   if (ObjectFind(labelname) != 0) {
      ObjectCreate(labelname, OBJ_TEXT, 0, MathMin(Time[BarForLabels], start_of_week + 2*Period()*60), level);
   }
   else {
      ObjectMove(labelname, 0, MathMin(Time[BarForLabels], start_of_week+2*Period()*60), level);
   }

   pricelabel= " " + text;
   if (ShowLevelPrices && StrToInteger(text)==0) 
      pricelabel= pricelabel + ": "+DoubleToStr(level, PIPplaces);
   
   ObjectSetText(labelname, pricelabel, 8, "Arial", DarkSlateBlue);
}
      

//+------------------------------------------------------------------+
//| Helper                                                           |
//+------------------------------------------------------------------+
void SetTimeLine(string objname, string text, int goto, color col1, double vleveltext) 
{
   string name= "[PIVOT] " + objname;
   int x= Time[goto];

   if (ObjectFind(name) != 0) 
      ObjectCreate(name, OBJ_TREND, 0, x, 0, x, 100);
   else {
      ObjectMove(name, 0, x, 0);
      ObjectMove(name, 1, x, 100);
   }
   
   ObjectSet(name, OBJPROP_STYLE, STYLE_DOT);
   ObjectSet(name, OBJPROP_COLOR, DarkGray);
   
   if (ObjectFind(name + " Label") != 0) 
      ObjectCreate(name + " Label", OBJ_TEXT, 0, x, vleveltext);
   else
      ObjectMove(name + " Label", 0, x, vleveltext);
            
   ObjectSetText(name + " Label", text, 8, "Arial", col1);
}



Sample





Analysis



Market Information Used:

Series array that contains open time of each bar
Series array that contains open prices of each bar
Series array that contains the highest prices of each bar
Series array that contains the lowest prices of each bar
Series array that contains close prices for each bar


Indicator Curves created:


Indicators Used:



Custom Indicators Used:

Order Management characteristics:

Other Features:

It issuies visual alerts to the screen