//+------------------------------------------------------------------+
//|                                                  Weekly Open.mq4 |
//|                                                             cja. |
//+------------------------------------------------------------------+

#property indicator_chart_window

extern int    Weeks_Back            = 0; 

extern int    Set_High_Value        = 50;
extern int    Set_Low_Value         = 50;

extern color  WeeklyOpen_color      = Gold;
extern color  WeeklyHighValue_color = Lime;
extern color  WeeklyLowValue_color  = Tomato;

extern int    WeeklyOpen_width      = 1;
extern int    WeeklyHighValue_width = 1;
extern int    WeeklyLowValue_width  = 1;

extern int    WeeklyOpen_style      = 0;
extern int    WeeklyHighValue_style = 2;
extern int    WeeklyLowValue_style  = 2;

extern bool   Show_Labels           = true; 
extern int    Font_Size             = 8;  
extern string Font_Type             = "Arial";
int Magic_Number;
double myPoint;

  double SetPoint() 
   { 
   double mPoint; 
   
   if (Digits < 4) 
   mPoint = 0.01; 
   else 
   mPoint = 0.0001; 
   
   return(mPoint); 
   }
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   myPoint = SetPoint();
   Magic_Number=Set_High_Value+Set_Low_Value+Weeks_Back;
   IndicatorShortName("  Weekly open ");
  
  
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
    ObjectDelete("WeekOpen "+Magic_Number);  
    ObjectDelete("WeekHigh "+Magic_Number);  
    ObjectDelete("WeekLow "+Magic_Number);
    
    ObjectDelete("WeekOpenText "+Magic_Number);
    ObjectDelete("WeekHighText "+Magic_Number);
    ObjectDelete("WeekLowText "+Magic_Number);  
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   
       ObjectDelete("WeekOpen "+Magic_Number);   
   if(ObjectFind("WeekOpen "+Magic_Number) != 0) {
   ObjectCreate("WeekOpen "+Magic_Number, OBJ_HLINE,0,Time[0], iOpen(NULL,10080,Weeks_Back));
   ObjectSet("WeekOpen "+Magic_Number,OBJPROP_WIDTH,WeeklyOpen_width);
   ObjectSet("WeekOpen "+Magic_Number,OBJPROP_STYLE,WeeklyOpen_style);
   ObjectSet("WeekOpen "+Magic_Number,OBJPROP_COLOR,WeeklyOpen_color);
   } else{ ObjectMove("WeekOpen "+Magic_Number, 0,Time[0], iOpen(NULL,10080,Weeks_Back)); }
   
       ObjectDelete("WeekHigh "+Magic_Number);   
   if(ObjectFind("WeekHigh "+Magic_Number) != 0) {
   ObjectCreate("WeekHigh "+Magic_Number, OBJ_HLINE, 0,Time[0], iOpen(NULL,10080,Weeks_Back)+Set_High_Value*myPoint);
   ObjectSet("WeekHigh "+Magic_Number,OBJPROP_WIDTH,WeeklyHighValue_width);
   ObjectSet("WeekHigh "+Magic_Number,OBJPROP_STYLE,WeeklyHighValue_style);
   ObjectSet("WeekHigh "+Magic_Number,OBJPROP_COLOR,WeeklyHighValue_color);
   } else{ ObjectMove("WeekHigh "+Magic_Number, 0,Time[0], iOpen(NULL,10080,Weeks_Back)+Set_High_Value*myPoint); }
   
       ObjectDelete("WeekLow "+Magic_Number);   
   if(ObjectFind("WeekLow "+Magic_Number) != 0) {
   ObjectCreate("WeekLow "+Magic_Number, OBJ_HLINE, 0,Time[0], iOpen(NULL,10080,Weeks_Back)-Set_Low_Value*myPoint);
   ObjectSet("WeekLow "+Magic_Number,OBJPROP_WIDTH,WeeklyLowValue_width);
   ObjectSet("WeekLow "+Magic_Number,OBJPROP_STYLE,WeeklyLowValue_style);
   ObjectSet("WeekLow "+Magic_Number,OBJPROP_COLOR,WeeklyLowValue_color);
   } else{ ObjectMove("WeekLow "+Magic_Number, 0,Time[0], iOpen(NULL,10080,Weeks_Back)-Set_Low_Value*myPoint); }
  
  if(Show_Labels){
       ObjectDelete("WeekOpenText "+Magic_Number);   
   if(ObjectFind("WeekOpenText "+Magic_Number) != 0) {
   ObjectCreate("WeekOpenText "+Magic_Number, OBJ_TEXT,0,Time[0], iOpen(NULL,10080,Weeks_Back));
   ObjectSetText("WeekOpenText "+Magic_Number,"                               WK Open [ "+Weeks_Back+" ]",Font_Size,Font_Type,WeeklyOpen_color);
   } else{ ObjectMove("WeekOpenText "+Magic_Number, 0,Time[0], iOpen(NULL,10080,Weeks_Back)); }
   
       ObjectDelete("WeekHighText "+Magic_Number);   
   if(ObjectFind("WeekHighText "+Magic_Number) != 0) {
   ObjectCreate("WeekHighText "+Magic_Number, OBJ_TEXT,0,Time[0], iOpen(NULL,10080,Weeks_Back)+Set_High_Value*myPoint);
   ObjectSetText("WeekHighText "+Magic_Number,"                           WK [ "+Weeks_Back+" ]+"+Set_High_Value,Font_Size,Font_Type,WeeklyHighValue_color);
   } else{ ObjectMove("WeekHighText "+Magic_Number, 0,Time[0], iOpen(NULL,10080,Weeks_Back)+Set_High_Value*myPoint); }

       ObjectDelete("WeekLowText "+Magic_Number);   
   if(ObjectFind("WeekLowText "+Magic_Number) != 0) {
   ObjectCreate("WeekLowText "+Magic_Number, OBJ_TEXT,0,Time[0], iOpen(NULL,10080,Weeks_Back)-Set_Low_Value*myPoint);
   ObjectSetText("WeekLowText "+Magic_Number,"                           WK [ "+Weeks_Back+" ]-"+Set_Low_Value,Font_Size,Font_Type,WeeklyLowValue_color);
   } else{ ObjectMove("WeekLowText "+Magic_Number, 0,Time[0], iOpen(NULL,10080,Weeks_Back)-Set_Low_Value*myPoint); }
   }
   return(0);
  }
//+------------------------------------------------------------------+