#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_color2 Blue

int gi_76 = 5;
int gi_80 = 400;
extern bool MsgAlerts = TRUE;
extern bool eMailAlerts = FALSE;
double gda_92[];
double gda_96[];
int gi_100 = 0;
int gi_104 = 0;

int init() {
   IndicatorBuffers(2);
   SetIndexStyle(0, DRAW_ARROW);
   SetIndexArrow(0, 222);
   SetIndexStyle(1, DRAW_ARROW);
   SetIndexArrow(1, 221);
   SetIndexBuffer(0, gda_92);
   SetIndexBuffer(1, gda_96);
   GlobalVariableSet("AlertTime" + Symbol() + Period(), TimeCurrent());
   GlobalVariableSet("SignalType" + Symbol() + Period(), 5);
   return (0);
}

int deinit() {
   GlobalVariableDel("AlertTime" + Symbol() + Period());
   GlobalVariableDel("SignalType" + Symbol() + Period());
   return (0);
}

int start() {
   int li_12;
   double ld_52;
   double ld_60;
   double ld_76;
   double ld_84;
   double ld_92;
   double ld_100;
   double lda_108[1000];
   if (gi_80 >= 1000) gi_80 = 950;
   SetIndexDrawBegin(0, Bars - gi_80 + 11 + 1);
   SetIndexDrawBegin(1, Bars - gi_80 + 11 + 1);
   int li_8 = IndicatorCounted();
   double ld_112 = 0;
   int li_20 = gi_76 * 2 + 3;
   double ld_36 = gi_76 + 67;
   double ld_44 = 33 - gi_76;
   int li_24 = li_20;
   if (Bars <= 12) return (0);
   if (li_8 < 12) {
      for (int li_0 = 1; li_0 <= 0; li_0++) gda_92[gi_80 - li_0] = 0.0;
      for (li_0 = 1; li_0 <= 0; li_0++) gda_96[gi_80 - li_0] = 0.0;
   }
   for (int li_4 = gi_80 - 11 - 1; li_4 >= 0; li_4--) {
      li_12 = li_4;
      ld_76 = 0.0;
      ld_84 = 0.0;
      for (li_12 = li_4; li_12 <= li_4 + 9; li_12++) ld_84 += MathAbs(High[li_12] - Low[li_12]);
      ld_76 = ld_84 / 10.0;
      li_12 = li_4;
      for (double ld_68 = 0; li_12 < li_4 + 9 && ld_68 < 1.0; li_12++)
         if (MathAbs(Open[li_12] - (Close[li_12 + 1])) >= 2.0 * ld_76) ld_68 += 1.0;
      if (ld_68 >= 1.0) ld_92 = li_12;
      else ld_92 = -1;
      li_12 = li_4;
      for (ld_68 = 0; li_12 < li_4 + 6 && ld_68 < 1.0; li_12++)
         if (MathAbs(Close[li_12 + 3] - Close[li_12]) >= 4.6 * ld_76) ld_68 += 1.0;
      if (ld_68 >= 1.0) ld_100 = li_12;
      else ld_100 = -1;
      if (ld_92 > -1.0) li_24 = 3;
      else li_24 = li_20;
      if (ld_100 > -1.0) li_24 = 4;
      else li_24 = li_20;
      ld_52 = 100 - MathAbs(iWPR(NULL, 0, li_24, li_4));
      lda_108[li_4] = ld_52;
      gda_92[li_4] = 0;
      gda_96[li_4] = 0;
      ld_60 = 0;
      if (ld_52 < ld_44) {
         for (int li_16 = 1; lda_108[li_4 + li_16] >= ld_44 && lda_108[li_4 + li_16] <= ld_36; li_16++) {
         }
         if (lda_108[li_4 + li_16] > ld_36) {
            ld_60 = High[li_4] + ld_76 / 2.0;
            if (li_4 == 1 && gi_100 == FALSE) {
               gi_100 = TRUE;
               gi_104 = FALSE;
            }
            gda_92[li_4] = ld_60;
         }
      }
      if (ld_52 > ld_36) {
         for (li_16 = 1; lda_108[li_4 + li_16] >= ld_44 && lda_108[li_4 + li_16] <= ld_36; li_16++) {
         }
         if (lda_108[li_4 + li_16] < ld_44) {
            ld_60 = Low[li_4] - ld_76 / 2.0;
            if (li_4 == 1 && gi_104 == FALSE) {
               gi_104 = TRUE;
               gi_100 = FALSE;
            }
            gda_96[li_4] = ld_60;
         }
      }
   }
   if (gi_100 == TRUE && TimeCurrent() > GlobalVariableGet("AlertTime" + Symbol() + Period()) && GlobalVariableGet("SignalType" + Symbol() + Period()) != 0.0) {
      if (MsgAlerts) Alert("Sell signal @ ", Symbol(), " Period ", Period());
      if (eMailAlerts) SendMail("Sell Signal Supreme Dominator", "Sell signal @ " + Symbol() + " Period " + Period());
      ld_112 = TimeCurrent() + 60.0 * (Period() - MathMod(Minute(), Period()));
      GlobalVariableSet("AlertTime" + Symbol() + Period(), ld_112);
      GlobalVariableSet("SignalType" + Symbol() + Period(), 0);
   }
   if (gi_104 == TRUE && TimeCurrent() > GlobalVariableGet("AlertTime" + Symbol() + Period()) && GlobalVariableGet("SignalType" + Symbol() + Period()) != 1.0) {
      if (MsgAlerts) Alert("Buy signal @ ", Symbol(), " Period ", Period());
      if (eMailAlerts) SendMail("BUY Signal Supreme Dominator", "Buy signal @ " + Symbol() + " Period " + Period());
      ld_112 = TimeCurrent() + 60.0 * (Period() - MathMod(Minute(), Period()));
      GlobalVariableSet("AlertTime" + Symbol() + Period(), ld_112);
      GlobalVariableSet("SignalType" + Symbol() + Period(), 1);
   }
   return (0);
}
