/*
   Generated by EX4-TO-MQ4 decompiler V4.0.224.1 []
   Website: http://purebeam.biz
   E-mail : purebeam@gmail.com
*/
#property copyright "Copyright © 2011, FX Cash Extreme"
#property link      "http://www.FXCashFormula.com"

#property indicator_separate_window
#property indicator_buffers 4
#property indicator_color1 Lime
#property indicator_color2 Red
#property indicator_color3 Fuchsia
#property indicator_color4 Aqua

int g_period_76 = 50;
double gd_80 = 2.0;
int g_period_88 = 20;
double gd_92 = 1.5;
int gi_unused_100 = 12;
double g_ibuf_104[];
double g_ibuf_108[];
double g_ibuf_112[];
double g_ibuf_116[];
int gi_unused_128 = 3;
double gd_unused_132 = 0.0;
double gd_unused_140 = 0.0;
int gi_unused_148 = 0;
int gi_unused_152 = 0;
int gi_unused_156 = 0;
int gi_unused_160 = 0;
int gi_unused_164 = 0;
double gda_unused_168[61];
double gda_unused_172[61];
double gd_unused_176 = 0.0;
double gd_unused_184 = 0.0;

int init() {
   SetIndexStyle(0, DRAW_HISTOGRAM);
   SetIndexBuffer(0, g_ibuf_104);
   SetIndexEmptyValue(0, EMPTY_VALUE);
   SetIndexStyle(1, DRAW_HISTOGRAM);
   SetIndexBuffer(1, g_ibuf_108);
   SetIndexEmptyValue(1, EMPTY_VALUE);
   SetIndexStyle(2, DRAW_ARROW);
   SetIndexBuffer(2, g_ibuf_112);
   SetIndexEmptyValue(2, EMPTY_VALUE);
   SetIndexArrow(2, 159);
   SetIndexStyle(3, DRAW_ARROW);
   SetIndexBuffer(3, g_ibuf_116);
   SetIndexEmptyValue(3, EMPTY_VALUE);
   SetIndexArrow(3, 159);
   return (0);
}

int deinit() {
   return (0);
}

int start() {
   double ld_12;
   double ld_20;
   double l_istddev_28;
   double ld_36;
   int li_0 = IndicatorCounted();
   if (li_0 < 0) return (-1);
   if (li_0 > 0) li_0--;
   int li_8 = Bars - 31;
   if (li_0 >= 31) li_8 = Bars - li_0 - 1;
   for (int li_4 = li_8; li_4 >= 0; li_4--) {
      ld_20 = LinearRegressionValue(g_period_76, li_4);
      if (ld_20 > 0.0) {
         g_ibuf_104[li_4] = ld_20;
         g_ibuf_108[li_4] = 0;
      } else {
         g_ibuf_104[li_4] = 0;
         g_ibuf_108[li_4] = ld_20;
      }
      ld_12 = iATR(NULL, 0, g_period_88, li_4) * gd_92;
      l_istddev_28 = iStdDev(NULL, 0, g_period_76, 0, MODE_SMA, PRICE_CLOSE, li_4);
      ld_36 = gd_80 * l_istddev_28 / ld_12;
      if (ld_36 < 1.0) {
         g_ibuf_112[li_4] = 0;
         g_ibuf_116[li_4] = EMPTY_VALUE;
      } else {
         g_ibuf_116[li_4] = 0;
         g_ibuf_112[li_4] = EMPTY_VALUE;
      }
   }
   return (0);
}

double LinearRegressionValue(int a_period_0, int ai_4) {
   double l_low_60;
   double l_high_68;
   double ld_8 = 0;
   double ld_16 = 0;
   double ld_24 = 0;
   double ld_32 = 0;
   double ld_40 = 0;
   double ld_48 = 0;
   ld_8 = a_period_0 * (a_period_0 - 1) / 2.0;
   ld_16 = (a_period_0 - 1) * a_period_0 * (a_period_0 * 2 - 1) / 6;
   for (int l_count_56 = 0; l_count_56 <= a_period_0 - 1; l_count_56++) {
      l_low_60 = Low[l_count_56 + ai_4];
      l_high_68 = High[l_count_56 + ai_4];
      for (int li_76 = l_count_56; li_76 <= l_count_56 + a_period_0 - 1; li_76++) {
         l_low_60 = MathMax(l_low_60, High[li_76 + ai_4]);
         l_high_68 = MathMin(l_high_68, Low[li_76 + ai_4]);
      }
      ld_32 += l_count_56 * (Close[l_count_56 + ai_4] - ((l_low_60 + l_high_68) / 2.0 + iMA(NULL, 0, a_period_0, 0, MODE_EMA, PRICE_CLOSE, l_count_56 + ai_4)) / 2.0);
      ld_24 += Close[l_count_56 + ai_4] - ((l_low_60 + l_high_68) / 2.0 + iMA(NULL, 0, a_period_0, 0, MODE_EMA, PRICE_CLOSE, l_count_56 + ai_4)) / 2.0;
   }
   ld_40 = ld_8 * ld_24;
   double ld_80 = a_period_0 * ld_32 - ld_40;
   double ld_88 = ld_8 * ld_8 - a_period_0 * ld_16;
   if (ld_88 != 0.0) ld_48 = ld_80 / ld_88;
   else ld_48 = 0;
   double ld_96 = (ld_24 - ld_48 * ld_8) / a_period_0;
   double ld_ret_104 = ld_96 + ld_48 * (a_period_0 - 1);
   return (ld_ret_104);
}
