/*
   Generated by EX4-TO-MQ4 decompiler V4.0.224.1 []
   Website: http://purebeam.biz
   E-mail : purebeam@gmail.com
*/
#property copyright "Copyright © 2011.04.12, Zamanib"
#property link      ""

#property indicator_separate_window
#property indicator_minimum 0.0
#property indicator_maximum 1.0
#property indicator_buffers 7
#property indicator_color1 Green
#property indicator_color2 Green
#property indicator_color3 Blue
#property indicator_color4 Red
#property indicator_color5 Red
#property indicator_color6 DeepPink
#property indicator_color7 Gray

string gs_76 = "ZB-CloudMatrix";
double gd_84 = 0.3;
int g_color_108 = Red;
extern int Tenkan = 9;
extern int Kijun = 26;
extern int Senkou = 52;
extern string ____Draw = "";
extern bool Signal_Arrows = FALSE;
double gd_136 = 0.3;
extern int maxBars = 2000;
double g_ibuf_148[];
double g_ibuf_152[];
double g_ibuf_156[];
double g_ibuf_160[];
double g_ibuf_164[];
double g_ibuf_168[];
double g_ibuf_172[];
int g_window_176;
datetime g_time_188;
datetime g_time_192;
bool gi_196;
int gi_200;
int g_stoplevel_204;
int gi_208;
double gd_212;
double g_tickvalue_220;
double gd_228;
double gd_236;

int init() {
   int li_0 = 167;
   int li_4 = 167;
   int li_8 = 119;
   int li_12 = 233;
   int li_16 = 167;
   int li_20 = 119;
   int li_24 = 234;
   SetIndexBuffer(0, g_ibuf_148);
   SetIndexArrow(0, li_4);
   SetIndexBuffer(1, g_ibuf_152);
   SetIndexArrow(1, li_8);
   SetIndexBuffer(2, g_ibuf_156);
   SetIndexArrow(2, li_12);
   SetIndexBuffer(3, g_ibuf_160);
   SetIndexArrow(3, li_16);
   SetIndexBuffer(4, g_ibuf_164);
   SetIndexArrow(4, li_20);
   SetIndexBuffer(5, g_ibuf_168);
   SetIndexArrow(5, li_24);
   SetIndexBuffer(6, g_ibuf_172);
   SetIndexArrow(6, li_0);
   SetIndexStyle(0, DRAW_ARROW);
   SetIndexStyle(1, DRAW_ARROW);
   SetIndexStyle(2, DRAW_ARROW);
   SetIndexStyle(3, DRAW_ARROW);
   SetIndexStyle(4, DRAW_ARROW);
   SetIndexStyle(5, DRAW_ARROW);
   SetIndexStyle(6, DRAW_ARROW);
   SetIndexLabel(0, NULL);
   SetIndexLabel(1, NULL);
   SetIndexLabel(2, NULL);
   SetIndexLabel(3, NULL);
   SetIndexLabel(4, NULL);
   SetIndexLabel(5, NULL);
   SetIndexLabel(6, NULL);
   gs_76 = gs_76 + " (" + Tenkan + "," + Kijun + "," + Senkou + ")";
   IndicatorShortName(gs_76);
   IndicatorDigits(Digits);
   Get_MarketInfos();
   return (0);
}

int start() {
   int li_12;
   if (g_window_176 == 0) g_window_176 = WindowFind(gs_76);
   if (gd_212 == 0.0) Get_MarketInfos();
   int li_8 = IndicatorCounted();
   if (li_8 > 0) li_8--;
   int li_4 = Bars - li_8;
   if (li_4 > maxBars) li_4 = maxBars;
   for (int li_0 = li_4; li_0 >= 0; li_0--) {
      li_12 = Get_KumoPrice_Breakout(li_0, Tenkan, Kijun, Senkou);
      if (Signal_Arrows == FALSE) {
         if (li_12 == 3) li_12 = 1;
         else
            if (li_12 == -3) li_12 = -1;
      }
      switch (li_12) {
      case 1:
         g_ibuf_148[li_0] = gd_84;
         g_ibuf_152[li_0] = EMPTY_VALUE;
         g_ibuf_156[li_0] = EMPTY_VALUE;
         g_ibuf_160[li_0] = EMPTY_VALUE;
         g_ibuf_164[li_0] = EMPTY_VALUE;
         g_ibuf_168[li_0] = EMPTY_VALUE;
         g_ibuf_172[li_0] = EMPTY_VALUE;
         break;
      case 2:
         g_ibuf_148[li_0] = EMPTY_VALUE;
         g_ibuf_152[li_0] = gd_84;
         g_ibuf_156[li_0] = EMPTY_VALUE;
         g_ibuf_160[li_0] = EMPTY_VALUE;
         g_ibuf_164[li_0] = EMPTY_VALUE;
         g_ibuf_168[li_0] = EMPTY_VALUE;
         g_ibuf_172[li_0] = EMPTY_VALUE;
         break;
      case 3:
         g_ibuf_148[li_0] = EMPTY_VALUE;
         g_ibuf_152[li_0] = EMPTY_VALUE;
         g_ibuf_156[li_0] = gd_84;
         g_ibuf_160[li_0] = EMPTY_VALUE;
         g_ibuf_164[li_0] = EMPTY_VALUE;
         g_ibuf_168[li_0] = EMPTY_VALUE;
         g_ibuf_172[li_0] = EMPTY_VALUE;
         break;
      case -1:
         g_ibuf_148[li_0] = EMPTY_VALUE;
         g_ibuf_152[li_0] = EMPTY_VALUE;
         g_ibuf_156[li_0] = EMPTY_VALUE;
         g_ibuf_160[li_0] = gd_84;
         g_ibuf_164[li_0] = EMPTY_VALUE;
         g_ibuf_168[li_0] = EMPTY_VALUE;
         g_ibuf_172[li_0] = EMPTY_VALUE;
         break;
      case -2:
         g_ibuf_148[li_0] = EMPTY_VALUE;
         g_ibuf_152[li_0] = EMPTY_VALUE;
         g_ibuf_156[li_0] = EMPTY_VALUE;
         g_ibuf_160[li_0] = EMPTY_VALUE;
         g_ibuf_164[li_0] = gd_84;
         g_ibuf_168[li_0] = EMPTY_VALUE;
         g_ibuf_172[li_0] = EMPTY_VALUE;
         break;
      case -3:
         g_ibuf_148[li_0] = EMPTY_VALUE;
         g_ibuf_152[li_0] = EMPTY_VALUE;
         g_ibuf_156[li_0] = EMPTY_VALUE;
         g_ibuf_160[li_0] = EMPTY_VALUE;
         g_ibuf_164[li_0] = EMPTY_VALUE;
         g_ibuf_168[li_0] = gd_84;
         g_ibuf_172[li_0] = EMPTY_VALUE;
         break;
      default:
         g_ibuf_148[li_0] = EMPTY_VALUE;
         g_ibuf_152[li_0] = EMPTY_VALUE;
         g_ibuf_156[li_0] = EMPTY_VALUE;
         g_ibuf_160[li_0] = EMPTY_VALUE;
         g_ibuf_164[li_0] = EMPTY_VALUE;
         g_ibuf_168[li_0] = EMPTY_VALUE;
         g_ibuf_172[li_0] = gd_84;
      }
   }
}

void Get_MarketInfos() {
   gi_200 = MarketInfo(Symbol(), MODE_SPREAD);
   g_stoplevel_204 = MarketInfo(Symbol(), MODE_STOPLEVEL);
   gd_212 = MarketInfo(Symbol(), MODE_POINT);
   g_tickvalue_220 = MarketInfo(Symbol(), MODE_TICKVALUE);
   gi_208 = MarketInfo(Symbol(), MODE_DIGITS);
   gd_228 = gi_200 * Point;
   gd_236 = g_stoplevel_204 * Point;
   if (gi_208 == 3 || gi_208 == 5) {
      gi_208--;
      gd_212 = 10.0 * gd_212;
      gi_200 = MathRound(gi_200 / 10.0);
      if (gi_200 < 1) gi_200 = 1;
   }
   gd_228 = gi_200 * gd_212;
}

int Get_KumoPrice_Breakout(int ai_0, int ai_4, int ai_8, int ai_12) {
   double l_ichimoku_16 = iIchimoku(Symbol(), Period(), ai_4, ai_8, ai_12, MODE_SENKOUSPANA, ai_0);
   double l_ichimoku_24 = iIchimoku(Symbol(), Period(), ai_4, ai_8, ai_12, MODE_SENKOUSPANB, ai_0);
   double l_ichimoku_32 = iIchimoku(Symbol(), Period(), ai_4, ai_8, ai_12, MODE_SENKOUSPANA, ai_0 + 1);
   double l_ichimoku_40 = iIchimoku(Symbol(), Period(), ai_4, ai_8, ai_12, MODE_SENKOUSPANB, ai_0 + 1);
   double ld_48 = MathMin(l_ichimoku_16, l_ichimoku_24);
   double ld_56 = MathMax(l_ichimoku_16, l_ichimoku_24);
   double ld_64 = MathMin(l_ichimoku_32, l_ichimoku_40);
   double ld_72 = MathMax(l_ichimoku_32, l_ichimoku_40);
   double l_iclose_80 = iClose(Symbol(), Period(), ai_0);
   double l_iclose_88 = iClose(Symbol(), Period(), ai_0 + 1);
   int li_ret_96 = 0;
   if (l_iclose_80 > ld_56) {
      if (l_iclose_88 <= ld_72) {
         li_ret_96 = 3;
         return (li_ret_96);
      }
      li_ret_96 = 1;
      return (li_ret_96);
   }
   if (l_iclose_80 < ld_48) {
      if (l_iclose_88 >= ld_64) {
         li_ret_96 = -3;
         return (li_ret_96);
      }
      li_ret_96 = -1;
      return (li_ret_96);
   }
   return (li_ret_96);
}