//+------------------------------------------------------------------+ //| 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: