/*
   Generated by EX4-TO-MQ4 decompiler V4.0.224.1 []
   Website: http://purebeam.biz
   E-mail : purebeam@gmail.com
*/

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_color2 Green

extern bool soundAlerts = TRUE;
extern bool emailAlerts = FALSE;
double g_ibuf_84[];
double g_ibuf_88[];
double g_ibuf_92[];

int init() {
   if (ObjectType("lbl") != 23) ObjectDelete("lbl");
   if (ObjectFind("lbl") == -1) ObjectCreate("lbl", OBJ_LABEL, 0, Time[5], Close[5]);
   ObjectSetText("lbl", "FXSmooth Indicator | FXSmooth.com");
   ObjectSet("lbl", OBJPROP_FONTSIZE, 12);
   ObjectSet("lbl", OBJPROP_XDISTANCE, 5);
   ObjectSet("lbl", OBJPROP_YDISTANCE, 20);
   IndicatorBuffers(3);
   SetIndexStyle(0, DRAW_LINE);
   SetIndexBuffer(0, g_ibuf_88);
   SetIndexStyle(1, DRAW_LINE);
   SetIndexBuffer(1, g_ibuf_92);
   SetIndexBuffer(2, g_ibuf_84);
   return (0);
}

int deinit() {
   ObjectDelete("lbl");
   return (0);
}

int start() {
   double ld_16;
   if (ObjectType("lbl") != 23) ObjectDelete("lbl");
   if (ObjectFind("lbl") == -1) ObjectCreate("lbl", OBJ_LABEL, 0, Time[5], Close[5]);
   ObjectSetText("lbl", "FXSmooth Indicator | FXSmooth.com");
   ObjectSet("lbl", OBJPROP_FONTSIZE, 12);
   ObjectSet("lbl", OBJPROP_XDISTANCE, 5);
   ObjectSet("lbl", OBJPROP_YDISTANCE, 20);
   double ld_0 = 35;
   double l_iatr_8 = iATR(Symbol(), 0, 50, 1);
   int l_bars_24 = Bars;
   int l_count_28 = 0;
   int li_32 = ld_0;
   double ld_36 = 0;
   double ld_44 = 0;
   double ld_52 = 0;
   double ld_60 = 0;
   double ld_68 = 0;
   double ld_76 = 0;
   double ld_84 = 0;
   double ld_92 = 0;
   for (int li_100 = l_bars_24 - 1; li_100 >= 0; li_100--) {
      ld_36 = 0;
      ld_44 = 0;
      ld_52 = 0;
      ld_60 = 0;
      ld_68 = 0;
      for (l_count_28 = 0; l_count_28 <= li_32 - 1; l_count_28++) {
         ld_36 += l_count_28;
         ld_44 += Close[li_100 + l_count_28];
         ld_52 += l_count_28 * (Close[li_100 + l_count_28]);
         ld_60 += l_count_28 * l_count_28;
         ld_68 += (Close[li_100 + l_count_28]) * (Close[li_100 + l_count_28]);
      }
      if (li_32 * ld_60 - ld_36 * ld_36 == 0.0) ld_76 = (li_32 * ld_52 - ld_36 * ld_44) / 0.00000001;
      else ld_76 = (li_32 * ld_52 - ld_36 * ld_44) / (li_32 * ld_60 - ld_36 * ld_36);
      ld_84 = (ld_44 + ld_76 * ld_36) / li_32;
      if (MathSqrt((li_32 * ld_60 - ld_36 * ld_36) * (li_32 * ld_68 - ld_44 * ld_44)) == 0.0) ld_92 = (li_32 * ld_52 - ld_36 * ld_44) / 0.00000001;
      else ld_92 = (li_32 * ld_52 - ld_36 * ld_44) / MathSqrt((li_32 * ld_60 - ld_36 * ld_36) * (li_32 * ld_68 - ld_44 * ld_44));
      g_ibuf_84[li_100] = ld_84 - ld_76 * li_32;
   }
   double ld_104 = 0;
   for (li_100 = l_bars_24 - 1; li_100 >= 0; li_100--) {
      if (g_ibuf_84[li_100] > g_ibuf_84[li_100 + 1]) {
         ld_104 += 0.1;
         g_ibuf_92[li_100] = ld_104;
         if (g_ibuf_88[li_100 + 1] != EMPTY_VALUE) g_ibuf_92[li_100 + 1] = g_ibuf_88[li_100 + 1];
      } else {
         ld_104 -= 0.1;
         g_ibuf_88[li_100] = ld_104;
         if (g_ibuf_92[li_100 + 1] != EMPTY_VALUE) g_ibuf_88[li_100 + 1] = g_ibuf_92[li_100 + 1];
      }
   }
   if (g_ibuf_84[1] > g_ibuf_84[2] && g_ibuf_84[2] <= g_ibuf_84[3] && High[0] == Low[0] && High[0] == Close[0] && High[0] == Low[0]) {
      ld_16 = Low[iLowest(Symbol(), 0, MODE_LOW, 4, 0)] - l_iatr_8 / 2.0;
      if (soundAlerts) Alert("Long trade at " + Symbol() + "! Stop Loss at " + ld_16);
      if (emailAlerts) SendMail("Long trade at " + Symbol() + "!", "Long trade at " + Symbol() + "! Stop Loss at " + ld_16);
   }
   if (g_ibuf_84[1] < g_ibuf_84[2] && g_ibuf_84[2] >= g_ibuf_84[3] && High[0] == Low[0] && High[0] == Close[0] && High[0] == Low[0]) {
      ld_16 = High[iHighest(Symbol(), 0, MODE_HIGH, 4, 0)] + l_iatr_8 / 2.0;
      if (soundAlerts) Alert("Short trade at " + Symbol() + "! Stop Loss at " + ld_16);
      if (emailAlerts) SendMail("Short trade at " + Symbol() + "!", "Short trade in at " + Symbol() + "! Stop Loss at " + ld_16);
   }
   return (0);
}
