VininI_Cyber Cycle(V2)m





//+------------------------------------------------------------------+
//|                                                     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.5
//#property indicator_minimum -1.05
//#property indicator_maximum  1.05
#property indicator_levelcolor  SlateGray  

//---- input parameters 

extern double alpha=0.01;
extern double betta=1.0;
extern int price_mode=4;
extern double level =0.5;

//---- 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);  

SetLevelValue (0, level);
SetLevelValue (1,-level);

   return(0); 
}  

int deinit() { return(0); } 


//+------------------------------------------------------------------+ 
//| Custom indicator iteration function | 
//+------------------------------------------------------------------+ 
int start() { 
   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]);
      iCycle[i]=(MathExp(2.0*Cycle[i])-1.0)/(MathExp(2.0*Cycle[i])+1.0);
      if (iCycle[i]>= level) {Buy[i]=iCycle[i];Buy[i+1]=iCycle[i+1];}
      if (iCycle[i]<=-level) {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: