Navigation:Home > Content >

Canal_Linear_Sinus_FT.mq4

Time: 2010-07-10 | Download file:Canal_Linear_Sinus_FT.mq4

//==================================================================================================
//                                                                      Canal_Linear_Sinus_FT.mq4 //
//                                                                             [email protected] //
//                                                                                        USD/JPY //
//                                                                                     03.11.2009 //
//==================================================================================================
#property indicator_chart_window                                                                  //
//#property indicator_separate_window                                                             //
#property indicator_buffers 8                                                                     //
#property indicator_color1 Blue                                                                   //
#property indicator_color2 OrangeRed                                                              //
#property indicator_color3 Red                                                                    //
#property indicator_color4 Red                                                                    //
#property indicator_color5 Gold                                                                   //
#property indicator_color6 Gold                                                                   //
#property indicator_color7 Green                                                                  //
#property indicator_color8 Green                                                                  //
//+++ начало блок 1 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//=== Внешние переменные ===========================================================================
extern int Hours=1;                                                                             //
//+++ конец блок 1 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//+++ начало блок 2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//=== Внутренние переменные ========================================================================
int limit;                                                                                        //
int j,i,n,t;                                                                                      //
double pi=3.14159265,Num,Den;                                                                     //
double syi,syti,stti,stttti,sOuti,si,sOutti,sOuttti,a,b,c;                                        //
double Alfa,dAlfa,sum_up,sum_dn;                                                                  //
double temp1,temp2,temp3,temp4,temp5,temp6,temp7;                                                 //
//+++ конец блок 2 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//+++ начало блок 3 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//=== Буффер вывода графика ========================================================================
double Sinus[],Out[],Up1[],Dn1[],Up2[],Dn2[],Up3[],Dn3[];                                         //
//+++ конец блок 3 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//=== Функция инициализации ========================================================================
int init()                                                                                        //
{                                                                                                 //
//=== Установка смещения линии индикатора относительно начала графика ==============================
SetIndexShift(0,0);                                                                               //
SetIndexShift(1,0);                                                                               //
SetIndexShift(2,0);                                                                               //
SetIndexShift(3,0);                                                                               //
SetIndexShift(4,0);                                                                               //
SetIndexShift(5,0);                                                                               //
SetIndexShift(6,0);                                                                               //
SetIndexShift(7,0);                                                                               //
//=== Установка порядкового номера бара от начала данных ===========================================
SetIndexDrawBegin(0,0);                                                                           //
SetIndexDrawBegin(1,0);                                                                           //
SetIndexDrawBegin(2,0);                                                                           //
SetIndexDrawBegin(3,0);                                                                           //
SetIndexDrawBegin(4,0);                                                                           //
SetIndexDrawBegin(5,0);                                                                           //
SetIndexDrawBegin(6,0);                                                                           //
SetIndexDrawBegin(7,0);                                                                           //
//=== 8 буферов пользовательского индикатора =======================================================
SetIndexBuffer(0,Sinus);                                                                          //
SetIndexBuffer(1,Out);                                                                            //
SetIndexBuffer(2,Up1);                                                                            //
SetIndexBuffer(3,Dn1);                                                                            //
SetIndexBuffer(4,Up2);                                                                            //
SetIndexBuffer(5,Dn2);                                                                            //
SetIndexBuffer(6,Up3);                                                                            //
SetIndexBuffer(7,Dn3);                                                                            //
//=== Устанавливает тип для указанной линии индикатора =============================================
SetIndexStyle(0,DRAW_NONE,EMPTY,1);                                                               //
SetIndexStyle(1,DRAW_LINE,EMPTY,2);                                                               //
SetIndexStyle(2,DRAW_LINE,EMPTY,1);                                                               //
SetIndexStyle(3,DRAW_LINE,EMPTY,1);                                                               //
SetIndexStyle(4,DRAW_LINE,EMPTY,1);                                                               //
SetIndexStyle(5,DRAW_LINE,EMPTY,1);                                                               //
SetIndexStyle(6,DRAW_LINE,EMPTY,1);                                                               //
SetIndexStyle(7,DRAW_LINE,EMPTY,1);                                                               //
//=== Установка имени линии индикатора =============================================================
SetIndexLabel(0,NULL);                                                                            //
SetIndexLabel(1,NULL);                                                                            //
SetIndexLabel(2,NULL);                                                                            //
SetIndexLabel(3,NULL);                                                                            //
SetIndexLabel(4,NULL);                                                                            //
SetIndexLabel(5,NULL);                                                                            //
SetIndexLabel(6,NULL);                                                                            //
SetIndexLabel(7,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;                                                                          //
//+++ начало блок 4 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//=== Fast начало ==================================================================================
if (Hours<=2) Hours=2;                                                                            //
n=((Hours*60)/Period())/2;                                                                        //
//=== Быстрое Преобразование Фурье =================================================================
    for(j=(2*n); j>=0; j--)                                                                       //
    {                                                                                             //
       Num=0;Den=0;                                                                               //
       for(i=(n+n); i>=0; i--)                                                                    //
       {                                                                                          //
         Num=Num+MathSin(i*pi/(n+n))*Close[j+i];                                                  //
         Den=Den+MathSin(i*pi/(n+n));                                                             //
       }                                                                                          //
     Sinus[j+n]=Num/Den;                                                                          //
       for(i=n; i>=0; i--)                                                                        //
       {                                                                                          //
     Sinus[i]=Sinus[n+0]+(Sinus[n+0]-Sinus[n+1])*(n-i);                                           //
       }                                                                                          //
    }                                                                                             //
//==================================================================================================
//=== Апроксимация полиномом второй степени ========================================================
t=2*n+1;                                                                                          //
stti=(t*t*t-t)/12;                                                                                //
stttti=(3*t*t*t*t*t-10*t*t*t+7*t)/240;                                                            //
sOuti=0.0;si=0.0;sOutti=0.0;sOuttti=0.0;                                                          //
  for(i=(n*2); i>=0; i--)                                                                         //
  {                                                                                               //
  sOuti=sOuti+Sinus[i];                                                                           //
  si=si+(-i+(t/2));                                                                               //
  sOutti=sOutti+(Sinus[i]*(-i+(t/2)));                                                            //
  sOuttti=sOuttti+(Sinus[i]*(-i+(t/2))*(-i+(t/2)));                                               //
  }                                                                                               //
b=sOutti/stti;                                                                                    //
c=-((sOuti/t)-(sOuttti/stti))/MathAbs((stti/t)-(stttti/stti));                                    //
a=(sOuti-stti*c)/t;                                                                               //
  for(i=(2*n); i>=0; i--)                                                                         //
  {                                                                                               //
  Out[i]=a+b*(-i+(t/2))+c*(-i+(t/2))*(-i+(t/2));                                                  //
  }                                                                                               //
//==================================================================================================
sum_up=0;sum_dn=0;                                                                                //
  for(i=(2*n); i>=0; i--)                                                                         //
  {                                                                                               //
  if (High[i]>Out[i]) sum_up=sum_up+MathAbs(High[i]-Out[i]);                                      //
  if (Low[i] =0; i--)                                                                         //
  {                                                                                               //
//==================================================================================================
Up3[i]=Out[i]+3.6*sum_up;                                                                         //
Up2[i]=Out[i]+2.4*sum_up;                                                                         //
Up1[i]=Out[i]+1.2*sum_up;                                                                         //
Dn1[i]=Out[i]-1.2*sum_dn;                                                                         //
Dn2[i]=Out[i]-2.4*sum_dn;                                                                         //
Dn3[i]=Out[i]-3.6*sum_dn;                                                                         //
//==================================================================================================
temp1=Out[i]+3.6*sum_up;                                                                          //
temp2=Out[i]+2.4*sum_up;                                                                          //
temp3=Out[i]+1.2*sum_up;                                                                          //
temp4=Out[i]+0.0*sum_up;                                                                          //
temp5=Out[i]-1.2*sum_dn;                                                                          //
temp6=Out[i]-2.4*sum_dn;                                                                          //
temp7=Out[i]-3.6*sum_dn;                                                                          //
//==================================================================================================
if (Low[0]>(Out[0]+1.2*sum_up))  Up3[i]=Out[i]+4.8*sum_up;                                        //
if (Low[0]>(Out[0]+1.2*sum_up))  Dn3[i]=Out[i]+3.6*sum_up;                                        //
if (Low[0]>(Out[0]+1.2*sum_up))  Up2[i]=Out[i]+2.4*sum_up;                                        //
if (Low[0]>(Out[0]+1.2*sum_up))  Up1[i]=Out[i]+1.2*sum_up;                                        //
if (Low[0]>(Out[0]+1.2*sum_up))  Dn1[i]=Out[i]-1.2*sum_dn;                                        //
if (Low[0]>(Out[0]+1.2*sum_up))  Dn2[i]=Out[i]-2.4*sum_dn;                                        //
//==================================================================================================
if (Low[0]>(Out[0]+1.2*sum_up))  temp1=Out[i]+4.8*sum_up;                                         //
if (Low[0]>(Out[0]+1.2*sum_up))  temp2=Out[i]+3.6*sum_up;                                         //
if (Low[0]>(Out[0]+1.2*sum_up))  temp3=Out[i]+2.4*sum_up;                                         //
if (Low[0]>(Out[0]+1.2*sum_up))  temp4=Out[i]+1.2*sum_up;                                         //
if (Low[0]>(Out[0]+1.2*sum_up))  temp5=Out[i]+0.0*sum_up;                                         //
if (Low[0]>(Out[0]+1.2*sum_up))  temp6=Out[i]-1.2*sum_dn;                                         //
if (Low[0]>(Out[0]+1.2*sum_up))  temp7=Out[i]-2.4*sum_dn;                                         //
//==================================================================================================
if (High[0]<(Out[0]-1.2*sum_dn))  Up2[i]=Out[i]+2.4*sum_up;                                       //
if (High[0]<(Out[0]-1.2*sum_dn))  Up1[i]=Out[i]+1.2*sum_up;                                       //
if (High[0]<(Out[0]-1.2*sum_dn))  Dn1[i]=Out[i]-1.2*sum_dn;                                       //
if (High[0]<(Out[0]-1.2*sum_dn))  Dn2[i]=Out[i]-2.4*sum_dn;                                       //
if (High[0]<(Out[0]-1.2*sum_dn))  Up3[i]=Out[i]-3.6*sum_dn;                                       //
if (High[0]<(Out[0]-1.2*sum_dn))  Dn3[i]=Out[i]-4.8*sum_dn;                                       //
//==================================================================================================
if (High[0]<(Out[0]-1.2*sum_dn))  temp1=Out[i]+2.4*sum_up;                                        //
if (High[0]<(Out[0]-1.2*sum_dn))  temp2=Out[i]+1.2*sum_up;                                        //
if (High[0]<(Out[0]-1.2*sum_dn))  temp3=Out[i]-0.0*sum_dn;                                        //
if (High[0]<(Out[0]-1.2*sum_dn))  temp4=Out[i]-1.2*sum_dn;                                        //
if (High[0]<(Out[0]-1.2*sum_dn))  temp5=Out[i]-2.4*sum_dn;                                        //
if (High[0]<(Out[0]-1.2*sum_dn))  temp6=Out[i]-3.6*sum_dn;                                        //
if (High[0]<(Out[0]-1.2*sum_dn))  temp7=Out[i]-4.8*sum_dn;                                        //
//==================================================================================================
  }                                                                                               //
//==================================================================================================
dAlfa=0;                                                                                          //
Alfa=((Out[0]-Out[60/Period()]))/Point;                                                           //
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;       //
//==================================================================================================
Comment(                                                                                          //
"Дата и Время ",TimeToStr(CurTime()),"\n",                                                        //
         "Периуд       ",DoubleToStr(Hours,0)," час","\n",                                        //
        "Угол наклона ",DoubleToStr(Alfa,1)," Пт/час",                                            //
        "  Изменение угла наклона ",DoubleToStr(dAlfa,3)," Пт/час","\n",                          //
        "  ",DoubleToStr(temp1,2)," Пт","\n",                                                     //
        "  ",DoubleToStr(temp2,2)," Пт","\n",                                                     //
        "  ",DoubleToStr(temp3,2)," Пт","\n",                                                     //
        "  ",DoubleToStr(temp4,2)," Пт","\n",                                                     //
        "  ",DoubleToStr(temp5,2)," Пт","\n",                                                     //
        "  ",DoubleToStr(temp6,2)," Пт","\n",                                                     //
        "  ",DoubleToStr(temp7,2)," Пт");                                                         //
return(0);                                                                                        //
}                                                                                                 //
//==================================================================================================

Recommend