/*
   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;
double gd_96;
datetime g_time_104;
int g_time_108;
double g_price_112;
double g_price_120;
int gi_128;
double g_ibuf_132[];
double g_ibuf_136[];

int init() {
   IndicatorBuffers(2);
   SetIndexBuffer(0, g_ibuf_132);
   SetIndexBuffer(1, g_ibuf_136);
   return (0);
}

int deinit() {
   ObjectsDeleteAll(0, OBJ_RECTANGLE);
   return (0);
}

int CalcROC(int ai_0) {
   if (Close[ai_0 + ROCPeriod] > 0.0) gd_96 = 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;
   for (int li_0 = li_8; li_0 >= 1; li_0--) {
      CalcROC(li_0);
      if (gd_96 <= BoxThreshold / 100.0 && gd_96 >= (0 - BoxThreshold) / 100.0) {
         if (g_time_104 == 0) {
            g_time_104 = Time[li_0];
            gi_128 = 1;
            g_price_112 = 0;
            g_price_120 = 999;
         } else {
            gi_128++;
            for (int li_4 = li_0; li_4 <= li_8; li_4++) {
               if (Time[li_4] < g_time_104) break;
               if (Open[li_4] > g_price_112) g_price_112 = Open[li_4];
               if (Close[li_4] > g_price_112) g_price_112 = Close[li_4];
               if (Open[li_4] < g_price_120) g_price_120 = Open[li_4];
               if (Close[li_4] < g_price_120) g_price_120 = Close[li_4];
            }
         }
      }
      if (gd_96 > BoxThreshold / 100.0 || gd_96 < (0 - BoxThreshold) / 100.0 && Close[li_0] > g_price_112 || Close[li_0] < g_price_120) g_time_104 = 0;
      else g_time_108 = Time[li_0];
      if (g_time_104 > 0 && gi_128 >= BoxMinBars) {
         g_time_108 = Time[li_0 - 1];
         ObjectDelete("Box" + TimeToStr(g_time_104, TIME_DATE|TIME_MINUTES));
         ObjectCreate("Box" + TimeToStr(g_time_104, TIME_DATE|TIME_MINUTES), OBJ_RECTANGLE, 0, g_time_104, g_price_112, g_time_108, g_price_120);
         ObjectSet("Box" + TimeToStr(g_time_104, TIME_DATE|TIME_MINUTES), OBJPROP_COLOR, BoxColor);
      }
      g_ibuf_132[li_0] = g_price_112;
      g_ibuf_136[li_0] = g_price_120;
   }
   return (0);
}
