//==================================================================================================
// Èíäèêàòîð Êàíàëà_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