/*
   Generated by EX4-TO-MQ4 decompiler V4.0.224.1 []
   Website: http://purebeam.biz
   E-mail : purebeam@gmail.com
*/
#property copyright "Clode The Trader"
#property link      ""

#property indicator_separate_window
#property indicator_buffers 4
#property indicator_color1 Gray
#property indicator_color2 Blue
#property indicator_color3 Orange
#property indicator_color4 Red
#property indicator_level1 125.0
#property indicator_level2 -125.0

extern int CCI_Period = 55;
extern int num_bars = 2000;
extern string Match_Momentum_with_Indi_Levels = "***********";
extern int momentum = 125;
int gi_96 = 0;
bool gi_100 = TRUE;
int gi_104 = 0;
int g_bars_108 = 0;
int gi_112 = 0;
int gi_116 = 0;
int gi_120 = 0;
string gs_nothing_124 = "nothing";
int gi_132 = 0;
double g_icci_140;
double g_icci_148;
double gd_156 = 0.0;
double g_ibuf_164[];
double g_ibuf_168[];
double g_ibuf_172[];
double g_ibuf_176[];

int init() {
   IndicatorShortName("CCI Histo 4 colours (" + CCI_Period + ")");

   SetIndexStyle(0, DRAW_HISTOGRAM, STYLE_SOLID, 5, Gray);
   SetIndexBuffer(0, g_ibuf_164);
   SetIndexStyle(1, DRAW_HISTOGRAM, STYLE_SOLID, 5, Blue);
   SetIndexBuffer(1, g_ibuf_168);
   SetIndexStyle(2, DRAW_HISTOGRAM, STYLE_SOLID, 5, Orange);
   SetIndexBuffer(2, g_ibuf_172);
   SetIndexStyle(3, DRAW_HISTOGRAM, STYLE_SOLID, 5, Red);
   SetIndexBuffer(3, g_ibuf_176);
   return (0);
}

int deinit() {
   return (0);
}

int start() {
   int l_ind_counted_0 = IndicatorCounted();
   gi_116 = CCI_Period + num_bars;
   if (gi_116 == gi_120 && gs_nothing_124 == Symbol() && gi_132 == Time[4] - Time[5] && Bars - g_bars_108 < 2) gi_112 = Bars - g_bars_108;
   else gi_112 = -1;
   gs_nothing_124 = Symbol();
   gi_132 = Time[4] - Time[5];
   g_bars_108 = Bars;
   gi_120 = gi_116;
   if (gi_112 == gi_112 | 1 == FALSE) gi_104 = gi_112;
   else gi_100 = TRUE;
   if (gi_100) {
      g_ibuf_164[num_bars - 1] = 0;
      g_ibuf_168[num_bars - 1] = 0;
      g_ibuf_172[num_bars - 1] = 0;
      g_ibuf_176[num_bars - 1] = 0;
      gi_104 = num_bars - 2;
      gi_100 = FALSE;
   }
   for (gi_96 = gi_104; gi_96 >= 0; gi_96--) {
      g_ibuf_164[gi_96] = 0;
      g_ibuf_168[gi_96] = 0;
      g_ibuf_172[gi_96] = 0;
      g_ibuf_176[gi_96] = 0;
      g_icci_140 = iCCI(NULL, 0, CCI_Period, PRICE_TYPICAL, gi_96);
      g_icci_148 = iCCI(NULL, 0, CCI_Period, PRICE_TYPICAL, gi_96 + 1);
      if ((g_icci_148 >= 0.0 && g_icci_140 < 0.0) || (g_icci_148 <= 0.0 && g_icci_140 > 0.0)) gd_156 = 0;
      if (MathAbs(g_icci_148) > MathAbs(gd_156)) gd_156 = g_icci_148;
      if (g_icci_140 >= momentum) {
         if (g_icci_140 > g_icci_148 && g_icci_140 >= gd_156) g_ibuf_176[gi_96] = g_icci_140;
         if (g_icci_140 > g_icci_148 && g_icci_140 < gd_156) g_ibuf_168[gi_96] = g_icci_140;
         if (g_icci_140 < g_icci_148) g_ibuf_172[gi_96] = g_icci_140;
      }
      if (g_icci_140 <= -momentum) {
         if (g_icci_140 < g_icci_148 && g_icci_140 <= gd_156) g_ibuf_176[gi_96] = g_icci_140;
         if (g_icci_140 < g_icci_148 && g_icci_140 > gd_156) g_ibuf_168[gi_96] = g_icci_140;
         if (g_icci_140 > g_icci_148) g_ibuf_172[gi_96] = g_icci_140;
      }
      if (g_icci_140 > (-momentum) && g_icci_140 < momentum) g_ibuf_164[gi_96] = g_icci_140;
   }
   return (0);
}