Channel_Indicator

Miscellaneous
Implements a curve of type %1
0 Views
0 Downloads
0 Favorites
Channel_Indicator
//==================================================================================================
//                                                                     Èíäèêàòîð Êàíàëà_1_0_2.mq4 //
//                                                                             buldakov_a@mail.ru //
//                                                                                        USD/JPY //
//                                                                                     07.08.2010 //
//==================================================================================================
#property indicator_chart_window                                                                  //
//#property indicator_separate_window                                                             //
#property indicator_buffers 5                                                                     //
#property indicator_color1 White                                                                  //
#property indicator_color2 Lime                                                                   //
#property indicator_color3 Gold                                                                   //
#property indicator_color4 Gold                                                                   //
#property indicator_color5 Lime                                                                   //
//+++ íà÷àëî áëîê 1 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//=== Âíåøíèå ïåðåìåííûå ===========================================================================
extern int Koridor=500;                                                                           //
extern double ext_canal=0.75;                                                                     //
extern double int_canal=0.32;                                                                     //
extern double pAlfa=0.0;                                                                          //
//+++ êîíåö áëîê 1 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//+++ íà÷àëî áëîê 2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//=== Âíóòðåííèå ïåðåìåííûå ========================================================================
int limit;                                                                                        //
int Hours,Hours_gor,Begin_Hours=9,End_Hours=1500;                                                 //
int j,i,n,t,s,k=30;                                                                               //
double Num,Den,dpi,sin,p,ds;                                                                      //
double syi,syti,stti,stttti,sOuti,si,sOutti,sOuttti,a,b,c,apr;                                    //
double Alfa,n_Alfa,s_Alfa,dAlfa;                                                                  //
double max,min,delta,step,sum,nsum_up,nsum_dn;                                                    //
//+++ êîíåö áëîê 2 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//+++ íà÷àëî áëîê 3 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//=== Áóôôåð âûâîäà ãðàôèêà ========================================================================
double Out[],Hi_ext[],Hi_int[],Lo_int[],Lo_ext[];                                                 //
//+++ êîíåö áëîê 3 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//=== Ôóíêöèÿ èíèöèàëèçàöèè ========================================================================
int init()                                                                                        //
{                                                                                                 //
//=== Óñòàíîâêà ñìåùåíèÿ ëèíèè èíäèêàòîðà îòíîñèòåëüíî íà÷àëà ãðàôèêà ==============================
SetIndexShift(0,0);                                                                               //
SetIndexShift(1,0);                                                                               //
SetIndexShift(2,0);                                                                               //
SetIndexShift(3,0);                                                                               //
SetIndexShift(4,0);                                                                               //
//=== Óñòàíîâêà ïîðÿäêîâîãî íîìåðà áàðà îò íà÷àëà äàííûõ ===========================================
SetIndexDrawBegin(0,0);                                                                           //
SetIndexDrawBegin(1,0);                                                                           //
SetIndexDrawBegin(2,0);                                                                           //
SetIndexDrawBegin(3,0);                                                                           //
SetIndexDrawBegin(4,0);                                                                           //
//=== 5 áóôåðîâ ïîëüçîâàòåëüñêîãî èíäèêàòîðà =======================================================
SetIndexBuffer(0,Out);                                                                            //
SetIndexBuffer(1,Hi_ext);                                                                         //
SetIndexBuffer(2,Hi_int);                                                                         //
SetIndexBuffer(3,Lo_int);                                                                         //
SetIndexBuffer(4,Lo_ext);                                                                         //
//=== Óñòàíàâëèâàåò òèï äëÿ óêàçàííîé ëèíèè èíäèêàòîðà =============================================
SetIndexStyle(0,DRAW_LINE,EMPTY,1);                                                               //
SetIndexStyle(1,DRAW_LINE,EMPTY,4);                                                               //
SetIndexStyle(2,DRAW_LINE,EMPTY,2);                                                               //
SetIndexStyle(3,DRAW_LINE,EMPTY,2);                                                               //
SetIndexStyle(4,DRAW_LINE,EMPTY,4);                                                               //
//=== Óñòàíîâêà èìåíè ëèíèè èíäèêàòîðà =============================================================
SetIndexLabel(0,NULL);                                                                            //
SetIndexLabel(1,NULL);                                                                            //
SetIndexLabel(2,NULL);                                                                            //
SetIndexLabel(3,NULL);                                                                            //
SetIndexLabel(4,NULL);                                                                            //
return(0);                                                                                        //
}                                                                                                 //
//=== Ôóíêöèÿ äåèíèöèàëèçàöèè ======================================================================
int deinit()                                                                                      //
{ return(0); }                                                                                    //
//=== ôóíêöèÿ áóäåò çàïóùåíà òîëüêî ïîñëå ïðèõîäà î÷åðåäíîé íîâîé êîòèðîâêè ========================
int start()                                                                                       //
{                                                                                                 //
//==================================================================================================
int counted_bars=IndicatorCounted();                                                              //
if(counted_bars<0) return(-1);                                                                    //
//=== Ïîñëåäíèé ïîñ÷èòàííûé áàð áóäåò ïåðåñ÷èòàí                                                  //
if(counted_bars>0) counted_bars--;                                                                //
limit=Bars-counted_bars;                                                                          //
int st=GetTickCount();                                                                            //
//+++ íà÷àëî áëîê 4 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//===Ïîñòðîåíèå íàêëîííîãî êàíàëà===================================================================
for(Hours=Begin_Hours; Hours<=End_Hours; Hours=Hours+3*MathCeil(1+Hours/80))                      //
  {                                                                                               //
s=((Hours*60)/Period())/3;                                                                        //
n=s+s+s;                                                                                          //
//=== Áûñòðîå Ïðåîáðàçîâàíèå Ôóðüå =================================================================
dpi=3.14159265/(s+s);                                                                             //
  for(j=(s+s); j>=0; j--)                                                                         //
  {                                                                                               //
     Num=0.0;Den=0.0;                                                                             //
     for(i=s; i>=0; i--)                                                                          //
     {                                                                                            //
     sin=MathSin(2*i*dpi);                                                                        //
     Num=Num+sin*Close[j+2*i];                                                                    //
     Den=Den+sin;                                                                                 //
     }                                                                                            //
  Out[j+s]=Num/Den;                                                                               //
  }                                                                                               //
ds=(Out[s+0]-Out[s+2]);                                                                           //
for(i=s; i>=0; i--)                                                                               //
{                                                                                                 //
Out[i]=Out[i+2]+ds+((1.0*Point*Period())/60)*(Close[i+2]-Out[i+2]);                               //
}                                                                                                 //
//=== Àïðîêñèìàöèÿ ïîëèíîìîì âòîðîé ñòåïåíè ========================================================
t=n+1;                                                                                            //
sOuti=0.0;si=0.0;stti=0.0;stttti=0.0;sOutti=0.0;sOuttti=0.0;                                      //
for(i=n; i>=0; i--)                                                                               //
{                                                                                                 //
p=(-i+n/2.0);                                                                                     //
apr=(Out[i]+Out[n]+((Out[0*n]-Out[n])/(n))*((n)-i))/2;// Àïðîêñèìàöèÿ ëèíåéíîé ôóíêöèè + FFT      //
sOuti=sOuti+apr;                                                                                  //
si=si+p;                                                                                          //
stti=stti+p*p;                                                                                    //
stttti=stttti+p*p*p*p;                                                                            //
sOutti=sOutti+(apr*p);                                                                            //
sOuttti=sOuttti+(apr*p*p);                                                                        //
}                                                                                                 //
b=sOutti/stti;                                                                                    //
c=-((sOuti/t)-(sOuttti/stti))/MathAbs((stti/t)-(stttti/stti));                                    //
a=(sOuti-stti*c)/t;                                                                               //
for(i=n; i>=0; i--)                                                                               //
{                                                                                                 //
p=(-i+n/2.0);                                                                                     //
Out[i]=a+b*p+c*p*p;                                                                               //
}                                                                                                 //
//---Íàõîæäåíèå Max è Min îòêëîíåíèÿ--------------------------------------------------------------//
max=0.0;min=0.0;                                                                                  //
for(j=n; j>=0; j--)                                                                               //
{                                                                                                 //
if (High[j]>Out[j] && (High[j]-Out[j])>=max) max=(High[j]-Out[j]);                                //
if (Low[j] <Out[j] && (Low[j] -Out[j])<=min) min=(Low[j]-Out[j]);                                 //
}                                                                                                 //
//---Íàõîæäåíèå nsum_up è nsum_dn-----------------------------------------------------------------//
nsum_up=1;nsum_dn=1;                                                                              //
for(j=n; j>=0; j--)                                                                               //
{                                                                                                 //
if ( High[j]>Out[j]) nsum_up=nsum_up+1;                                                           //
if ( Low[j]<Out[j] ) nsum_dn=nsum_dn+1;                                                           //
}                                                                                                 //
//---Âåðõ âíåøíåãî êàíàëà-------------------------------------------------------------------------//
step=max/k;                                                                                       //
for(j=0; j<=k; j++)                                                                               //
{                                                                                                 //
sum=0;                                                                                            //
for(i=n; i>=0; i--)                                                                               //
{if ( High[i]>(Out[i]+j*step)) sum=sum+1;}                                                        //
if ((sum/nsum_up)<(1-ext_canal)) break;                                                           //
}                                                                                                 //
for(i=n; i>=0; i--)                                                                               //
{                                                                                                 //
Hi_ext[i]=Out[i]+j*step;                                                                          //
}                                                                                                 //
//---Íèç âíåøíåãî êàíàëà--------------------------------------------------------------------------//
step=min/k;                                                                                       //
for(j=0; j<=k; j++)                                                                               //
{                                                                                                 //
sum=0;                                                                                            //
for(i=n; i>=0; i--)                                                                               //
{if ( Low[i]<(Out[i]+j*step)) sum=sum+1;}                                                         //
if ((sum/nsum_dn)<(1-ext_canal)) break;                                                           //
}                                                                                                 //
for(i=n; i>=0; i--)                                                                               //
{                                                                                                 //
Lo_ext[i]=Out[i]+j*step;                                                                          //
}                                                                                                 //
//---Ïåðèñîâûâàíèå íîâîé ñðåäíåé ëèíèè------------------------------------------------------------//
for(j=n; j>=0; j--)                                                                               //
{                                                                                                 //
Out[j]=(Hi_ext[j]+Lo_ext[j])/2;                                                                   //
}                                                                                                 //
//---Îïðåäåëåíèå óãëà íàêëîíà è óñêîðåíèÿ---------------------------------------------------------//
dAlfa=0;                                                                                          //
Alfa=  (((Out[0]-Out[1])/Point)*60)/Period();                                                     //
n_Alfa=(((Out[n-2]-Out[n-1])/Point)*60)/Period();                                                 //
s_Alfa=(((Out[s-2]-Out[s-1])/Point)*60)/Period();                                                 //
if (Alfa>0) dAlfa=(((Out[0]-Out[60/Period()])-(Out[60/Period()]-Out[120/Period()])))/Point;       //
if (Alfa<0) dAlfa=(((Out[120/Period()]-Out[60/Period()])-(Out[60/Period()]-Out[0])))/Point;       //
//------------------------------------------------------------------------------------------------//
int r=0;                                                                                          //
if (MathAbs(Alfa-n_Alfa)<((MathAbs(Alfa)+MathAbs(n_Alfa))/4)) r=1;                                //
//---Óñëîâèÿ ïîèñêà êàíàëà------------------------------------------------------------------------//
delta=(Hi_ext[0]-Lo_ext[0])/Point;                                                                //
if (Alfa>=pAlfa  && s_Alfa>=pAlfa  && n_Alfa>=pAlfa  && r>0 && Koridor<=delta) break;             //
if (Alfa<=-pAlfa && s_Alfa<=-pAlfa && n_Alfa<=-pAlfa && r>0 && Koridor<=delta) break;             //
}                                                                                                 //
//---Êîíåö âíåøíåãî êàíàëà------------------------------------------------------------------------//
//---Âåðõ âíóòðåííåãî êàíàëà----------------------------------------------------------------------//
step=max/k;                                                                                       //
for(j=0; j<=k; j++)                                                                               //
{                                                                                                 //
sum=0;                                                                                            //
for(i=n; i>=0; i--)                                                                               //
{if ( High[i]>(Out[i]+j*step)) sum=sum+1;}                                                        //
if ((sum/nsum_up)<(1-int_canal)) break;                                                           //
}                                                                                                 //
for(i=n; i>=0; i--)                                                                               //
{                                                                                                 //
Hi_int[i]=Out[i]+j*step;                                                                          //
}                                                                                                 //
//---Íèç âíóòðåííåãî êàíàëà-----------------------------------------------------------------------//
step=min/k;                                                                                       //
for(j=0; j<=k; j++)                                                                               //
{                                                                                                 //
sum=0;                                                                                            //
for(i=n; i>=0; i--)                                                                               //
{if ( Low[i]<(Out[i]+j*step)) sum=sum+1;}                                                         //
if ((sum/nsum_dn)<(1-int_canal)) break;                                                           //
}                                                                                                 //
for(i=n; i>=0; i--)                                                                               //
{                                                                                                 //
Lo_int[i]=Out[i]+j*step;                                                                          //
}                                                                                                 //
//---Ïåðèñîâûâàíèå íîâîé ñðåäíåé ëèíèè------------------------------------------------------------//
for(j=n; j>=0; j--)                                                                               //
{                                                                                                 //
Out[j]=(Hi_int[j]+Lo_int[j])/2;                                                                   //
}                                                                                                 //
//+++ êîíåö áëîê 4 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comment(                                                                                          //
"Ïåðèóä êàíàëà                                 ",DoubleToStr(Hours,0)," ÷àñ","\n",                //
"Êîðèäîð                                         ",DoubleToStr(delta,0)," Ïò","\n",               //
"Óãîë íàêëîíà íà÷àëà                         ",DoubleToStr(Alfa,1)," Ïò/÷àñ","\n",                //
"Óãîë íàêëîíà ñåðåäèíû                       ",DoubleToStr(s_Alfa,1)," Ïò/÷àñ","\n",              //
"Óãîë íàêëîíà êîíöà                          ",DoubleToStr(n_Alfa,1)," Ïò/÷àñ","\n",              //
"Âðåìÿ ðàñ÷åòà                             ",DoubleToStr(GetTickCount()-st,0),"mS");              //
return(0);                                                                                        //
}                                                                                                 //
//==================================================================================================

Comments