/*
   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 6
#property indicator_color1 Blue
#property indicator_color2 Blue
#property indicator_color3 Red
#property indicator_color4 Red
#property indicator_color5 Gray
#property indicator_color6 Fuchsia

extern int FastEMA = 12;
extern int SlowEMA = 26;
extern int Signal = 9;
int g_applied_price_88 = PRICE_CLOSE;
string gs_92 = "M1;M5;M15;M30;H1;H4;D1;W1";
int gi_100 = 35;
bool gi_104 = FALSE;
bool gi_108 = TRUE;
bool gi_112 = TRUE;
int g_color_116 = Silver;
int g_color_120 = DimGray;
double g_ibuf_124[];
double g_ibuf_128[];
double g_ibuf_132[];
double g_ibuf_136[];
double g_ibuf_140[];
double g_ibuf_144[];
double g_ibuf_148[];
int gi_152;
int g_arr_size_156;
int g_window_160;
int gia_164[];
string gsa_168[];
string gs_172;
double gd_180;
double gd_188;
double gda_196[];
bool gi_200 = FALSE;

int init() {
   int li_8;
   string ls_12;
   string ls_20;
   int li_28;
   IndicatorBuffers(7);
   SetIndexBuffer(0, g_ibuf_124);
   SetIndexBuffer(1, g_ibuf_128);
   SetIndexBuffer(2, g_ibuf_132);
   SetIndexBuffer(3, g_ibuf_136);
   SetIndexBuffer(4, g_ibuf_140);
   SetIndexBuffer(5, g_ibuf_144);
   SetIndexBuffer(6, g_ibuf_148);
   SetIndexStyle(0, DRAW_HISTOGRAM);
   SetIndexStyle(1, DRAW_HISTOGRAM);
   SetIndexStyle(2, DRAW_HISTOGRAM);
   SetIndexStyle(3, DRAW_HISTOGRAM);
   SetIndexStyle(6, DRAW_NONE);
   gs_92 = StringTrimLeft(StringTrimRight(gs_92));
   if (StringSubstr(gs_92, StringLen(gs_92), 1) != ";") gs_92 = StringConcatenate(gs_92, ";");
   int li_0 = 0;
   for (int l_index_4 = StringFind(gs_92, ";", li_0); l_index_4 > 0; l_index_4 = StringFind(gs_92, ";", li_0)) {
      ls_12 = StringSubstr(gs_92, li_0, l_index_4 - li_0);
      li_8 = stringToTimeFrame(ls_12);
      if (li_8 > 0) {
         ArrayResize(gsa_168, ArraySize(gsa_168) + 1);
         ArrayResize(gia_164, ArraySize(gia_164) + 1);
         gsa_168[ArraySize(gsa_168) - 1] = TimeFrameToString(li_8);
         gia_164[ArraySize(gia_164) - 1] = li_8;
      }
      li_0 = l_index_4 + 1;
   }
   if (gi_104) gi_152 = 1;
   else gi_152 = 0;
   g_arr_size_156 = ArraySize(gia_164);
   gi_100 = MathMax(gi_100, 30);
   for (l_index_4 = 0; l_index_4 < 7; l_index_4++) SetIndexShift(l_index_4, gi_152 * (gi_100 + 1));
   if (gi_108) {
      for (l_index_4 = 1; l_index_4 < g_arr_size_156; l_index_4++) {
         if (Period() == gia_164[l_index_4]) {
            ls_20 = gsa_168[l_index_4];
            li_28 = gia_164[l_index_4];
            for (int li_32 = l_index_4; li_32 > 0; li_32--) {
               gsa_168[li_32] = gsa_168[li_32 - 1];
               gia_164[li_32] = gia_164[li_32 - 1];
            }
            gsa_168[0] = ls_20;
            gia_164[0] = li_28;
         }
      }
   }
   gs_172 = "MTF_MACD" + " (" + FastEMA + "," + SlowEMA + "," + Signal + ")";
   IndicatorShortName(gs_172);
   return (0);
}

int deinit() {
   for (int l_count_0 = 0; l_count_0 < g_arr_size_156; l_count_0++) {
      ObjectDelete("MTF_MACD" + g_window_160 + l_count_0);
      ObjectDelete("MTF_MACD" + g_window_160 + l_count_0 + "label");
   }
   return (0);
}

int start() {
   double ld_8;
   string l_name_16;
   int l_shift_32;
   double ld_0 = 1.0;
   int l_index_24 = 0;
   if (!gi_200) {
      gi_200 = TRUE;
      g_window_160 = WindowFind(gs_172);
      gs_172 = "MTF_MACD" + g_window_160 + " (" + FastEMA + "," + SlowEMA + "," + Signal + ")";
      IndicatorShortName(gs_172);
      ArrayResize(gda_196, g_arr_size_156);
   }
   ArrayInitialize(gda_196, 0);
   gd_180 = 999999;
   gd_188 = -999999;
   for (int l_index_28 = 0; l_index_28 < g_arr_size_156; l_index_28++) {
      l_shift_32 = 0;
      while (l_shift_32 < gi_100) {
         g_ibuf_148[l_index_24] = iMACD(NULL, gia_164[l_index_28], FastEMA, SlowEMA, Signal, g_applied_price_88, MODE_MAIN, l_shift_32);
         g_ibuf_144[l_index_24] = iMACD(NULL, gia_164[l_index_28], FastEMA, SlowEMA, Signal, g_applied_price_88, MODE_SIGNAL, l_shift_32);
         checkMinMax(l_index_24, l_index_28);
         l_shift_32++;
         l_index_24++;
      }
      g_ibuf_124[l_index_24] = EMPTY_VALUE;
      g_ibuf_128[l_index_24] = EMPTY_VALUE;
      g_ibuf_132[l_index_24] = EMPTY_VALUE;
      g_ibuf_136[l_index_24] = EMPTY_VALUE;
      g_ibuf_140[l_index_24] = EMPTY_VALUE;
      g_ibuf_144[l_index_24] = EMPTY_VALUE;
      g_ibuf_148[l_index_24] = EMPTY_VALUE;
      l_index_24++;
      l_name_16 = "MTF_MACD" + g_window_160 + l_index_28;
      if (ObjectFind(l_name_16) == -1) ObjectCreate(l_name_16, OBJ_TREND, g_window_160, 0, 0);
      ObjectSet(l_name_16, OBJPROP_TIME1, myTime(l_index_24 - gi_152 * (gi_100 + 1) - 1));
      ObjectSet(l_name_16, OBJPROP_TIME2, myTime(l_index_24 - gi_152 * (gi_100 + 1) - 1));
      ObjectSet(l_name_16, OBJPROP_COLOR, g_color_120);
      ObjectSet(l_name_16, OBJPROP_WIDTH, 2);
      l_name_16 = "MTF_MACD" + g_window_160 + l_index_28 + "label";
      if (ObjectFind(l_name_16) == -1) ObjectCreate(l_name_16, OBJ_TEXT, g_window_160, 0, 0);
      ObjectSet(l_name_16, OBJPROP_TIME1, myTime(l_index_24 - gi_152 * (gi_100 + 1) - 6));
      ObjectSetText(l_name_16, gsa_168[l_index_28], 9, "Arial", g_color_116);
   }
   l_index_24 = 0;
   if (gi_112) {
      for (l_shift_32 = 0; l_shift_32 < g_arr_size_156; l_shift_32++)
         if (ld_8 < gda_196[l_shift_32]) ld_8 = gda_196[l_shift_32];
   }
   for (l_index_28 = 0; l_index_28 < g_arr_size_156; l_index_28++) {
      l_name_16 = "MTF_MACD" + g_window_160 + l_index_28;
      ObjectSet(l_name_16, OBJPROP_PRICE1, gd_188);
      ObjectSet(l_name_16, OBJPROP_PRICE2, gd_180);
      l_name_16 = "MTF_MACD" + g_window_160 + l_index_28 + "label";
      ObjectSet(l_name_16, OBJPROP_PRICE1, gd_188);
      if (gi_112) ld_0 = ld_8 / gda_196[l_index_28];
      l_shift_32 = 0;
      while (l_shift_32 < gi_100) {
         g_ibuf_140[l_index_24] = g_ibuf_148[l_index_24] * ld_0;
         g_ibuf_144[l_index_24] = g_ibuf_144[l_index_24] * ld_0;
         if (g_ibuf_148[l_index_24] >= 0.0) {
            g_ibuf_132[l_index_24] = EMPTY_VALUE;
            g_ibuf_136[l_index_24] = EMPTY_VALUE;
            if (g_ibuf_148[l_index_24] >= g_ibuf_148[l_index_24 + 1]) {
               g_ibuf_124[l_index_24] = g_ibuf_148[l_index_24] * ld_0;
               g_ibuf_128[l_index_24] = EMPTY_VALUE;
            } else {
               g_ibuf_128[l_index_24] = g_ibuf_148[l_index_24] * ld_0;
               g_ibuf_124[l_index_24] = EMPTY_VALUE;
            }
         } else {
            g_ibuf_124[l_index_24] = EMPTY_VALUE;
            g_ibuf_128[l_index_24] = EMPTY_VALUE;
            if (g_ibuf_148[l_index_24] < g_ibuf_148[l_index_24 + 1]) {
               g_ibuf_132[l_index_24] = g_ibuf_148[l_index_24] * ld_0;
               g_ibuf_136[l_index_24] = EMPTY_VALUE;
            } else {
               g_ibuf_136[l_index_24] = g_ibuf_148[l_index_24] * ld_0;
               g_ibuf_132[l_index_24] = EMPTY_VALUE;
            }
         }
         l_shift_32++;
         l_index_24++;
      }
      l_index_24 += 1;
   }
   for (l_shift_32 = 0; l_shift_32 < 7; l_shift_32++) SetIndexDrawBegin(l_shift_32, Bars - l_index_24);
   return (0);
}

void checkMinMax(int ai_0, int ai_4) {
   double ld_8 = MathMin(g_ibuf_148[ai_0], g_ibuf_144[ai_0]);
   double ld_16 = MathMax(g_ibuf_148[ai_0], g_ibuf_144[ai_0]);
   gd_180 = MathMin(ld_8, gd_180);
   gd_188 = MathMax(ld_16, gd_188);
   gda_196[ai_4] = MathMax(gda_196[ai_4], MathMax(MathAbs(ld_8), MathAbs(ld_16)));
}

int myTime(int ai_0) {
   if (ai_0 < 0) return (Time[0] + 60 * Period() * MathAbs(ai_0));
   return (Time[ai_0]);
}

int stringToTimeFrame(string as_0) {
   int li_ret_8 = 0;
   as_0 = StringUpperCase(as_0);
   if (as_0 == "M1" || as_0 == "1") li_ret_8 = 1;
   if (as_0 == "M5" || as_0 == "5") li_ret_8 = 5;
   if (as_0 == "M15" || as_0 == "15") li_ret_8 = 15;
   if (as_0 == "M30" || as_0 == "30") li_ret_8 = 30;
   if (as_0 == "H1" || as_0 == "60") li_ret_8 = 60;
   if (as_0 == "H4" || as_0 == "240") li_ret_8 = 240;
   if (as_0 == "D1" || as_0 == "1440") li_ret_8 = 1440;
   if (as_0 == "W1" || as_0 == "10080") li_ret_8 = 10080;
   return (li_ret_8);
}

string TimeFrameToString(int ai_0) {
   string ls_ret_4 = "Current time frame";
   switch (ai_0) {
   case 1:
      ls_ret_4 = "M1";
      break;
   case 5:
      ls_ret_4 = "M5";
      break;
   case 15:
      ls_ret_4 = "M15";
      break;
   case 30:
      ls_ret_4 = "M30";
      break;
   case 60:
      ls_ret_4 = "H1";
      break;
   case 240:
      ls_ret_4 = "H4";
      break;
   case 1440:
      ls_ret_4 = "D1";
      break;
   case 10080:
      ls_ret_4 = "W1";
   }
   return (ls_ret_4);
}

string StringUpperCase(string as_0) {
   int li_20;
   string ls_ret_8 = as_0;
   for (int li_16 = StringLen(as_0) - 1; li_16 >= 0; li_16--) {
      li_20 = StringGetChar(ls_ret_8, li_16);
      if ((li_20 > '`' && li_20 < '{') || (li_20 > 'ß' && li_20 < 256)) ls_ret_8 = StringSetChar(ls_ret_8, li_16, li_20 - 32);
      else
         if (li_20 > -33 && li_20 < 0) ls_ret_8 = StringSetChar(ls_ret_8, li_16, li_20 + 224);
   }
   return (ls_ret_8);
}
