/*
   Generated by EX4-TO-MQ4 decompiler V4.0.409.1c [-]
   Website: https://purebeam.biz
   E-mail : purebeam@gmail.com
*/

#property indicator_chart_window
#property indicator_buffers 6
#property indicator_color1 Blue
#property indicator_color2 White
#property indicator_color3 Green
#property indicator_color4 Yellow
#property indicator_color5 Yellow
#property indicator_color6 Yellow

extern bool Email = TRUE;
extern int SL_add_pips = 11;
int gi_84 = 1;
extern int changeLiner = 1;
int gi_unused_92 = 1;
int g_shift_96 = 977;
extern int Gup = 4;
double g_ibuf_104[];
double g_ibuf_108[];
double g_ibuf_112[];
int g_period_116 = 9;
double g_ibuf_120[];
double g_ibuf_124[];
double g_ibuf_128[];
bool gi_unused_132 = FALSE;
bool gi_unused_136 = FALSE;
bool gi_140 = FALSE;
bool gi_unused_144 = TRUE;
string gs_148 = "BuySellWait";
string g_name_156;
int gi_164 = 1;
int gi_168 = 1;
int gi_172 = 1;
double gd_176 = 1.0;
double gd_184 = 1.0;
int gi_192 = -1;
datetime g_time_196;

int init() {
   SetIndexBuffer(4, g_ibuf_104);
   SetIndexStyle(4, DRAW_NONE);
   SetIndexBuffer(5, g_ibuf_108);
   SetIndexStyle(5, DRAW_NONE);
   SetIndexStyle(0, DRAW_NONE);
   SetIndexBuffer(0, g_ibuf_124);
   SetIndexStyle(1, DRAW_NONE);
   SetIndexBuffer(1, g_ibuf_128);
   SetIndexStyle(2, DRAW_ARROW, STYLE_DOT, gi_164);
   SetIndexArrow(2, 233);
   SetIndexBuffer(2, g_ibuf_112);
   SetIndexStyle(3, DRAW_ARROW, STYLE_DOT, gi_164);
   SetIndexArrow(3, 234);
   SetIndexBuffer(3, g_ibuf_120);
   return (0);
}

int deinit() {
   Comment(" ");
   ObjectDelete(g_name_156);
   return (0);
}

int start() {
   double ld_0;
   double ld_8;
   double ld_16;
   int li_24;
   f0_0();
   int li_28 = IndicatorCounted();
   if (li_28 < 0) return (-1);
   if (li_28 > 0) li_28--;
   int li_32 = Bars - li_28;
   if (gi_140) {
      li_24 = li_32;
      Comment("");
   } else li_24 = 1000;
   int li_36 = 0;
   for (int li_40 = li_24; li_40 > 0; li_40--) {
      if (f0_1(li_40)) {
         gi_168 = 0;
         gi_172 = gi_192;
         gd_176 = High[li_40];
         li_36 = -1;
         if (li_40 == 1) {
            ld_0 = -1;
            ld_8 = High[1] + SL_add_pips * Point;
            ld_16 = 0;
            f0_4("Sell signal", ld_16, ld_8, Close[1]);
         }
      }
      if (f0_2(li_40)) {
         gi_168 = 0;
         gi_172 = gi_192;
         gd_176 = Low[li_40];
         li_36 = 1;
         if (li_40 == 1) {
            ld_0 = 1;
            ld_8 = Low[2] - SL_add_pips * Point;
            ld_16 = 0;
            f0_4("Buy signal", ld_16, ld_8, Close[1]);
         }
      }
      gd_184 = gd_176 - Close[li_40];
      gi_168 += Volume[li_40];
      gi_172++;
      if (li_36 == 1) {
         g_ibuf_124[li_40] = gi_168;
         g_ibuf_128[li_40] = 0;
      } else {
         g_ibuf_128[li_40] = gi_168;
         g_ibuf_124[li_40] = 0;
      }
      f0_3(ld_0);
   }
   return (0);
}

void f0_3(double ad_0) {
   g_name_156 = gs_148 + "BuySellwait";
   string text_8 = " Current Signal: ";
   if (ad_0 == 0.0) text_8 = text_8 + "Wait Next Signal ";
   if (ad_0 < 0.0) text_8 = text_8 + "Sell";
   if (ad_0 > 0.0) text_8 = text_8 + "Buy";
   int li_16 = WindowBarsPerChart();
   int li_20 = 60 * Period();
   double ld_24 = High[iHighest(NULL, 0, MODE_HIGH, li_16 * 4 / 5, 0)];
   double ld_32 = Low[iLowest(NULL, 0, MODE_LOW, li_16 * 4 / 5, 0)];
   double datetime_40 = Time[0] + (li_16 / 75 + 10) * li_20;
   double price_48 = ld_32 + (ld_24 - ld_32) / 10.0;
   double ld_56 = MathMax(7, 3.0 * MathCeil(li_16 / 5.0 / 3.0) + 1.0 - 3.0) * li_20;
   ObjectDelete(g_name_156);
   ObjectCreate(g_name_156, OBJ_TEXT, 0, datetime_40, price_48, 0, 0, 0, 0);
   ObjectSetText(g_name_156, text_8);
   ObjectSet(g_name_156, OBJPROP_COLOR, Yellow);
}

int f0_1(int ai_0) {
   if (g_ibuf_120[ai_0] == EMPTY_VALUE) return (0);
   return (g_ibuf_120[ai_0] > 0.0);
}

int f0_2(int ai_0) {
   if (g_ibuf_112[ai_0] == EMPTY_VALUE) return (0);
   return (g_ibuf_112[ai_0] > 0.0);
}

void f0_0() {
   int li_0;
   double lda_4[25000];
   double lda_8[25000];
   double lda_12[25000];
   double lda_16[25000];
   for (int shift_20 = g_shift_96; shift_20 > 0; shift_20--) {
      g_ibuf_104[shift_20] = 0;
      g_ibuf_108[shift_20] = 0;
      g_ibuf_112[shift_20] = EMPTY_VALUE;
      g_ibuf_120[shift_20] = EMPTY_VALUE;
   }
   for (shift_20 = g_shift_96 - g_period_116 - 1; shift_20 > 0; shift_20--) {
      lda_4[shift_20] = iBands(NULL, 0, g_period_116, Gup, 0, PRICE_CLOSE, MODE_UPPER, shift_20);
      lda_8[shift_20] = iBands(NULL, 0, g_period_116, Gup, 0, PRICE_CLOSE, MODE_LOWER, shift_20);
      if (Close[shift_20] > lda_4[shift_20 + 1]) li_0 = 1;
      if (Close[shift_20] < lda_8[shift_20 + 1]) li_0 = -1;
      if (li_0 > 0 && lda_8[shift_20] < lda_8[shift_20 + 1]) lda_8[shift_20] = lda_8[shift_20 + 1];
      if (li_0 < 0 && lda_4[shift_20] > lda_4[shift_20 + 1]) lda_4[shift_20] = lda_4[shift_20 + 1];
      lda_12[shift_20] = lda_4[shift_20] + (gi_84 - 1) / 2.0 * (lda_4[shift_20] - lda_8[shift_20]);
      lda_16[shift_20] = lda_8[shift_20] - (gi_84 - 1) / 2.0 * (lda_4[shift_20] - lda_8[shift_20]);
      if (li_0 > 0 && lda_16[shift_20] < lda_16[shift_20 + 1]) lda_16[shift_20] = lda_16[shift_20 + 1];
      if (li_0 < 0 && lda_12[shift_20] > lda_12[shift_20 + 1]) lda_12[shift_20] = lda_12[shift_20 + 1];
      if (li_0 > 0) {
         if (changeLiner > 0 && g_ibuf_104[shift_20 + 1] == -1.0) {
            g_ibuf_112[shift_20] = lda_16[shift_20];
            g_ibuf_104[shift_20] = lda_16[shift_20];
         } else {
            g_ibuf_104[shift_20] = lda_16[shift_20];
            g_ibuf_112[shift_20] = EMPTY_VALUE;
         }
         if (changeLiner == 2) g_ibuf_104[shift_20] = 0;
         g_ibuf_120[shift_20] = EMPTY_VALUE;
         g_ibuf_108[shift_20] = -1.0;
      }
      if (li_0 < 0) {
         if (changeLiner > 0 && g_ibuf_108[shift_20 + 1] == -1.0) {
            g_ibuf_120[shift_20] = lda_12[shift_20];
            g_ibuf_108[shift_20] = lda_12[shift_20];
         } else {
            g_ibuf_108[shift_20] = lda_12[shift_20];
            g_ibuf_120[shift_20] = EMPTY_VALUE;
         }
         if (changeLiner == 2) g_ibuf_108[shift_20] = 0;
         g_ibuf_112[shift_20] = EMPTY_VALUE;
         g_ibuf_104[shift_20] = -1.0;
      }
   }
}

void f0_4(string as_0, double ad_8, double ad_16, double ad_24) {
   string ls_32;
   string ls_40;
   string ls_48;
   string ls_56;
   string ls_64;
   if (Time[0] != g_time_196) {
      g_time_196 = Time[0];
      if (ad_24 != 0.0) ls_48 = " price " + DoubleToStr(ad_24, 4);
      else ls_48 = "";
      if (ad_8 != 0.0) ls_40 = ", TakeProfit on " + DoubleToStr(ad_8, 4);
      else ls_40 = "";
      if (ad_16 != 0.0) ls_32 = ", StopLoss on " + DoubleToStr(ad_16, 4);
      else ls_32 = "";
     
      ls_56 = "BuySellWait " + as_0 + ls_48;
      ls_64 = "BuySellWait " + as_0 + ls_48 + ls_40 + ls_32 + " " + Symbol() + ", " + Period() + " minutes chart";
      if (Email) SendMail(ls_56, ls_64);
   }
}