VininI_Cyber_Cycle_V2_My4[1]





//+------------------------------------------------------------------+
//|                                                     VininI_Cyber |
//|                                Copyright © 2009, Victor Nicolaev |
//|                                            e-mail: vinin@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, Victor Nicolaev"
#property link      "e-mail: vinin@mail.ru"

#property indicator_separate_window
#property indicator_buffers 3
#property indicator_color1 Yellow
#property indicator_color2 Green
#property indicator_color3 Red
#property indicator_level1  -0.5
#property indicator_level2   0
#property indicator_level3   0.5
#property indicator_minimum -1.05
#property indicator_maximum  1.05

//---- input parameters 

extern double alpha=0.01;
extern double betta=1.0;
extern int price_mode=4;
extern double NormalizeTarget=7.5; // èíòåðâàë [-NormalizeTarget,+NormalizeTarget]
                                   // íà êîòîðûé íîðìèðóåòñÿ çíà÷åíèå èíäèêàòîðà
extern int BarInWindow=1000;       // øèðèíà îêíà äëÿ íîðìèðîâêè â áàðàõ
extern  bool prn=false;            // âêëþ÷èò ïå÷àòü â æóðíàë 
//---- buffers 

double Cycle[];
double Smonth[];
double iCycle[];
double Buy[];
double Sell[];

//+------------------------------------------------------------------+ 
//| Custom indicator initialization function | 
//+------------------------------------------------------------------+ 
int init() { 
   IndicatorBuffers(5);
   SetIndexBuffer(0, iCycle); 
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(1, Buy); 
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(2, Sell); 
   SetIndexStyle(2,DRAW_LINE);

   SetIndexBuffer(3, Smonth);
   SetIndexBuffer(4, Cycle);  
   IndicatorShortName("VininI_Cyber_Cycle_Norm_Sym");  
  
   return(0); 
}  

int deinit() { return(0); } 


//+------------------------------------------------------------------+ 
//| Custom indicator iteration function | 
//+------------------------------------------------------------------+ 

int start() { 
  
   //---------çàäàåòñÿ øèðèíà îêíà ïî óìîë÷àíèþ 1000
   if( BarInWindow <= 0 )BarInWindow=1000;
   
   int counted_bars = IndicatorCounted(); 

   if (counted_bars < 0) return(-1); 
   if (counted_bars > 0) counted_bars--;
   
   int limit=Bars - counted_bars;
   for(int i = limit; i >= 0; i--)    {
      Smonth[i]=(Price(i)+2.0*Price(i+1)+2.0*Price(i+2)+Price(i+3))/6.0;
   }
   for(i = limit; i >= 0; i--)
      {
      //===!!!===Çäåñü ìîæíî âñòàâèòü âû÷èñëåíèå ëþáîãî èíäèêàòîðà, åñëè óäàëüèòü ïðåäûäóùèé öèêë
      Cycle[i]=betta*((1.0-0.5*alpha)*(1.0-0.5*alpha)*(Smonth[i]-2.0*Smonth[i+1]+Smonth[i+2])+2.0*(1.0-alpha)*Cycle[i+1]-(1.0-alpha)*(1.0-alpha)*Cycle[i+2]);
      //------êîíòðîëüíàÿ ïå÷àòü
      if( prn && i<2  )Print("j=",i," cycle ",Cycle[i]);
      }
   //------- Âû÷èñë. äèàïàçîí èçìåíåíèé èíäèêàòîðà â îêíå áàð [1,BarInWindow]
   int iMax =  ArrayMaximum(Cycle,BarInWindow,0);double Max=Cycle[iMax];
   int iMin =  ArrayMinimum(Cycle,BarInWindow,0);double Min=Cycle[iMin];
   //--------Êîíòðîëüíàÿ ïå÷àòü
   if( prn)Print( "Min ",Min," Max ",Max);
   //------ïðîâåðêà äåëåíèÿ íà íîëü
   if( Max == Min ) bool NoZerodevide = false; else NoZerodevide = true;
   
   for(i = limit; i >= 0; i--) {
      //-------ïðåîáðàçîâàíèå [Min,Max] -> [0,1] y=(x-a)/(b-a)
      if( NoZerodevide )double NCycle2 = (Cycle[i]-Min)/(Max-Min);
      //--------êîíòðîëüíàÿ ïå÷àòü
      if(prn && i<2 ) Print("i=",i,"[a,b]-> [0,1] ",Cycle[i],"  ",NCycle2);
      //-------ïðåîáðàçîâàíèå [0,1] -> [-NormalizeTarget,+NormalizeTarget] y = (b-a)x+a;
      double NCycle = 2*NormalizeTarget*NCycle2-NormalizeTarget;
      //--------êîíòðîëüíàÿ ïå÷àòü
      if(prn && i< 2 ) Print("i=",i,"[0,1]-> [-N,N] ",NCycle2,"  ",NCycle);
      //---------îáð. ïðåîáð.Ôèøåðà
      iCycle[i]=(MathExp(2.0*NCycle)-1.0)/(MathExp(2.0*NCycle)+1.0);
      //--------êîíòðîëüíàÿ ïå÷àòü
      if(prn && i< 2 ) Print("i=",i," [-N,N]->Ôèøåð ",NCycle,"   ",iCycle[i]);
      
      if (iCycle[i]>= 0.5) {Buy[i]=iCycle[i];Buy[i+1]=iCycle[i+1];}
      if (iCycle[i]<=-0.5) {Sell[i]=iCycle[i];Sell[i+1]=iCycle[i+1];}
   }
   return(0); 
} 
//+------------------------------------------------------------------+

double Price(int pos){
   switch (price_mode){
      case PRICE_CLOSE: return(Close[pos]);
      case PRICE_OPEN: return(Open[pos]);
      case PRICE_HIGH: return(High[pos]);
      case PRICE_LOW: return(Low[pos]);
      case PRICE_MEDIAN: return((High[pos]+Low[pos])/2.0); 
      case PRICE_TYPICAL: return((High[pos]+Low[pos]+Close[pos])/3.0);
      case PRICE_WEIGHTED: return((High[pos]+Low[pos]+Close[pos]+Close[pos])/4.0);
   }
}





Sample





Analysis



Market Information Used:

Series array that contains close prices for each bar
Series array that contains open prices of each bar
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_LINE

Indicators Used:



Custom Indicators Used:

Order Management characteristics:

Other Features: