/*
   Generated by EX4-TO-MQ4 decompiler V4.0.438.1 [-]
   Website: https://purebeam.biz
   E-mail : purebeam@gmail.com
*/

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Aqua

double g_ibuf_76[];
double g_ibuf_80[];
double g_ibuf_84[];
double g_ibuf_88[];
double g_ibuf_92[];
int gi_96 = 3;
bool gi_100 = FALSE;

int init() {
   IndicatorBuffers(5);
   SetIndexStyle(1, DRAW_LINE);
   SetIndexStyle(4, DRAW_NONE);
   SetIndexStyle(0, DRAW_SECTION);
   SetIndexBuffer(0, g_ibuf_76);
   SetIndexBuffer(1, g_ibuf_80);
   SetIndexBuffer(4, g_ibuf_84);
   SetIndexBuffer(2, g_ibuf_88);
   SetIndexBuffer(3, g_ibuf_92);
   SetIndexEmptyValue(0, 0.0);
   IndicatorShortName("H-EImpulse Copyright © hespider.com");
   return (0);
}

int start() {
   int li_0;
   int li_8;
   int li_12;
   int li_16;
   int li_28;
   int li_32;
   double ld_36;
   double ld_44;
   double ld_52;
   double ld_60;
   double ld_68;
   double ld_76;
   int ind_counted_4 = IndicatorCounted();
   if (ind_counted_4 == 0 && gi_100) {
      ArrayInitialize(g_ibuf_84, 0.0);
      ArrayInitialize(g_ibuf_80, 0.0);
      ArrayInitialize(g_ibuf_88, 0.0);
      ArrayInitialize(g_ibuf_92, 0.0);
   }
   if (ind_counted_4 == 0) {
      li_8 = Bars - 3;
      gi_100 = TRUE;
   }
   if (ind_counted_4 > 0) {
      while (li_12 < gi_96 && li_0 < 100) {
         ld_44 = g_ibuf_84[li_0];
         if (ld_44 != 0.0) li_12++;
         li_0++;
      }
      li_0--;
      li_8 = li_0;
      if (g_ibuf_92[li_0] != 0.0) {
         ld_52 = g_ibuf_92[li_0];
         li_16 = 1;
      } else {
         ld_60 = g_ibuf_88[li_0];
         li_16 = -1;
      }
      for (li_0 = li_8 - 1; li_0 >= 0; li_0--) {
         g_ibuf_84[li_0] = 0.0;
         g_ibuf_80[li_0] = 0.0;
         g_ibuf_92[li_0] = 0.0;
         g_ibuf_88[li_0] = 0.0;
      }
   }
   for (int li_20 = li_8; li_20 >= 0; li_20--) {
      ld_36 = Low[iLowest(NULL, 0, MODE_LOW, 3, li_20)];
      if (ld_36 == ld_76) ld_36 = 0.0;
      else {
         ld_76 = ld_36;
         if (Low[li_20] - ld_36 > 3.0 * Point) ld_36 = 0.0;
         else {
            for (int li_24 = 1; li_24 <= 1; li_24++) {
               ld_44 = g_ibuf_92[li_20 + li_24];
               if (ld_44 != 0.0 && ld_44 > ld_36) g_ibuf_92[li_20 + li_24] = 0.0;
            }
         }
      }
      if (Low[li_20] == ld_36) g_ibuf_92[li_20] = ld_36;
      else g_ibuf_92[li_20] = 0.0;
      ld_36 = High[iHighest(NULL, 0, MODE_HIGH, 3, li_20)];
      if (ld_36 == ld_68) ld_36 = 0.0;
      else {
         ld_68 = ld_36;
         if (ld_36 - High[li_20] > 3.0 * Point) ld_36 = 0.0;
         else {
            for (li_24 = 1; li_24 <= 1; li_24++) {
               ld_44 = g_ibuf_88[li_20 + li_24];
               if (ld_44 != 0.0 && ld_44 < ld_36) g_ibuf_88[li_20 + li_24] = 0.0;
            }
         }
      }
      if (High[li_20] == ld_36) g_ibuf_88[li_20] = ld_36;
      else g_ibuf_88[li_20] = 0.0;
   }
   if (li_16 == 0) {
      ld_76 = 0;
      ld_68 = 0;
   } else {
      ld_76 = ld_52;
      ld_68 = ld_60;
   }
   for (li_20 = li_8; li_20 >= 0; li_20--) {
      ld_44 = 0.0;
      g_ibuf_76[li_20] = (Close[li_20 + 1] - (Close[li_20 + 2])) / Point - (g_ibuf_76[li_20 + 1]) / 2.0 - (g_ibuf_88[li_20 + 1]);
      switch (li_16) {
      case 0:
         if (!(ld_76 == 0.0 && ld_68 == 0.0)) break;
         if (g_ibuf_88[li_20] != 0.0) {
            ld_68 = High[li_20];
            li_28 = li_20;
            li_16 = -1;
            g_ibuf_84[li_20] = ld_68;
            g_ibuf_80[li_20] = g_ibuf_84[li_20];
//            g_ibuf_80[li_20] = g_ibuf_84[li_20] - 0.001;
            ld_44 = 1;
         }
         if (g_ibuf_92[li_20] == 0.0) break;
         ld_76 = Low[li_20];
         li_32 = li_20;
         li_16 = 1;
         g_ibuf_84[li_20] = ld_76;
         g_ibuf_80[li_20] = g_ibuf_84[li_20];
//         g_ibuf_80[li_20] = g_ibuf_84[li_20] + 0.001;
         ld_44 = 1;
         break;
      case 1:
         if (g_ibuf_92[li_20] != 0.0 && g_ibuf_92[li_20] < ld_76 && g_ibuf_88[li_20] == 0.0) {
            g_ibuf_84[li_32] = 0.0;
            g_ibuf_80[li_32] = 0;
            li_32 = li_20;
            ld_76 = g_ibuf_92[li_20];
            g_ibuf_84[li_20] = ld_76;
            g_ibuf_80[li_20] = g_ibuf_84[li_20];
//            g_ibuf_80[li_20] = g_ibuf_84[li_20] + 0.001;
            ld_44 = 1;
         }
         if (!(g_ibuf_88[li_20] != 0.0 && g_ibuf_92[li_20] == 0.0)) break;
         ld_68 = g_ibuf_88[li_20];
         li_28 = li_20;
         g_ibuf_84[li_20] = ld_68;
         g_ibuf_80[li_20] = g_ibuf_84[li_20];
//         g_ibuf_80[li_20] = g_ibuf_84[li_20] - 0.001;
         li_16 = -1;
         ld_44 = 1;
         break;
      case -1:
         if (g_ibuf_88[li_20] != 0.0 && g_ibuf_88[li_20] > ld_68 && g_ibuf_92[li_20] == 0.0) {
            g_ibuf_84[li_28] = 0.0;
            g_ibuf_80[li_28] = 0.0;
            li_28 = li_20;
            ld_68 = g_ibuf_88[li_20];
            g_ibuf_84[li_20] = ld_68;
            g_ibuf_80[li_20] = g_ibuf_84[li_20];
//            g_ibuf_80[li_20] = g_ibuf_84[li_20] - 0.001;
         }
         if (!(g_ibuf_92[li_20] != 0.0 && g_ibuf_88[li_20] == 0.0)) break;
         ld_76 = g_ibuf_92[li_20];
         li_32 = li_20;
         g_ibuf_84[li_20] = ld_76;
         g_ibuf_80[li_20] = g_ibuf_84[li_20];
//         g_ibuf_80[li_20] = g_ibuf_84[li_20] + 0.001;
         li_16 = 1;
         break;
      default:
         return/*(WARN)*/;
      }
   }
   return (0);
}