#property indicator_chart_window

extern double    RangeLow=10.0;
extern double    RangeHigh=100.0;
extern int       GridPoint=25;
extern int       Cycle=4;
extern color     Color1=White;
extern color     Color5=Gold;
extern color     Color10=Red;
extern int       Width1=1;
extern int       Width5=1;
extern int       Width10=2;
extern string Style012 = "0:SOLID, 1:DASH, 2:DOT";
extern string Style34 = "3:DASHDOT, 4:DASHDOTDOT";
extern int       Style1=2;
extern int       Style5=1;
extern int       Style10=0;

bool firstTime = true;

int init() {
   firstTime = true;
   return(0);
}

int deinit() {
   for (int i = ObjectsTotal() - 1; i >= 0; i--) {
      if (StringFind(ObjectName(i), "Hgrid_") >= 0) ObjectDelete(ObjectName(i));
   }
   return(0);
}

int start() {
   if (firstTime == false) return(0);
   double p = RangeLow;
   for (int i = 0; p <= RangeHigh;) {
      string gridname = "Hgrid_" + DoubleToStr(p, Digits);
      ObjectCreate(gridname, OBJ_HLINE, 0, 0, p);
      if ((i % Cycle) == 0) {
         ObjectSet(gridname, OBJPROP_COLOR, Color10);
         ObjectSet(gridname, OBJPROP_STYLE, Style10);
         ObjectSet(gridname, OBJPROP_WIDTH, Width10);
      } else if ((i % Cycle) * 2 == Cycle) {
         ObjectSet(gridname, OBJPROP_COLOR, Color5);
         ObjectSet(gridname, OBJPROP_STYLE, Style5);
         ObjectSet(gridname, OBJPROP_WIDTH, Width5);
      } else {
         ObjectSet(gridname, OBJPROP_COLOR, Color1);
         ObjectSet(gridname, OBJPROP_STYLE, Style1);
         ObjectSet(gridname, OBJPROP_WIDTH, Width1);
      }
      ObjectSet(gridname, OBJPROP_BACK, true);
      i++;
      p = RangeLow + (i * GridPoint * Point);
   }
   firstTime = false;
   return(0);
}

