/*
   Generated by EX4-TO-MQ4 decompiler V4.0.225.1g []
   Website: http://purebeam.biz
   E-mail : purebeam@gmail.com
*/
#property copyright "asystem2000"
#property link      "asystem2000@yandex.ru"

#property indicator_chart_window
#property indicator_buffers 6
#property indicator_color1 Chocolate
#property indicator_color2 Chocolate
#property indicator_color3 MediumVioletRed
#property indicator_color4 MediumVioletRed
#property indicator_color5 Fuchsia
#property indicator_color6 DodgerBlue

extern double Period1 = 0.0;
extern double Period2 = 0.0;
extern double Period3 = 34.0;
extern string Dev_Step_1 = "0";
extern string Dev_Step_2 = "0";
extern string Dev_Step_3 = "13,8";
extern int Symbol_1_Kod = 140;
extern int Symbol_2_Kod = 141;
extern int Symbol_3_Kod = 77;
double g_ibuf_136[];
double g_ibuf_140[];
double g_ibuf_144[];
double g_ibuf_148[];
double g_ibuf_152[];
double g_ibuf_156[];
int gi_unused_160;
int gi_unused_164;
int gi_unused_168;
int gi_172;
int gi_176;
int gi_180;
int gi_184;
int gi_188;
int gi_192;

int init() {
   int lia_8[];
   if (Period1 > 0.0) gi_unused_160 = MathCeil(Period1 * Period());
   else gi_unused_160 = 0;
   if (Period2 > 0.0) gi_unused_164 = MathCeil(Period2 * Period());
   else gi_unused_164 = 0;
   if (Period3 > 0.0) gi_unused_168 = MathCeil(Period3 * Period());
   else gi_unused_168 = 0;
   if (Period1 > 0.0) {
      SetIndexStyle(0, DRAW_ARROW, STYLE_SOLID, 1);
      SetIndexArrow(0, Symbol_1_Kod);
      SetIndexBuffer(0, g_ibuf_136);
      SetIndexEmptyValue(0, 0.0);
      SetIndexStyle(1, DRAW_ARROW, STYLE_SOLID, 1);
      SetIndexArrow(1, Symbol_1_Kod);
      SetIndexBuffer(1, g_ibuf_140);
      SetIndexEmptyValue(1, 0.0);
   }
   if (Period2 > 0.0) {
      SetIndexStyle(2, DRAW_ARROW, STYLE_SOLID, 2);
      SetIndexArrow(2, Symbol_2_Kod);
      SetIndexBuffer(2, g_ibuf_144);
      SetIndexEmptyValue(2, 0.0);
      SetIndexStyle(3, DRAW_ARROW, STYLE_SOLID, 2);
      SetIndexArrow(3, Symbol_2_Kod);
      SetIndexBuffer(3, g_ibuf_148);
      SetIndexEmptyValue(3, 0.0);
   }
   if (Period3 > 0.0) {
      SetIndexStyle(4, DRAW_ARROW, STYLE_SOLID, 4);
      SetIndexArrow(4, Symbol_3_Kod);
      SetIndexBuffer(4, g_ibuf_152);
      SetIndexEmptyValue(4, 0.0);
      SetIndexStyle(5, DRAW_ARROW, STYLE_SOLID, 4);
      SetIndexArrow(5, Symbol_3_Kod);
      SetIndexBuffer(5, g_ibuf_156);
      SetIndexEmptyValue(5, 0.0);
   }
   int li_unused_0 = 0;
   int li_unused_4 = 0;
   int li_12 = 0;
   if (IntFromStr(Dev_Step_1, li_12, lia_8) == 1) {
      gi_176 = lia_8[1];
      gi_172 = lia_8[0];
   }
   if (IntFromStr(Dev_Step_2, li_12, lia_8) == 1) {
      gi_184 = lia_8[1];
      gi_180 = lia_8[0];
   }
   if (IntFromStr(Dev_Step_3, li_12, lia_8) == 1) {
      gi_192 = lia_8[1];
      gi_188 = lia_8[0];
   }
   return (0);
}

int deinit() {
   return (0);
}

int start() {
   if (Period1 > 0.0) CountZZ(g_ibuf_136, g_ibuf_140, Period1, gi_172, gi_176);
   if (Period2 > 0.0) CountZZ(g_ibuf_144, g_ibuf_148, Period2, gi_180, gi_184);
   if (Period3 > 0.0) CountZZ(g_ibuf_152, g_ibuf_156, Period3, gi_188, gi_192);
   return (0);
}

int CountZZ(double &ada_0[], double &ada_4[], int ai_8, int ai_12, int ai_16) {
   double ld_36;
   double ld_44;
   double ld_52;
   double ld_60;
   double ld_68;
   double ld_76;
   for (int li_20 = Bars - ai_8; li_20 >= 0; li_20--) {
      ld_36 = Low[iLowest(NULL, 0, MODE_LOW, ai_8, li_20)];
      if (ld_36 == ld_76) ld_36 = 0.0;
      else {
         ld_76 = ld_36;
         if (Low[li_20] - ld_36 > ai_12 * Point) ld_36 = 0.0;
         else {
            for (int li_24 = 1; li_24 <= ai_16; li_24++) {
               ld_44 = ada_0[li_20 + li_24];
               if (ld_44 != 0.0 && ld_44 > ld_36) ada_0[li_20 + li_24] = 0.0;
            }
         }
      }
      ada_0[li_20] = ld_36;
      ld_36 = High[iHighest(NULL, 0, MODE_HIGH, ai_8, li_20)];
      if (ld_36 == ld_68) ld_36 = 0.0;
      else {
         ld_68 = ld_36;
         if (ld_36 - High[li_20] > ai_12 * Point) ld_36 = 0.0;
         else {
            for (li_24 = 1; li_24 <= ai_16; li_24++) {
               ld_44 = ada_4[li_20 + li_24];
               if (ld_44 != 0.0 && ld_44 < ld_36) ada_4[li_20 + li_24] = 0.0;
            }
         }
      }
      ada_4[li_20] = ld_36;
   }
   ld_68 = -1;
   int li_28 = -1;
   ld_76 = -1;
   int li_32 = -1;
   for (li_20 = Bars - ai_8; li_20 >= 0; li_20--) {
      ld_52 = ada_0[li_20];
      ld_60 = ada_4[li_20];
      if (ld_52 == 0.0 && ld_60 == 0.0) continue;
      if (ld_60 != 0.0) {
         if (ld_68 > 0.0) {
            if (ld_68 < ld_60) ada_4[li_28] = 0;
            else ada_4[li_20] = 0;
         }
         if (ld_68 < ld_60 || ld_68 < 0.0) {
            ld_68 = ld_60;
            li_28 = li_20;
         }
         ld_76 = -1;
      }
      if (ld_52 != 0.0) {
         if (ld_76 > 0.0) {
            if (ld_76 > ld_52) ada_0[li_32] = 0;
            else ada_0[li_20] = 0;
         }
         if (ld_52 < ld_76 || ld_76 < 0.0) {
            ld_76 = ld_52;
            li_32 = li_20;
         }
         ld_68 = -1;
      }
   }
   for (li_20 = Bars - 1; li_20 >= 0; li_20--) {
      if (li_20 >= Bars - ai_8) ada_0[li_20] = 0.0;
      else {
         ld_44 = ada_4[li_20];
         if (ld_44 != 0.0) ada_4[li_20] = ld_44;
      }
   }
   return (0);
}

int Str2Massive(string as_0, int &ai_8, int &aia_12[]) {
   int li_20;
   int l_str2int_16 = StrToInteger(as_0);
   if (l_str2int_16 > 0) {
      ai_8++;
      li_20 = ArrayResize(aia_12, ai_8);
      if (li_20 == 0) return (-1);
      aia_12[ai_8 - 1] = l_str2int_16;
      return (1);
   }
   return (0);
}

int IntFromStr(string as_0, int &ai_8, int aia_12[]) {
   string ls_28;
   if (StringLen(as_0) == 0) return (-1);
   string ls_16 = as_0;
   int li_24 = 0;
   ai_8 = 0;
   ArrayResize(aia_12, ai_8);
   while (StringLen(ls_16) > 0) {
      li_24 = StringFind(ls_16, ",");
      if (li_24 > 0) {
         ls_28 = StringSubstr(ls_16, 0, li_24);
         ls_16 = StringSubstr(ls_16, li_24 + 1, StringLen(ls_16));
      } else {
         if (StringLen(ls_16) > 0) {
            ls_28 = ls_16;
            ls_16 = "";
         }
      }
      if (Str2Massive(ls_28, ai_8, aia_12) == 0) return (-2);
   }
   return (1);
}
