//+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2018, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+

#property indicator_chart_window
#property indicator_buffers 8
#property indicator_color1 Blue
#property indicator_color2 Red
#property indicator_color3 Blue
#property indicator_color4 Red
#property indicator_color5 Blue
#property indicator_color6 Red
#property indicator_color7 Blue
#property indicator_color8 Red

int Gi_76 = 2;
int G_period_80;
int G_period_84;
double G_ibuf_88[];
double G_ibuf_92[];
double G_ibuf_96[];
double G_ibuf_100[];
double G_ibuf_104[];
double G_ibuf_108[];
double G_ibuf_112[];
double G_ibuf_116[];

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
  {
   SetIndexStyle(0, DRAW_HISTOGRAM);
   SetIndexBuffer(0, G_ibuf_88);
   SetIndexStyle(1, DRAW_HISTOGRAM);
   SetIndexBuffer(1, G_ibuf_92);
   SetIndexStyle(2, DRAW_HISTOGRAM);
   SetIndexBuffer(2, G_ibuf_96);
   SetIndexStyle(3, DRAW_HISTOGRAM);
   SetIndexBuffer(3, G_ibuf_100);
   SetIndexStyle(4, DRAW_HISTOGRAM);
   SetIndexBuffer(4, G_ibuf_104);
   SetIndexStyle(5, DRAW_HISTOGRAM);
   SetIndexBuffer(5, G_ibuf_108);
   SetIndexStyle(6, DRAW_HISTOGRAM);
   SetIndexBuffer(6, G_ibuf_112);
   SetIndexStyle(7, DRAW_HISTOGRAM);
   SetIndexBuffer(7, G_ibuf_116);
   IndicatorShortName("TrendBars");
   return (0);
  }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int deinit()
  {
   ObjectDelete("Close line");
   Comment("");
   return (0);
  }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   double icci_0;
   double icci_8;
   int Li_16;
   ObjectMove("Close line", 0, Time[10], Close[0]);
   if(Gi_76 == 1)
     {
      G_period_84 = 5;
      G_period_80 = 14;
     }
   if(Gi_76 == 0 || Gi_76 == 2 || Gi_76 > 3)
     {
      G_period_84 = 3;
      G_period_80 = 21;
     }
   if(Gi_76 == 3)
     {
      G_period_84 = 89;
      G_period_80 = 200;
     }
   int ind_counted_20 = IndicatorCounted();
   if(Bars <= 15)
      return (0);
   if(ind_counted_20 < 1)
     {
      for(int Li_24 = 1; Li_24 <= 15; Li_24++)
        {
         G_ibuf_88[Bars - Li_24] = 0.0;
         G_ibuf_96[Bars - Li_24] = 0.0;
         G_ibuf_92[Bars - Li_24] = 0.0;
         G_ibuf_100[Bars - Li_24] = 0.0;
         G_ibuf_104[Bars - Li_24] = 0.0;
         G_ibuf_112[Bars - Li_24] = 0.0;
         G_ibuf_108[Bars - Li_24] = 0.0;
         G_ibuf_116[Bars - Li_24] = 0.0;
        }
     }
   if(ind_counted_20 > 0)
      Li_16 = Bars - ind_counted_20;
   if(ind_counted_20 == 0)
      Li_16 = Bars - 15 - 1;
   for(Li_24 = Li_16; Li_24 >= 0; Li_24--)
     {
      icci_0 = iCCI(NULL, 0, G_period_84, PRICE_TYPICAL, Li_24);
      icci_8 = iCCI(NULL, 0, G_period_80, PRICE_TYPICAL, Li_24);
      G_ibuf_88[Li_24] = EMPTY_VALUE;
      G_ibuf_96[Li_24] = EMPTY_VALUE;
      G_ibuf_92[Li_24] = EMPTY_VALUE;
      G_ibuf_100[Li_24] = EMPTY_VALUE;
      G_ibuf_104[Li_24] = EMPTY_VALUE;
      G_ibuf_112[Li_24] = EMPTY_VALUE;
      G_ibuf_108[Li_24] = EMPTY_VALUE;
      G_ibuf_116[Li_24] = EMPTY_VALUE;
      if(icci_0 >= 0.0 && icci_8 >= 0.0)
        {
         G_ibuf_88[Li_24] = MathMax(Open[Li_24], Close[Li_24]);
         G_ibuf_92[Li_24] = MathMin(Open[Li_24], Close[Li_24]);
         G_ibuf_104[Li_24] = High[Li_24];
         G_ibuf_108[Li_24] = Low[Li_24];
        }
      else
        {
         if(icci_8 >= 0.0 && icci_0 < 0.0)
           {
            G_ibuf_96[Li_24] = MathMax(Open[Li_24], Close[Li_24]);
            G_ibuf_100[Li_24] = MathMin(Open[Li_24], Close[Li_24]);
            G_ibuf_112[Li_24] = High[Li_24];
            G_ibuf_116[Li_24] = Low[Li_24];
           }
         else
           {
            if(icci_0 < 0.0 && icci_8 < 0.0)
              {
               G_ibuf_92[Li_24] = MathMax(Open[Li_24], Close[Li_24]);
               G_ibuf_88[Li_24] = MathMin(Open[Li_24], Close[Li_24]);
               G_ibuf_108[Li_24] = High[Li_24];
               G_ibuf_104[Li_24] = Low[Li_24];
              }
            else
              {
               if(icci_8 < 0.0 && icci_0 > 0.0)
                 {
                  G_ibuf_100[Li_24] = MathMax(Open[Li_24], Close[Li_24]);
                  G_ibuf_96[Li_24] = MathMin(Open[Li_24], Close[Li_24]);
                  G_ibuf_116[Li_24] = High[Li_24];
                  G_ibuf_112[Li_24] = Low[Li_24];
                 }
              }
           }
        }
     }
   return (0);
  }
//+------------------------------------------------------------------+
