//+------------------------------------------------------------------+
//|                                                Channel Index.mq4 |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_chart_window
#property indicator_color1 clrNONE
#property indicator_buffers 1
extern double set_level = 250;
extern int averaging_period = 12;
extern  ENUM_APPLIED_PRICE price_type = PRICE_TYPICAL;
extern bool equal_only = False;//If True(==),False(>=;<=)
extern double epsilon = 0.5;//zone around level
double check[];
int i;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,check);
//---
   return(INIT_SUCCEEDED);
  }
int deinit()
   {
   ObjectsDeleteAll(EMPTY,EMPTY);
   return (0);
   }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   for(i=1;i<Bars;i++)
      {  
      
      double valuecci=iCCI(NULL,0,averaging_period,price_type,i);
      check[i]= valuecci;
      if(equal_only==True)
         {
         if(((valuecci>= (set_level -epsilon)) &&( valuecci<=( set_level+epsilon)))||
         ((valuecci>= (-set_level -epsilon)) &&( valuecci<=(- set_level+epsilon))))
            {
            ObjectCreate(IntegerToString(-i,0,' '),OBJ_RECTANGLE,0,Time[i+1],Low[i],Time[i-1],High[i]);
            }
         }
      else
         {
         if(iCCI(NULL,0,averaging_period,price_type,i)>= set_level ||iCCI(NULL,0,averaging_period,price_type,i)<= -set_level)
            {
            ObjectCreate(IntegerToString(-i,0,' '),OBJ_RECTANGLE,0,Time[i+1],Low[i],Time[i-1],High[i]);
            }
         }}
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
