//================================================================================================== // Индикатор Канала_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] =0; j--) // { // if ( High[j]>Out[j]) nsum_up=nsum_up+1; // if ( Low[j]=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); // } // //==================================================================================================