#property indicator_chart_window
#property indicator_buffers 8
#property indicator_color1 White
#property indicator_color2 White
#property indicator_color3 White
#property indicator_color4 White
#property indicator_color5 White
#property indicator_color6 White
#property indicator_color7 Blue
#property indicator_color8 Red

extern int SR = 3;
extern int SRZZ = 20;
extern int MainRZZ = 54;
extern int FP = 21;
extern int SMF = 3;
extern bool DrawZZ = FALSE;
extern int PriceConst = 0;
double Gl_ibuf_104[];
double Gl_ibuf_108[];
double Glda_112[];
double Glda_116[];
double Gl_ibuf_120[];
double Gl_ibuf_124[];
double Gl_ibuf_128[];
double Gl_ibuf_132[];
int Glia_136[6] = {0, 0, 0, 0, 0, 0};
int Glia_140[5] = {0, 0, 0, 0, 0};
int Gli_144;
int Gli_148;
int Gli_152;
int Gli_156;
int Gli_160;
bool Gli_164 = TRUE;
int Gl_bars_168 = 0;

// FE96F1FA1C72F38704EDC141EBA3D772
void f0_6(int Ari_0) {
   if (Bars - Ari_0 > SR + 1) f0_5(Ari_0);
   else Glda_112[Ari_0] = 0;
   if (Bars - Ari_0 > FP + SR + 2) {
      f0_1(Ari_0);
      return;
   }
   Glda_116[Ari_0] = 0;
}

// F168D35B8002FDC116388DEE85895FDE
void f0_5(int Ari_0) {
   int Lci_4;
   int count_8;
   int Lci_12;
   int Lci_16;
   double Lcd_20;
   switch (PriceConst) {
   case 0:
      Glda_112[Ari_0] = iMA(NULL, 0, SR + 1, 0, MODE_LWMA, PRICE_CLOSE, Ari_0);
      break;
   case 1:
      Glda_112[Ari_0] = iMA(NULL, 0, SR + 1, 0, MODE_LWMA, PRICE_OPEN, Ari_0);
      break;
   case 4:
      Glda_112[Ari_0] = iMA(NULL, 0, SR + 1, 0, MODE_LWMA, PRICE_MEDIAN, Ari_0);
      break;
   case 5:
      Glda_112[Ari_0] = iMA(NULL, 0, SR + 1, 0, MODE_LWMA, PRICE_TYPICAL, Ari_0);
      break;
   case 6:
      Glda_112[Ari_0] = iMA(NULL, 0, SR + 1, 0, MODE_LWMA, PRICE_WEIGHTED, Ari_0);
      break;
   default:
      Glda_112[Ari_0] = iMA(NULL, 0, SR + 1, 0, MODE_LWMA, PRICE_OPEN, Ari_0);
   }
   for (int Lci_32 = Ari_0 + SR + 2; Lci_32 > Ari_0; Lci_32--) {
      Lcd_20 = 0.0;
      Lci_4 = 0;
      count_8 = 0;
      Lci_12 = Lci_32 + SR;
      Lci_16 = Lci_32 - SR;
      if (Lci_16 < Ari_0) Lci_16 = Ari_0;
      while (Lci_12 >= Lci_32) {
         count_8++;
         Lcd_20 += count_8 * f0_2(Lci_12);
         Lci_4 += count_8;
         Lci_12--;
      }
      while (Lci_12 >= Lci_16) {
         count_8--;
         Lcd_20 += count_8 * f0_2(Lci_12);
         Lci_4 += count_8;
         Lci_12--;
      }
      Glda_112[Lci_32] = Lcd_20 / Lci_4;
   }
}

// 5ABFF314964674A606FC93AD8B35C31B
double f0_2(int Ari_0) {
   switch (PriceConst) {
   case 0:
      return (Close[Ari_0]);
   case 1:
      return (Open[Ari_0]);
   case 4:
      return ((High[Ari_0] + Low[Ari_0]) / 2.0);
   case 5:
      return ((Close[Ari_0] + High[Ari_0] + Low[Ari_0]) / 3.0);
   case 6:
      return ((2.0 * Close[Ari_0] + High[Ari_0] + Low[Ari_0]) / 4.0);
   }
   return (Open[Ari_0]);
}

// 418A50FDF9ED3CECAF80899543E105B5
void f0_1(int Ari_0) {
   double Lcd_4;
   double Lcd_12;
   for (int Lci_20 = Ari_0 + SR + 2; Lci_20 >= Ari_0; Lci_20--) {
      Lcd_4 = Glda_112[ArrayMaximum(Glda_112, FP, Lci_20)];
      Lcd_12 = Glda_112[ArrayMinimum(Glda_112, FP, Lci_20)];
      Glda_116[Lci_20] = ((SMF + 2) * 2 * Glda_112[Lci_20] - (Lcd_4 + Lcd_12)) / 2.0 / (SMF + 1);
   }
}

// 1E5FD5E14F4FE0B32218614DD15E37E3
void f0_0(int Ari_0) {
   int Lci_4;
   int Lci_8;
   int Lci_12;
   int index_16;
   int Lci_20 = Ari_0 - 1;
   int Lci_24 = 0;
   int Lci_28 = 0;
   while (Lci_20 < Gli_144 && Lci_12 == 0) {
      Lci_20++;
      Gl_ibuf_108[Lci_20] = 0;
      Lci_4 = Lci_20 - MainRZZ;
      if (Lci_4 < Ari_0) Lci_4 = Ari_0;
      Lci_8 = Lci_20 + MainRZZ;
      if (Lci_20 == ArrayMinimum(Glda_116, Lci_8 - Lci_4 + 1, Lci_4)) {
         Lci_12 = -1;
         Lci_24 = Lci_20;
      }
      if (Lci_20 == ArrayMaximum(Glda_116, Lci_8 - Lci_4 + 1, Lci_4)) {
         Lci_12 = 1;
         Lci_28 = Lci_20;
      }
   }
   if (Lci_12 != 0) {
      index_16 = 0;
      if (Lci_20 > Ari_0) {
         if (Glda_116[Lci_20] > Glda_116[Ari_0]) {
            if (Lci_12 == 1) {
               if (Lci_20 >= Ari_0 + MainRZZ && index_16 < 5) {
                  index_16++;
                  Glia_136[index_16] = Lci_20;
               }
               Lci_28 = Lci_20;
               Gl_ibuf_108[Lci_20] = Glda_116[Lci_20];
            }
         } else {
            if (Lci_12 == -1) {
               if (Lci_20 >= Ari_0 + MainRZZ && index_16 < 5) {
                  index_16++;
                  Glia_136[index_16] = Lci_20;
               }
               Lci_24 = Lci_20;
               Gl_ibuf_108[Lci_20] = Glda_116[Lci_20];
            }
         }
      }
      while (Lci_20 < Gli_160 || index_16 < 5) {
         Gl_ibuf_108[Lci_20] = 0;
         Lci_4 = Lci_20 - MainRZZ;
         if (Lci_4 < Ari_0) Lci_4 = Ari_0;
         Lci_8 = Lci_20 + MainRZZ;
         if (Lci_20 == ArrayMinimum(Glda_116, Lci_8 - Lci_4 + 1, Lci_4)) {
            if (Lci_12 == -1 && Glda_116[Lci_20] < Glda_116[Lci_24]) {
               if (Lci_20 >= Ari_0 + MainRZZ && index_16 < 5) Glia_136[index_16] = Lci_20;
               Gl_ibuf_108[Lci_24] = 0;
               Gl_ibuf_108[Lci_20] = Glda_116[Lci_20];
               Lci_24 = Lci_20;
            }
            if (Lci_12 == 1) {
               if (Lci_20 >= Ari_0 + MainRZZ && index_16 < 5) {
                  index_16++;
                  Glia_136[index_16] = Lci_20;
               }
               Gl_ibuf_108[Lci_20] = Glda_116[Lci_20];
               Lci_12 = -1;
               Lci_24 = Lci_20;
            }
         }
         if (Lci_20 == ArrayMaximum(Glda_116, Lci_8 - Lci_4 + 1, Lci_4)) {
            if (Lci_12 == 1 && Glda_116[Lci_20] > Glda_116[Lci_28]) {
               if (Lci_20 >= Ari_0 + MainRZZ && index_16 < 5) Glia_136[index_16] = Lci_20;
               Gl_ibuf_108[Lci_28] = 0;
               Gl_ibuf_108[Lci_20] = Glda_116[Lci_20];
               Lci_28 = Lci_20;
            }
            if (Lci_12 == -1) {
               if (Lci_20 >= Ari_0 + MainRZZ && index_16 < 5) {
                  index_16++;
                  Glia_136[index_16] = Lci_20;
               }
               Gl_ibuf_108[Lci_20] = Glda_116[Lci_20];
               Lci_12 = 1;
               Lci_28 = Lci_20;
            }
         }
         Lci_20++;
         if (Lci_20 > Gli_144) return;
      }
      Gli_152 = Bars - Glia_136[5];
      Gl_ibuf_108[Ari_0] = Glda_116[Ari_0];
      return;
   }
}

// D7AA45E64B21C1E5042B57F70530FB9B
void f0_4(int Ari_0) {
   int Lci_4;
   int Lci_8;
   int Lci_12;
   int index_16;
   int Lci_20 = Ari_0 - 1;
   int Lci_24 = 0;
   int Lci_28 = 0;
   while (Lci_20 <= Gli_160 && Lci_12 == 0) {
      Lci_20++;
      Gl_ibuf_132[Lci_20] = 0;
      Gl_ibuf_128[Lci_20] = 0;
      Gl_ibuf_124[Lci_20] = 0;
      Gl_ibuf_120[Lci_20] = 0;
      Gl_ibuf_104[Lci_20] = 0;
      Lci_4 = Lci_20 - SRZZ;
      if (Lci_4 < Ari_0) Lci_4 = Ari_0;
      Lci_8 = Lci_20 + SRZZ;
      if (Lci_20 == ArrayMinimum(Glda_116, Lci_8 - Lci_4 + 1, Lci_4)) {
         Lci_12 = -1;
         Lci_24 = Lci_20;
      }
      if (Lci_20 == ArrayMaximum(Glda_116, Lci_8 - Lci_4 + 1, Lci_4)) {
         Lci_12 = 1;
         Lci_28 = Lci_20;
      }
   }
   if (Lci_12 != 0) {
      index_16 = 0;
      if (Lci_20 > Ari_0) {
         if (Glda_116[Lci_20] > Glda_116[Ari_0]) {
            if (Lci_12 == 1) {
               if (Lci_20 >= Ari_0 + SRZZ && index_16 < 4) {
                  index_16++;
                  Glia_140[index_16] = Lci_20;
               }
               Lci_28 = Lci_20;
               Gl_ibuf_124[Lci_20 - 1] = Open[Lci_20 - 1];
            }
         } else {
            if (Lci_12 == -1) {
               if (Lci_20 >= Ari_0 + SRZZ && index_16 < 4) {
                  index_16++;
                  Glia_140[index_16] = Lci_20;
               }
               Lci_24 = Lci_20;
               Gl_ibuf_120[Lci_20 - 1] = Open[Lci_20 - 1];
            }
         }
      }
      while (Lci_20 <= Gli_160 || index_16 < 4) {
         Gl_ibuf_132[Lci_20] = 0;
         Gl_ibuf_128[Lci_20] = 0;
         Gl_ibuf_124[Lci_20] = 0;
         Gl_ibuf_120[Lci_20] = 0;
         Gl_ibuf_104[Lci_20] = 0;
         Lci_4 = Lci_20 - SRZZ;
         if (Lci_4 < Ari_0) Lci_4 = Ari_0;
         Lci_8 = Lci_20 + SRZZ;
         if (Lci_20 == ArrayMinimum(Glda_116, Lci_8 - Lci_4 + 1, Lci_4)) {
            if (Lci_12 == -1 && Glda_116[Lci_20] < Glda_116[Lci_24]) {
               if (Lci_20 >= Ari_0 + SRZZ && index_16 < 4) Glia_140[index_16] = Lci_20;
               Gl_ibuf_120[Lci_24 - 1] = 0;
               Gl_ibuf_120[Lci_20 - 1] = Open[Lci_20 - 1];
               Lci_24 = Lci_20;
            }
            if (Lci_12 == 1) {
               if (Lci_20 >= Ari_0 + SRZZ && index_16 < 4) {
                  index_16++;
                  Glia_140[index_16] = Lci_20;
               }
               Gl_ibuf_120[Lci_20 - 1] = Open[Lci_20 - 1];
               Lci_12 = -1;
               Lci_24 = Lci_20;
            }
         }
         if (Lci_20 == ArrayMaximum(Glda_116, Lci_8 - Lci_4 + 1, Lci_4)) {
            if (Lci_12 == 1 && Glda_116[Lci_20] > Glda_116[Lci_28]) {
               if (Lci_20 >= Ari_0 + SRZZ && index_16 < 4) Glia_140[index_16] = Lci_20;
               Gl_ibuf_124[Lci_28 - 1] = 0;
               Gl_ibuf_124[Lci_20 - 1] = Open[Lci_20 - 1];
               Lci_28 = Lci_20;
            }
            if (Lci_12 == -1) {
               if (Lci_20 >= Ari_0 + SRZZ && index_16 < 4) {
                  index_16++;
                  Glia_140[index_16] = Lci_20;
               }
               Gl_ibuf_124[Lci_20 - 1] = Open[Lci_20 - 1];
               Lci_12 = 1;
               Lci_28 = Lci_20;
            }
         }
         Lci_20++;
         if (Lci_20 > Gli_160) return;
      }
      Gli_148 = Bars - Glia_140[4];
      return;
   }
}

// 84E027B4CBED3B483292C9F32152E30C
void f0_3() {
   int Lci_0;
   int Lci_4 = 0;
   for (int Lci_8 = Gli_160; Gl_ibuf_108[Lci_8] == 0.0; Lci_8--) {
   }
   int Lci_12 = Lci_8;
   double Lcd_16 = Gl_ibuf_108[Lci_8];
   for (Lci_8--; Gl_ibuf_108[Lci_8] == 0.0; Lci_8--) {
   }
   if (Gl_ibuf_108[Lci_8] > Lcd_16) Lci_4 = 1;
   if (Gl_ibuf_108[Lci_8] > 0.0 && Gl_ibuf_108[Lci_8] < Lcd_16) Lci_4 = -1;
   Lcd_16 = Gl_ibuf_108[Lci_12];
   for (Lci_8 = Lci_12 - 1; Lci_8 > 0; Lci_8--) {
      if (Gl_ibuf_108[Lci_8] > Lcd_16) {
         Lci_4 = -1;
         Lcd_16 = Gl_ibuf_108[Lci_8];
      }
      if (Gl_ibuf_108[Lci_8] > 0.0 && Gl_ibuf_108[Lci_8] < Lcd_16) {
         Lci_4 = 1;
         Lcd_16 = Gl_ibuf_108[Lci_8];
      }
      if (Lci_4 > 0 && Gl_ibuf_124[Lci_8] > 0.0) {
         Gl_ibuf_104[Lci_8] = Open[Lci_8];
         Gl_ibuf_124[Lci_8] = 0;
      }
      if (Lci_4 < 0 && Gl_ibuf_120[Lci_8] > 0.0) {
         Gl_ibuf_104[Lci_8] = Open[Lci_8];
         Gl_ibuf_120[Lci_8] = 0;
      }
      if (Lci_4 > 0 && Gl_ibuf_120[Lci_8] > 0.0) {
         if (Lci_8 > 1) {
            Lci_12 = Lci_8 - 1;
            Lci_0 = Lci_12 - SRZZ + 1;
            if (Lci_0 < 0) Lci_0 = 0;
            for (int Lci_24 = Lci_12; Lci_24 >= Lci_0 && Gl_ibuf_124[Lci_24] == 0.0; Lci_24--) {
               Gl_ibuf_128[Lci_24] = Gl_ibuf_120[Lci_8];
               Gl_ibuf_132[Lci_24] = 0;
            }
         }
         if (Lci_8 == 1) Gl_ibuf_128[0] = Gl_ibuf_120[Lci_8];
      }
      if (Lci_4 < 0 && Gl_ibuf_124[Lci_8] > 0.0) {
         if (Lci_8 > 1) {
            Lci_12 = Lci_8 - 1;
            Lci_0 = Lci_12 - SRZZ + 1;
            if (Lci_0 < 0) Lci_0 = 0;
            for (Lci_24 = Lci_12; Lci_24 >= Lci_0 && Gl_ibuf_120[Lci_24] == 0.0; Lci_24--) {
               Gl_ibuf_132[Lci_24] = Gl_ibuf_124[Lci_8];
               Gl_ibuf_128[Lci_24] = 0;
            }
         }
         if (Lci_8 == 1) Gl_ibuf_132[0] = Gl_ibuf_124[Lci_8];
      }
   }
}

// 52D46093050F38C27267BCE42543EF60
void deinit() {
}

// E37F0136AA3FFAF149B351F6A4C948E9
int init() {
   IndicatorBuffers(8);
   SetIndexBuffer(0, Gl_ibuf_104);
   SetIndexStyle(0, DRAW_ARROW, EMPTY, 2);
   SetIndexArrow(0, SYMBOL_STOPSIGN);
   SetIndexEmptyValue(0, 0.0);
   SetIndexBuffer(1, Gl_ibuf_108);
   if (DrawZZ) {
      SetIndexStyle(1, DRAW_SECTION, EMPTY, 2);
      SetIndexEmptyValue(1, 0.0);
   } else SetIndexStyle(1, DRAW_NONE);
   SetIndexBuffer(2, Glda_112);
   SetIndexStyle(2, DRAW_NONE);
   SetIndexBuffer(3, Glda_116);
   SetIndexStyle(3, DRAW_NONE);
   SetIndexBuffer(4, Gl_ibuf_120);
   SetIndexStyle(4, DRAW_ARROW, EMPTY, 2);
   SetIndexArrow(4, 233);
   SetIndexEmptyValue(4, 0.0);
   SetIndexBuffer(5, Gl_ibuf_124);
   SetIndexStyle(5, DRAW_ARROW, EMPTY, 2);
   SetIndexArrow(5, 234);
   SetIndexEmptyValue(5, 0.0);
   SetIndexBuffer(6, Gl_ibuf_128);
   SetIndexStyle(6, DRAW_ARROW, EMPTY, 1);
   SetIndexArrow(6, 167);
   SetIndexEmptyValue(6, 0.0);
   SetIndexBuffer(7, Gl_ibuf_132);
   SetIndexStyle(7, DRAW_ARROW, EMPTY, 1);
   SetIndexArrow(7, 167);
   SetIndexEmptyValue(7, 0.0);
   return (0);
}

// EA2B2676C28C0DB26D39331A336C6B92
int start() {
   int Lci_0 = IndicatorCounted();
   if (Lci_0 < 0) return (-1);
   if (Lci_0 > 0) Lci_0--;
   if (Gli_164 == TRUE) {
      if (SR < 2) SR = 2;
      if (Bars <= (MainRZZ + FP + SR + 2) * 2) return (-1);
      if (SRZZ <= SR) SRZZ = SR + 1;
      Gli_144 = Bars - (MainRZZ + FP + SR + 2);
      Gli_160 = Gli_144;
      Gli_156 = Gli_160;
      Gl_bars_168 = Bars;
      Gli_164 = FALSE;
   }
   int Lci_4 = Bars - Lci_0;
   for (int Lci_8 = Lci_4; Lci_8 >= 0; Lci_8--) f0_6(Lci_8);
   if (Gl_bars_168 != Bars) {
      Gli_156 = Bars - Gli_148;
      Gli_160 = Bars - Gli_152;
      Gl_bars_168 = Bars;
   }
   f0_4(0);
   f0_0(0);
   f0_3();
   return (0);
}