//+------------------------------------------------------------------+
//|                                                     Sig_Soch.mq4 |
//|                      Copyright © 2009, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Blue
#property indicator_color2 Red

extern int PerCCI=24;
extern bool Al=true;
double CCI;
double CCIold;
double ArrShift;
double BufUp[];
double BufDn[];
int s,b;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   
   SetIndexBuffer(0, BufUp);
   SetIndexStyle(0, DRAW_ARROW);
   SetIndexArrow(0, 233);
   
   SetIndexBuffer(1, BufDn);
   SetIndexStyle(1, DRAW_ARROW);
   SetIndexArrow(1, 234);
   switch (Period()) {
   	case PERIOD_M1:	ArrShift = Point * 5;	break;
   	case PERIOD_M5:	ArrShift = Point * 10;	break;
   	case PERIOD_M15:	ArrShift = Point * 20;	break;
   	case PERIOD_M30:	ArrShift = Point * 20;	break;
   	case PERIOD_H1:	ArrShift = Point * 40;	break;
   	case PERIOD_H4:	ArrShift = Point * 80;	break;
   	case PERIOD_D1:	ArrShift = Point * 100;	break;
   }
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int i, 
       Counted_bars=IndicatorCounted();
   i=Bars-Counted_bars-1;
//----
      while(i>=1)                      // Цикл по непосчитанным барам     
      {      
        
         CCI=iCCI(NULL,0,PerCCI,PRICE_TYPICAL,i);
         CCIold=iCCI(NULL,0,PerCCI,PRICE_TYPICAL,i+1);
         if (CCI>-100 && CCIold<-100) {BufUp[i]=Low[i] - ArrShift;if (b<2 && Al==true) {Alert(Symbol()+" CCI Говорит покупай по "+Close[i]);b=b+1;s=0;}}
         if (CCI<100 && CCIold>100) {BufDn[i]=High[i] + ArrShift;if (s<2 && Al==true) {Alert(Symbol()+" CCI Говорит продавай по "+Close[i]);s=s+1;b=0;}}         
         i--;                          // Расчёт индекса следующего бара
              
      }
//----
   return(0);
  }
//+------------------------------------------------------------------+

