CCI_Woodies_Paterns_v1





#property copyright "Copyright © 2008, Vico"

#property indicator_chart_window
#property indicator_buffers 8
#property indicator_color1 DarkGreen
#property indicator_color2 Red
#property indicator_color3 DodgerBlue
#property indicator_color4 FireBrick
#property indicator_color5 OrangeRed
#property indicator_color6 LimeGreen
#property indicator_color7 DarkOrange
#property indicator_color8 MidnightBlue

//////////////////////////////////////////////////////////////////////
// Ïàðàìåòðû                                                        //
//////////////////////////////////////////////////////////////////////

extern int fastPeriod  = 6;
extern int slowPeriod  = 14;
extern int histLength  = 300;
extern string step_info = "Ðàññòîÿíèå ìåæäó ñèãíàëàìè ïî âåðòèêàëè";
extern int step = 50;

//////////////////////////////////////////////////////////////////////
// Áóôåðû äàííûõ                                                    //
//////////////////////////////////////////////////////////////////////
 
double ZlrBuffer[];     // 1. Zero-line Reject (ZLR)       -- trend 
double ShamuBuffer[];   // 2. Shamu Trade                  -- counter
double TlbBuffer[];     // 3. Trend Line Break (TLB)       -- both
double VegasBuffer[];   // 4. Vegas Trade (VT)			     -- counter
double GhostBuffer[];   // 5. Ghost Trade                  -- counter
double RevdevBuffer[];  // 6. Reverse Divergence           -- trend
double HooksBuffer[];   // 7. Hook from Extremes (HFE)     -- counter
double HtlbBuffer[];    // 8. Hor. Trend Line Break (HTLB) -- both

//////////////////////////////////////////////////////////////////////
// Èíèöèàëèçàöèÿ                                                    //
//////////////////////////////////////////////////////////////////////

int init()
{
   string short_name;
   IndicatorBuffers(8);
   IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS));
   //////////////////////////////////////////////////////////////////
   // Ñèãíàëû îáîçíà÷àþòüñÿ öèôðàìè îò 1 äî 8. Äëÿ ñèãíàëîâ        //
   // ê òîðãîâëå ïî òðåíäó èñïîëüçóåòñÿ çåëåíàÿ ãàììà,             //
   // ïðîòèâ òðåíäà êðàñíî-îðàíæåâàÿ, ñèíÿÿ - äëÿ TLB è HTLB       //
   //////////////////////////////////////////////////////////////////
   short_name="Woodies CCI Paterns ("+fastPeriod+","+slowPeriod+")";
   IndicatorShortName(short_name);
   // Zero-line Reject (ZLR), trend
   SetIndexStyle(0, DRAW_ARROW, EMPTY, 1, DarkGreen);
   SetIndexBuffer(0, ZlrBuffer);    
   SetIndexArrow(0, 140);
   SetIndexLabel(0,"Zero-line Reject (ZLR), trend");
   SetIndexEmptyValue(0, EMPTY_VALUE);      
   SetIndexDrawBegin(0, slowPeriod);
   // Shamu Trade, counter-trend
   SetIndexStyle(1, DRAW_ARROW, EMPTY, 1, Red);
   SetIndexBuffer(1, ShamuBuffer);    
   SetIndexArrow(1, 141);
   SetIndexLabel(1,"Shamu Trade, counter-trend");
   SetIndexEmptyValue(1, EMPTY_VALUE);      
   SetIndexDrawBegin(1, slowPeriod);
   // Trend Line Break (TLB), both
   SetIndexStyle(2, DRAW_ARROW, EMPTY, 1, DodgerBlue);
   SetIndexBuffer(2, TlbBuffer);    
   SetIndexArrow(2, 142);
   SetIndexLabel(2,"Trend Line Break (TLB), both");
   SetIndexEmptyValue(2, EMPTY_VALUE);      
   SetIndexDrawBegin(2, slowPeriod);
   // Vegas Trade (VT), counter-trend
   SetIndexStyle(3, DRAW_ARROW, EMPTY, 1, FireBrick);
   SetIndexBuffer(3, VegasBuffer);    
   SetIndexArrow(3, 143);
   SetIndexLabel(3,"Vegas Trade (VT), counter-trend");
   SetIndexEmptyValue(3, EMPTY_VALUE);      
   SetIndexDrawBegin(3, slowPeriod);
   // Ghost Trade, counter-trend
   SetIndexStyle(4, DRAW_ARROW, EMPTY, 1, OrangeRed);
   SetIndexBuffer(4, GhostBuffer);    
   SetIndexArrow(4, 144);
   SetIndexLabel(4,"Ghost Trade, counter-trend");
   SetIndexEmptyValue(4, EMPTY_VALUE);      
   SetIndexDrawBegin(4, slowPeriod);
   // Reverse Divergence, trend
   SetIndexStyle(5, DRAW_ARROW, EMPTY, 1, LimeGreen);
   SetIndexBuffer(5, RevdevBuffer);    
   SetIndexArrow(5, 145);
   SetIndexLabel(5,"Reverse Divergence, trend");
   SetIndexEmptyValue(5, EMPTY_VALUE);      
   SetIndexDrawBegin(5, slowPeriod);
   // Hook from Extremes (HFE), counter-trend
   SetIndexStyle(6, DRAW_ARROW, EMPTY, 1, DarkOrange);
   SetIndexBuffer(6, HooksBuffer);    
   SetIndexArrow(6, 146);
   SetIndexLabel(6,"Hook from Extremes (HFE), counter-trend");
   SetIndexEmptyValue(6, EMPTY_VALUE);      
   SetIndexDrawBegin(6, slowPeriod);
   // Horizontal Trend Line Break (HTLB), both
   SetIndexStyle(7, DRAW_ARROW, EMPTY, 1, MidnightBlue);
   SetIndexBuffer(7, HtlbBuffer);    
   SetIndexArrow(7, 147);
   SetIndexLabel(7,"Horizontal Trend Line Break (HTLB), both");
   SetIndexEmptyValue(7, EMPTY_VALUE);      
   SetIndexDrawBegin(7, slowPeriod);
   //----
   return(0);
}
  
//////////////////////////////////////////////////////////////////////
// Äåèíèöèàëèçàöèÿ                                                  //                       
//////////////////////////////////////////////////////////////////////

int deinit()
{
   // TODO: add your code here
   return(0);
}

//////////////////////////////////////////////////////////////////////
// Îïðåäåëåíèå ïàòòåðíîâ                                            //
//////////////////////////////////////////////////////////////////////

int start()
{
   string symbolName;
   int i, shift, checksum, counted_bars=IndicatorCounted();
   if (Bars<slowPeriod) return(0); 
   // check for possible errors
   if (counted_bars<0) return(-1);
   // last counted bar will be recounted
   if (counted_bars>0) counted_bars++;
   int limit=Bars-slowPeriod-counted_bars;
   if (counted_bars<1 || checksum!=(histLength+fastPeriod+slowPeriod+Period()) || symbolName!=Symbol())
   {
      // Ïàðàìåòðû èçìåíåíû, ïðîâîäèì ðåèíèöèàëèçàöèþ 
      for(i=Bars-1;i<=Bars-histLength;i++) 
      {
          ZlrBuffer[Bars-i]=EMPTY_VALUE;
          ShamuBuffer[Bars-i]=EMPTY_VALUE;
          TlbBuffer[Bars-i]=EMPTY_VALUE;  
          VegasBuffer[Bars-i]=EMPTY_VALUE;
          GhostBuffer[Bars-i]=EMPTY_VALUE;
          RevdevBuffer[Bars-i]=EMPTY_VALUE;
          HooksBuffer[Bars-i]=EMPTY_VALUE;
          HtlbBuffer[Bars-i]=EMPTY_VALUE;      
       }
      checksum = histLength+fastPeriod+slowPeriod+Period(); 
      symbolName=Symbol();
      limit=histLength; 
   }
   for (shift=limit; shift>=0; shift--)
   {
      ///////////////////////////////////////////////////////////////
      //	Çàïîëíåíèå ìàññèâà òî÷åê è îïðåäåëåíèå òðåíäà             //
      ///////////////////////////////////////////////////////////////

      int delta=25, delta1=5, level=100;
      double slowCCI[100], fastCCI[100];        
      int a, up=0, dn=0, upnt=step,dpnt=step;
      for (a=100;a>=0;a--)
      {  
         fastCCI[a]=iCCI(NULL,0,fastPeriod,PRICE_TYPICAL,shift+a);       
         slowCCI[a]=iCCI(NULL,0,slowPeriod,PRICE_TYPICAL,shift+a);      
         if (slowCCI[a]>0) 
         {
            if(up>=2) dn=0;
            up++;
         }
         if (slowCCI[a]<0) 
         {
            if(dn>=2) up=0;
            dn++;
         }
		}
	   
      ///////////////////////////////////////////////////////////////
      // Ïàòòåðí ¹ 1 - Îòñêîê îò íóëåâîé ëèíèè (ZLR)               //
      // --------------------------------------------------------- //
      ///////////////////////////////////////////////////////////////

      delta=20; delta1=5; // ôèëüòðû áèåíèÿ
      level=50; // óðîâåíü, â ïðåäåëàõ êîòîðîãî âîçìîæåí îòñêîê
      ZlrBuffer[shift]=EMPTY_VALUE;

      // ZLR â íèñõîäÿùåì òðåíäå
      if ( MathAbs(slowCCI[2]-slowCCI[1])>delta1 )
      {
         if ( dn>=6 && up<3 &&
         slowCCI[0]<slowCCI[1]-delta && slowCCI[2]<slowCCI[1]-delta &&
         MathAbs(slowCCI[1])<=level )
         {
            ZlrBuffer[shift]=High[shift]+upnt*Point; 
            upnt=upnt+step;
         }
      }
      if ( MathAbs(slowCCI[2]-slowCCI[1])<=delta1 )
      {
         if ( dn>=6 && up<3 &&
         slowCCI[0]<slowCCI[1]-delta && slowCCI[3]<slowCCI[1]-delta && 
         MathAbs(slowCCI[1])<=level )
         {
            ZlrBuffer[shift]=High[shift]+upnt*Point; 
            upnt=upnt+step;
         }
      }

      // ZLR â âîñõîäÿùåì òðåíäå
      if ( MathAbs(slowCCI[2]-slowCCI[1])>delta1 )
      {
         if ( up>=6 && dn<3 &&
         slowCCI[0]>slowCCI[1]+delta && slowCCI[2]>slowCCI[1]+delta && 
         MathAbs(slowCCI[1])<=level )
         {
            ZlrBuffer[shift]=Low[shift]-dpnt*Point;
            dpnt=dpnt+step;
         }	   
      }
      if ( MathAbs(slowCCI[2]-slowCCI[1])<=delta1 )
      {
         if ( up>=6 && dn<3 &&	   
         slowCCI[0]>slowCCI[1]+delta && slowCCI[3]>slowCCI[1]+delta && 
         MathAbs(slowCCI[1])<=level )
         {
            ZlrBuffer[shift]=Low[shift]-dpnt*Point;
            dpnt=dpnt+step;
         }	   
      }

      ///////////////////////////////////////////////////////////////
      // Ïàòòåðí ¹ 2 - Øàìó (shamu trade)                          //
      // --------------------------------------------------------- //
      ///////////////////////////////////////////////////////////////

      delta=20; delta1=5; // ôèëüòðû áèåíèÿ
      level=50; // óðîâåíü (+/-), â ïðåäåëàõ êîòîðûõ äîëæåí ñôîðìèðîâàòüñÿ ïàòòåðí
      ShamuBuffer[shift]=EMPTY_VALUE;

      // øàìó â íèñõîäÿùåì òðåíäå
      if ( MathAbs(slowCCI[3]-slowCCI[2])>delta1 )
      {
         if (dn>=6 && up<3 &&
         slowCCI[0]>slowCCI[1]+delta &&
         slowCCI[1]<slowCCI[2]-delta && slowCCI[2]>slowCCI[3]+delta && 
         slowCCI[1]<=level && slowCCI[1]>=-level && 
         slowCCI[2]<=level && slowCCI[2]>=-level) 
         {
            ShamuBuffer[shift]=Low[shift]-dpnt*Point;
            dpnt=dpnt+step;
         }
      }
      if ( MathAbs(slowCCI[3]-slowCCI[2])<=delta1 )
      {
         if (dn>=6 && up<3 &&
         slowCCI[0]>slowCCI[1]+delta &&
         slowCCI[1]<slowCCI[2]-delta && slowCCI[2]>slowCCI[4]+delta && 
         slowCCI[1]<=level && slowCCI[1]>=-level && 
         slowCCI[2]<=level && slowCCI[2]>=-level) 
         {
            ShamuBuffer[shift]=Low[shift]-dpnt*Point;
            dpnt=dpnt+step;
         }
      }

      // øàìó â âîñõîäÿùåì òðåíäå
      if ( MathAbs(slowCCI[3]-slowCCI[2])>delta1 )
      {
         if (up>=6 && dn<3 &&
         slowCCI[0]<slowCCI[1]-delta &&
         slowCCI[1]>slowCCI[2]+delta && slowCCI[2]<slowCCI[3]-delta && 
         slowCCI[1]<=level && slowCCI[1]>=-level && 
         slowCCI[2]<=level && slowCCI[2]>=-level) 
         {
            ShamuBuffer[shift]=Low[shift]-dpnt*Point;
            dpnt=dpnt+step;
         }
      }
      if ( MathAbs(slowCCI[3]-slowCCI[2])<=delta1 )
      {
         if (up>=6 && dn<3 &&
         slowCCI[0]<slowCCI[1]-delta &&
         slowCCI[1]>slowCCI[2]+delta && slowCCI[2]<slowCCI[4]-delta && 
         slowCCI[1]<=level && slowCCI[1]>=-level && 
         slowCCI[2]<=level && slowCCI[2]>=-level) 
         {
            ShamuBuffer[shift]=Low[shift]-dpnt*Point;
            dpnt=dpnt+step;
         }
      }

      ///////////////////////////////////////////////////////////////
      // Ïàòòåðí ¹ 3 - Ïðîáîé Ëèíèè Òðåíäà (TLB)                   //
      // --------------------------------------------------------- //        
      ///////////////////////////////////////////////////////////////

      int min1=0,min2=0,min3=0,max1=0,max2=0,max3=0;        // çíà÷åíèÿ ìèí/ìàõ 
      int tmin1=0,tmin2=0,tmin3=0,tmax1=0,tmax2=0,tmax3=0;  // âðåìÿ ìèí/ìàõ
      double line;      
      double line1;      

      delta=25; delta1=5; 
      level=50;
      TlbBuffer[shift]=EMPTY_VALUE;      
 
      //	Îïðåäåëåíèå ìèí/ìàêñ è ïîñòðîåíèå ëèíèé âîñõîäÿùåãî òðåíäà
      if (up>=6 && dn<3)
      {
         min1=0; min2=0; max1=0; max2=0;
         tmin1=0; tmin2=0; tmax1=0; tmax2=0;
         for (a=0;a<up+dn-1;a++)
         { 
            // îïðåäåëåíèå ìàêñèìóìîâ
            if (slowCCI[a]<=slowCCI[a+1]-delta1 && slowCCI[a+1]>=slowCCI[a+2]+delta1)
			   {
               if (max1!=0 && max2==0)
               {
                  max2=slowCCI[a+1];
                  tmax2=a+1;
               }
               if (max1==0)
               {
                  max1=slowCCI[a+1];
                  tmax1=a+1;
               }
            }
            // îïðåäåëåíèå ìèíèìóìîâ
            if (slowCCI[a]>=slowCCI[a+1]+delta1 && slowCCI[a+1]<=slowCCI[a+2]-delta1)
			   {
               if (min1!=0 && min2==0)
               {
                  min2=slowCCI[a+1];
                  tmin2=a+1;
               }
               if (min1==0)
               {
                  min1=slowCCI[a+1];
                  tmin1=a+1;
               }
            }
         }

         // Ïåðåñå÷åíèå ëèíèè òðåíäà
         if (tmax1!=0 && tmax2!=0)
         {
            line=max1-tmax1*(max1-max2)/(tmax1-tmax2);
            line1=max1+(1-tmax1)*(max1-max2)/(tmax1-tmax2);
            if (slowCCI[0]>line && slowCCI[1]<line1)
            {
               TlbBuffer[shift]=Low[shift]-dpnt*Point;
               dpnt=dpnt+step;
            }
         }
         //  Ïðîáîé ëèíèè òðåíäà
         if (tmin1!=0 && tmin2!=0)
         {
            line=min1-tmin1*(min1-min2)/(tmin1-tmin2);
            line1=min1+(1-tmin1)*(min1-min2)/(tmin1-tmin2);
            if (slowCCI[0]<line && slowCCI[1]>line1)
            {
               TlbBuffer[shift]=High[shift]+upnt*Point;
               upnt=upnt+step;
            }
         }
      }

      //	Îïðåäåëåíèå ìèí/ìàêñ è ïîñòðîåíèå ëèíèé íèñõîäÿùåãî òðåíäà
      if (dn>=6 && up<3)
      {
         min1=0; min2=0; max1=0; max2=0;
         tmin1=0; tmin2=0; tmax1=0; tmax2=0;
         for (a=0;a<dn+up-1;a++)
         { 
            // îïðåäåëåíèå ìàêñèìóìîâ
            if (slowCCI[a]>=slowCCI[a+1]+delta1 && slowCCI[a+1]<=slowCCI[a+2]-delta1)
			   {
               if (max1!=0 && max2==0)
               {
                  max2=slowCCI[a+1];
                  tmax2=a+1;
               }
               if (max1==0)
               {
                  max1=slowCCI[a+1];
                  tmax1=a+1;
               }
            }
            // îïðåäåëåíèå ìèíèìóìîâ
            if (slowCCI[a]<=slowCCI[a+1]-delta1 && slowCCI[a+1]>=slowCCI[a+2]+delta1)
			   {
               if (min1!=0 && min2==0)
               {
                  min2=slowCCI[a+1];
                  tmin2=a+1;
               }
               if (min1==0)
               {
                  min1=slowCCI[a+1];
                  tmin1=a+1;
               }
            }
         }

         // Ïåðåñå÷åíèå ëèíèè òðåíäà
         if (tmax1!=0 && tmax2!=0)
         {
            line=max1-tmax1*(max1-max2)/(tmax1-tmax2);
            line1=max1+(1-tmax1)*(max1-max2)/(tmax1-tmax2);
            if (slowCCI[0]<line && slowCCI[1]>line1)
            {
               TlbBuffer[shift]=Low[shift]-dpnt*Point;
               dpnt=dpnt+step;
            }
         }
         //  Ïðîáîé ëèíèè òðåíäà
         if (tmin1!=0 && tmin2!=0)
         {
            line=min1-tmin1*(min1-min2)/(tmin1-tmin2);
            line1=min1+(1-tmin1)*(min1-min2)/(tmin1-tmin2);
            if (slowCCI[0]>line && slowCCI[1]<line1)
            {
               TlbBuffer[shift]=High[shift]+upnt*Point;
               upnt=upnt+step;
            }
         }
      }

      ///////////////////////////////////////////////////////////////
      // Ïàòòåðí ¹ 4 - Âåãàñ (VT)                                  //
      // --------------------------------------------------------- //  
      ///////////////////////////////////////////////////////////////

      delta=30; delta1=5; // ôèëüòðû áèåíèÿ
      level=200; 
      VegasBuffer[shift]=EMPTY_VALUE;        

      // Âåãàñ â íèñõîäÿùåì òðåéäå
      if  (dn>=6 && up<3)
      {
         max1=0; max2=0; tmax1=0; tmax2=0;
         min1=0; tmin1=0;
         for (a=0;a<dn+up-1;a++)
         {
            // îïðåäåëåíèå òî÷åê â íèñõîäÿùåì òðåéäå
            if (slowCCI[a]<slowCCI[a+1] && slowCCI[a+1]>slowCCI[a+2] && min1==0)
            {
               min1=slowCCI[a+1];
               tmin1=a+1;
			   }
            if (slowCCI[a]>slowCCI[a+1] && slowCCI[a+1]<slowCCI[a+2])
            {				
					if (max1!=0 && max2==0)
					{
                  max2=slowCCI[a+1];
                  tmax2=a+1;
               }
               if (max1==0)
               {
                  max1=slowCCI[a+1];
                  tmax1=a+1;
               }
            }
         }
         if (max1!=0 && max2!=0 && min1!=0 && max1<0 && max2<0 && min1<0 && 
         min1>max1+delta1 && max2<=-level && max1>-level+delta && slowCCI[0]>min1 && slowCCI[1]<min1 && 
         MathAbs(tmax2-tmin1)>=3 && MathAbs(tmax2-tmax1)>=6 && MathAbs(tmax2-tmax1)<13)
         {
            VegasBuffer[shift]=Low[shift]-dpnt*Point;
            dpnt=dpnt+step;	
         }
	   }
      //  Âåãàñ â âîñõîäÿùåì òðåéäå
      if (up>=6 && dn<3) 
      {
         max1=0; max2=0; tmax1=0; tmax2=0;
         min1=0; tmin1=0;
         for (a=0;a<up+dn-1;a++)
         {
            // îïðåäåëåíèå òî÷åê â âîñõîäÿùåì òðåéäå
            if (slowCCI[a]>slowCCI[a+1] && slowCCI[a+1]<slowCCI[a+2] && min1==0)
            {
               min1=slowCCI[a+1];
               tmin1=a+1;
			   }
            if (slowCCI[a]<slowCCI[a+1] && slowCCI[a+1]>slowCCI[a+2])
            {				
					if (max1!=0 && max2==0)
					{
                  max2=slowCCI[a+1];
                  tmax2=a+1;
               }
               if (max1==0)
               {
                  max1=slowCCI[a+1];
                  tmax1=a+1;
               }
            }
         }
         // -----
         if (max1!=0 && max2!=0 && min1!=0 && max1>0 && max2>0 && min1>0 && 
         min1<max1-delta1 && max2>=level && max1<level-delta && slowCCI[0]<min1 && slowCCI[1]>min1 && 
         MathAbs(tmax2-tmin1)>=3 && MathAbs(tmax2-tmax1)>=6 && MathAbs(tmax2-tmax1)<13)
         {
			   VegasBuffer[shift]=High[shift]+upnt*Point;
            upnt=upnt+step;			
         }
      }      
      
      ///////////////////////////////////////////////////////////////
      // Ïàòòåðí ¹ 5 - Ïðèçðàê (Ghost)                             //
      // --------------------------------------------------------- //  
      ///////////////////////////////////////////////////////////////

      delta=15; delta1=5;  // ôèëüòðû áèåíèÿ
      GhostBuffer[shift]=EMPTY_VALUE;        

      // Ïðèçðàê â âîñõîäÿùåì òðåéäå
      if (up>=6 && dn<3)
      {  
         max1=0; max2=0; max3=0; tmax1=0; tmax2=0; tmax3=0;
         min1=0; min2=0; tmin1=0; tmin2=0;
         for (a=0;a<up+dn-1;a++)
         {
            // îïðåäåëåíèå ìàêñèìóìîâ è ìèíèìóìîâ
            if (slowCCI[a]<=slowCCI[a+1]-delta1 && slowCCI[a+1]>=slowCCI[a+2]+delta1)
			   {
				  if (max2!=0 && max3==0) 
				  {
				     max3=slowCCI[a+1];
				     tmax3=a+1;
				  }
				  if (max1!=0 && max2==0) 
				  {
				     max2=slowCCI[a+1];
				     tmax2=a+1;
				  }
				  if (max1==0) 
				  {
				     max1=slowCCI[a+1];
				     tmax1=a+1;
				  }
			   }
            if (slowCCI[a]>=slowCCI[a+1]+delta1 && slowCCI[a+1]<=slowCCI[a+2]-delta1)
			   {
				  if (min1!=0 && min2==0)
				  { 
                 min2=slowCCI[a+1];
                 tmin2=a+1;
				  }
				  if (min1==0) 
				  {
                 min1=slowCCI[a+1];
                 tmin1=a+1;
              }
			   }
         }
         if (tmin1!=0 && tmin2!=0)
         {
            line=min1-tmin1*(min1-min2)/(tmin1-tmin2);
            line1=min1+(1-tmin1)*(min1-min2)/(tmin1-tmin2);
            if (max1>0 && max2>0 && max3>0 && max2>max1+delta && max2>max3+delta &&
            tmax1<tmin1 && tmin1<tmax2 && tmax2<tmin2 && tmin2<tmax3 &&
            slowCCI[0]<line && slowCCI[1]>line1)
            {
               GhostBuffer[shift]=High[shift]+upnt*Point;
               upnt=upnt+step;			
            }
         }
      }

      // Ïðèçðàê â íèñõîäÿùåì òðåéäå
      if (dn>=6 && up<3)
      {  
         max1=0; max2=0; max3=0; tmax1=0; tmax2=0; tmax3=0;
         min1=0; min2=0; tmin1=0; tmin2=0;
         for (a=0;a<dn+up-1;a++)
         {
            // îïðåäåëåíèå ìàêñèìóìîâ è ìèíèìóìîâ
            if (slowCCI[a]>=slowCCI[a+1]+delta1 && slowCCI[a+1]<=slowCCI[a+2]-delta1)
			   {
				  if (max2!=0 && max3==0) 
				  {
				     max3=slowCCI[a+1];
				     tmax3=a+1;
				  }
				  if (max1!=0 && max2==0) 
				  {
				     max2=slowCCI[a+1];
				     tmax2=a+1;
				  }
				  if (max1==0) 
				  {
				     max1=slowCCI[a+1];
				     tmax1=a+1;
				  }
			   }
            if (slowCCI[a]<=slowCCI[a+1]-delta1 && slowCCI[a+1]>=slowCCI[a+2]+delta1)
			   {
				  if (min1!=0 && min2==0)
				  { 
                 min2=slowCCI[a+1];
                 tmin2=a+1;
				  }
				  if (min1==0) 
				  {
                 min1=slowCCI[a+1];
                 tmin1=a+1;
              }
			   }
         }
         if (tmin1!=0 && tmin2!=0)
         {
            line=min1-tmin1*(min1-min2)/(tmin1-tmin2);
            line1=min1+(1-tmin1)*(min1-min2)/(tmin1-tmin2);
            if (max1<0 && max2<0 && max3<0 && max2<max1-delta && max2<max3-delta &&
            tmax1<tmin1 && tmin1<tmax2 && tmax2<tmin2 && tmin2<tmax3 &&
            slowCCI[0]>line && slowCCI[1]<line1)
            {
               GhostBuffer[shift]=High[shift]+upnt*Point;
               upnt=upnt+step;			
            }
         }
      }

      ///////////////////////////////////////////////////////////////
      // Ïàòòåðí ¹ 6 - Ðàçâîðîòíàÿ äèâåðãåíöèÿ (Rev Diver)         //
      // --------------------------------------------------------- //  
      ///////////////////////////////////////////////////////////////

      delta=50; delta1=5;  // ôèëüòðû áèåíèÿ
      level=100;
      RevdevBuffer[shift]=EMPTY_VALUE;        

      // Ðàçâîðîòíàÿ äèâåðãåíöèÿ â âîñõîäÿùåì òðåéäå
      if (up>=6 && dn<3)
      {
         min1=0; min2=0; max1=0; max2=0;
         tmin1=0; tmin2=0; tmax1=0; tmax2=0;
         for (a=0;a<up+dn-1;a++)
         { 
            // îïðåäåëåíèå ìàêñèìóìîâ
            if (slowCCI[a]<=slowCCI[a+1]-delta1 && slowCCI[a+1]>=slowCCI[a+2]+delta1)
			   {
               if (max1!=0 && max2==0)
               {
                  max2=slowCCI[a+1];
                  tmax2=a+1;
               }
               if (max1==0)
               {
                  max1=slowCCI[a+1];
                  tmax1=a+1;
               }
            }
            // îïðåäåëåíèå ìèíèìóìîâ
            if (slowCCI[a]>=slowCCI[a+1]+delta1 && slowCCI[a+1]<=slowCCI[a+2]-delta1)
			   {
               if (min1!=0 && min2==0)
               {
                  min2=slowCCI[a+1];
                  tmin2=a+1;
               }
               if (min1==0)
               {
                  min1=slowCCI[a+1];
                  tmin1=a+1;
               }
            }
         }
         if (tmax1!=0 && tmax2!=0)
         {
            line=max1-tmax1*(max1-max2)/(tmax1-tmax2);
            line1=max1+(1-tmax1)*(max1-max2)/(tmax1-tmax2);
            if (min1<min2-delta1 && tmin1<tmax1 && tmax1<tmin2 && tmin2<tmax2 && 
            min1<level && min2<level && slowCCI[0]>line && slowCCI[1]<line1)
            {
               RevdevBuffer[shift]=High[shift]+upnt*Point;
               upnt=upnt+step;
            }
         }
      }

      //	Ðàçâîðîòíàÿ äèâåðãåíöèÿ â íèñõîäÿùåì òðåíäå
      if (dn>=6 && up<3)
      {
         min1=0; min2=0; max1=0; max2=0;
         tmin1=0; tmin2=0; tmax1=0; tmax2=0;
         for (a=0;a<dn+up-1;a++)
         { 
            // îïðåäåëåíèå ìàêñèìóìîâ
            if (slowCCI[a]>=slowCCI[a+1]+delta1 && slowCCI[a+1]<=slowCCI[a+2]-delta1)
			   {
               if (max1!=0 && max2==0)
               {
                  max2=slowCCI[a+1];
                  tmax2=a+1;
               }
               if (max1==0)
               {
                  max1=slowCCI[a+1];
                  tmax1=a+1;
               }
            }
            // îïðåäåëåíèå ìèíèìóìîâ
            if (slowCCI[a]<=slowCCI[a+1]-delta1 && slowCCI[a+1]>=slowCCI[a+2]+delta1)
			   {
               if (min1!=0 && min2==0)
               {
                  min2=slowCCI[a+1];
                  tmin2=a+1;
               }
               if (min1==0)
               {
                  min1=slowCCI[a+1];
                  tmin1=a+1;
               }
            }
         }
         if (tmax1!=0 && tmax2!=0)
         {
            line=max1-tmax1*(max1-max2)/(tmax1-tmax2);
            line1=max1+(1-tmax1)*(max1-max2)/(tmax1-tmax2);
            if (min1>min2+delta1 && tmin1<tmax1 && tmax1<tmin2 && tmin2<tmax2 && 
            min1>-level && min2>-level && slowCCI[0]<line && slowCCI[1]>line1)
            {
               RevdevBuffer[shift]=High[shift]+upnt*Point;
               upnt=upnt+step;
            }
         }
      }

      ///////////////////////////////////////////////////////////////
      // Ïàòòåðí ¹ 7 - Ýêñòðåìàëüíûé Êðþê (HFE)                    //
      // --------------------------------------------------------- //        
      ///////////////////////////////////////////////////////////////

      delta=20; level=200;
      HooksBuffer[shift]=EMPTY_VALUE;        
      // HFE â íèñõîäÿùåì òðåíäå
      if (slowCCI[1]<-level && slowCCI[0]>-level && slowCCI[1]<slowCCI[0]-delta)
      {
         HooksBuffer[shift]=Low[shift]-dpnt*Point;
         dpnt=dpnt+step;
      }
      // HFE âîñõîäÿùåì òðåíäå
      if (slowCCI[1]>level && slowCCI[0]<level && slowCCI[1]>slowCCI[0]+delta)
      {
         HooksBuffer[shift]=High[shift]+upnt*Point;
         upnt=upnt+step;
      } 
     
      ///////////////////////////////////////////////////////////////
      // Ïàòòåðí ¹ 3 - Ïðîáîé Ãîðèçîíòàëüíîé Ëèíèè Òðåíäà (HTLB)   //
      // --------------------------------------------------------- //        
      ///////////////////////////////////////////////////////////////

      delta=25; delta1=5; 
      level=50;
      HtlbBuffer[shift]=EMPTY_VALUE;
 
      //	Îïðåäåëåíèå ìèí/ìàêñ è ïîñòðîåíèå ãîðèçîíòàëüíîé ëèíèè âîñõîäÿùåãî òðåíäà
      if (up>=6 && dn<3)
      {            
         min1=0; min2=0; min3=0; max1=0; max2=0; max3=0;
         for (a=0;a<up+dn-1;a++)
         { 
            // îïðåäåëåíèå ìàêñèìóìîâ
            if (slowCCI[a]<=slowCCI[a+1]-delta1 && slowCCI[a+1]>=slowCCI[a+2]+delta1)
			   {
               if (max2!=0 && max3==0) max3=slowCCI[a+1];
               if (max1!=0 && max2==0) max2=slowCCI[a+1];
               if (max1==0) max1=slowCCI[a+1];
            }
            // îïðåäåëåíèå ìèíèìóìîâ
            if (slowCCI[a]>=slowCCI[a+1]+delta1 && slowCCI[a+1]<=slowCCI[a+2]-delta1)
			   {
               if (min2!=0 && min3==0) min3=slowCCI[a+1];
               if (min1!=0 && min2==0) min2=slowCCI[a+1];
               if (min1==0) min1=slowCCI[a+1];
            }
         }

         // Ïåðåñå÷åíèå ãîðèçîíòàëüíîé ëèíèè òðåíäà
         if (MathAbs(max1-max2)<10 && MathAbs(max2-max3)<10 && MathAbs(max1-max3)<10 &&
         slowCCI[0]>max1+delta && slowCCI[0]>max2+delta && slowCCI[0]>max3+delta && max1>0 && max2>0 &&max3>0)
         {
            HtlbBuffer[shift]=Low[shift]-dpnt*Point;
            dpnt=dpnt+step;
         }
         //  Ïðîáîé ãîðèçîíòàëüíîé ëèíèè òðåíäà
         if (MathAbs(min1-min2)<10 && MathAbs(min2-min3)<10 && MathAbs(min1-min3)<10 &&
         slowCCI[0]<min1-delta && slowCCI[0]<min2-delta && slowCCI[0]<min3-delta &&
         slowCCI[1]>min1-delta && slowCCI[1]>min2-delta && slowCCI[1]>min3-delta &&
         min1<=level && min2<=level && min3<=level && min1>0 && min2>0 && min3>0)	
         {
            HtlbBuffer[shift]=High[shift]+upnt*Point;
            upnt=upnt+step;
         }
      }

      //	Îïðåäåëåíèå ìèí/ìàêñ è ïîñòðîåíèå ãîðèçîíòàëüíîé ëèíèè íèñõîäÿùåãî òðåíäà
      if (dn>=6 && up<3)
      {            
         min1=0; min2=0; min3=0; max1=0; max2=0; max3=0;
         for (a=0;a<dn+up-1;a++)
         { 
            // îïðåäåëåíèå ìàêñèìóìîâ
            if (slowCCI[a]>=slowCCI[a+1]+delta1 && slowCCI[a+1]<=slowCCI[a+2]-delta1)
			   {
               if (max2!=0 && max3==0) max3=slowCCI[a+1];
               if (max1!=0 && max2==0) max2=slowCCI[a+1];
               if (max1==0) max1=slowCCI[a+1];
            }
            // îïðåäåëåíèå ìèíèìóìîâ
            if (slowCCI[a]<=slowCCI[a+1]-delta1 && slowCCI[a+1]>=slowCCI[a+2]+delta1)
			   {
               if (min2!=0 && min3==0) min3=slowCCI[a+1];
               if (min1!=0 && min2==0) min2=slowCCI[a+1];
               if (min1==0) min1=slowCCI[a+1];
            }
         }

         // Ïåðåñå÷åíèå ãîðèçîíòàëüíîé ëèíèè òðåíäà
         if (MathAbs(max1-max2)<10 && MathAbs(max2-max3)<10 && MathAbs(max1-max3)<10 &&
         slowCCI[0]<max1-delta && slowCCI[0]<max2-delta && slowCCI[0]<max3-delta
         && max1<0 && max2<0 && max3<0)
         {
            HtlbBuffer[shift]=Low[shift]-dpnt*Point;
            dpnt=dpnt+step;
         }
         //  Ïðîáîé ãîðèçîíòàëüíîé ëèíèè òðåíäà
         if (MathAbs(min1-min2)<10 && MathAbs(min2-min3)<10 && MathAbs(min1-min3)<10 &&
         slowCCI[0]>min1+delta && slowCCI[0]>min2+delta && slowCCI[0]>min3+delta &&
         slowCCI[1]<min1+delta && slowCCI[1]<min2+delta && slowCCI[1]<min3+delta &&
         min1>=-level && min2>=-level && min3>=-level && min1<0 && min2<0 && min3<0)	
         {
            HtlbBuffer[shift]=High[shift]+upnt*Point;
            upnt=upnt+step;
         }
      }

      ///////////////////////////////////////////////////////////////
      // Ñèãíàë íà âûõîä
      // -----------------------------------------------------------
      // 1. Ðàçâîðîò (CCI(14) îáðàçóåò êðþê èëè ïëîñêîå äâèæåíèå	
      // 2. Ïðîáîé CCI ëèíèè òðåíäà (TLB)		
      // 3. CCI(6) ïåðåñåêàåò CCI(14) âîâíóòðü		
      // 4. CCI ïåðåñåêàåò íóëåâóþ ëèíèþ (ZLC).
      // 5. Êîãäà CCI 14 îáðàçóåò êðþê îêîëî óðîâíÿ +/-200 èëè çà íèì
      // 6. CCI (áåç äâèæåíèÿ íåò óñïåõà)
      // -----------------------------------------------------------


   }    
   return(0);
}






Sample





Analysis



Market Information Used:

Series array that contains the highest prices of each bar
Series array that contains the lowest prices of each bar


Indicator Curves created:

Implements a curve of type DRAW_ARROW


Indicators Used:

Commodity channel index


Custom Indicators Used:

Order Management characteristics:

Other Features: