/*
   Generated by EX4-TO-MQ4 decompiler V4.0.224.1 []
   Website: http://purebeam.biz
   E-mail : purebeam@gmail.com
*/

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 CLR_NONE
#property indicator_color2 CLR_NONE

extern int ROCPeriod = 2;
extern double BoxThreshold = 12.0;
extern int BoxMinBars = 3;
extern color BoxColor = DeepSkyBlue;
extern bool BoxBackground = TRUE;
extern int BoxLineWidth = 1;
extern int BoxBegin = 500;
double gd_108;
datetime g_time_116;
int g_time_120;
double g_price_124;
double g_price_132;
int gi_140;
double g_ibuf_144[];
double g_ibuf_148[];

int init() {
   IndicatorBuffers(2);
   SetIndexBuffer(0, g_ibuf_144);
   SetIndexBuffer(1, g_ibuf_148);
   return (0);
}

int deinit() {
   ObjectsDeleteAll(0, OBJ_RECTANGLE);
   return (0);
}

int CalcROC(int ai_0) {
   if (Close[ai_0 + ROCPeriod] > 0.0) gd_108 = 100.0 * ((Close[ai_0] - (Close[ai_0 + ROCPeriod])) / (Close[ai_0 + ROCPeriod]));
   return (0);
}

int start() {
   int li_12 = IndicatorCounted();
   if (li_12 < 0) return (-1);
   if (li_12 > 0) li_12--;
   int li_8 = Bars - ROCPeriod - li_12;
   if (BoxBegin > 0) li_8 = BoxBegin - ROCPeriod - li_12;
   for (int li_0 = li_8; li_0 >= 1; li_0--) {
      CalcROC(li_0);
      if (gd_108 <= BoxThreshold / 100.0 && gd_108 >= (0 - BoxThreshold) / 100.0) {
         if (g_time_116 == 0) {
            g_time_116 = Time[li_0];
            gi_140 = 1;
            if (Open[li_0] >= Close[li_0]) {
               g_price_124 = Open[li_0];
               g_price_132 = Close[li_0];
            } else {
               g_price_124 = Close[li_0];
               g_price_132 = Open[li_0];
            }
         } else {
            gi_140++;
            for (int li_4 = li_0; li_4 <= li_8; li_4++) {
               if (Time[li_4] < g_time_116) break;
               if (Open[li_4] > g_price_124) g_price_124 = Open[li_4];
               if (Close[li_4] > g_price_124) g_price_124 = Close[li_4];
               if (Open[li_4] < g_price_132) g_price_132 = Open[li_4];
               if (Close[li_4] < g_price_132) g_price_132 = Close[li_4];
            }
         }
      }
      if (gd_108 > BoxThreshold / 100.0 || gd_108 < (0 - BoxThreshold) / 100.0 && Close[li_0] > g_price_124 || Close[li_0] < g_price_132) g_time_116 = 0;
      else g_time_120 = Time[li_0];
      g_ibuf_144[li_0] = 0;
      g_ibuf_148[li_0] = 0;
      if (g_time_116 > 0 && gi_140 >= BoxMinBars) {
         ObjectDelete("Box" + TimeToStr(g_time_116, TIME_DATE|TIME_MINUTES|TIME_SECONDS));
         ObjectCreate("Box" + TimeToStr(g_time_116, TIME_DATE|TIME_MINUTES|TIME_SECONDS), OBJ_RECTANGLE, 0, g_time_116, g_price_124, g_time_120, g_price_132);
         ObjectSet("Box" + TimeToStr(g_time_116, TIME_DATE|TIME_MINUTES|TIME_SECONDS), OBJPROP_COLOR, BoxColor);
         ObjectSet("Box" + TimeToStr(g_time_116, TIME_DATE|TIME_MINUTES|TIME_SECONDS), OBJPROP_BACK, BoxBackground);
         ObjectSet("Box" + TimeToStr(g_time_116, TIME_DATE|TIME_MINUTES|TIME_SECONDS), OBJPROP_WIDTH, BoxLineWidth);
         g_ibuf_144[li_0] = g_price_124;
         g_ibuf_148[li_0] = g_price_132;
      }
   }
   return (0);
}
