Скрипты: at PR+SQ-e

 

at PR+SQ-e:

Скрипт рисует на графике кривую Полиномиальной регрессии с каналом среднеквадратичного отклонения.

Author: Alexander

 
Супер, как и аналогичный индикатор!
 
Ваш скрипт можно использовать для обнаружения максимумов и минимимов? Например, для входа и выхода с рынка. Только непонятно, какие он бары использует.  у меня куча вопросов
 
Можно из Вашего скрипта сделать индикатор? Т.е. задаем период (допусти 50 бар) от начального(или 1го бара), и он на основе 50 баров рисует полином, мне бы хотелось получит такой индикатор. Только по Вашему скрипту видно, что он продолжает рисовать полином дальше, я думаю, что это не нужно
 
m_a_sim:
Ваш скрипт можно использовать для обнаружения максимумов и минимимов? Например, для входа и выхода с рынка. Только непонятно, какие он бары использует. у меня куча вопросов
Когда будете в сети ICQ или можно без него (я в основном пользуюсь Skype, кроме почты) напишите мне на ANG3110 собачка latchess.com - постараюсь ответить на Ваши вопросы.
 

Спасибо за скрипт.

У меня еще просьба.

Можно сделать такой же для МТ5, а так же можно сделать советника который бы сам выкидывал скрипт на график после закрытия свечи, чтоб каждый раз не кидать его в ручную.   

 

Тогда уж проще в режиме индикатора. Что-то типа такого:

//*******************************************************************
#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 MediumSlateBlue
#property indicator_color2 MediumSlateBlue
#property indicator_color3 MediumSlateBlue
#property indicator_width1 2
//================================
extern double hr  = 2;
extern int    m   = 2;
extern double ksq = 1.5;
extern bool   HR  = true;
//================================
double fx[],sH[],sL[];
double y[];
double dci,sq; 
int p;
//*******************************************************************
int init()
{
   SetIndexBuffer(0,fx);
   SetIndexBuffer(1,sH); 
   SetIndexBuffer(2,sL); 
   //------------------------------------------------
   if (HR) p=hr*60/Period(); else p=hr; if (p<m+2) p=m+2;
   
   ArrayResize(y,p);
   
   return(0);
}
//*******************************************************************
int start()
{
   int cbi=Bars-IndicatorCounted()-1;
   if (cbi==1) return(0);
   
   SetIndexDrawBegin(0,Bars-p);
   SetIndexDrawBegin(1,Bars-p);
   SetIndexDrawBegin(2,Bars-p);
   
   for (int j=0; j<p; j++) y[j]=Open[j];
   
   af_PR(y,p,m);
   
   sq=0;
   for (j=0; j<p; j++)
   {
      dci=Open[j]-y[j];
      sq+=dci*dci;
   }
   sq=ksq*MathSqrt(sq/p);
   
   for (j=0; j<p; j++)
   {
      fx[j]=y[j];
      sH[j]=y[j]+sq;
      sL[j]=y[j]-sq;
   }
   //----------------------------------------
   return(0);
}
//*******************************************************************
void af_PR(double &y[],int p,int m)
{
   static double A[],B[],X[],sx[];
   static int pn,Nn;
   
   double ci,sum;
   int N=m+1;
   
   if (pn!=p || Nn!=N)
   {
      pn=p; Nn=N;
      ArrayResize(A,N*N);
      ArrayResize(B,N);
      ArrayResize(X,N);
      ArrayResize(sx,2*N);
      sx[0]=p;
   }
   //--------sx-------
   for(int n=1; n<N*2; n++) 
   {
      sum=0; 
      for(int j=0; j<p; j++) 
         sum+=MathPow(j,n); 
      sx[n]=sum;
   }  
   //-------syx--------
   for(n=0; n<N; n++) 
   {
      sum=0; 
      for(j=0; j<p; j++) 
      {
         ci=y[j];
         if (n==0) sum+=ci; else 
         sum+=ci*MathPow(j,n);
      } 
      B[n]=sum;
   } 
   //------Matrix------
   for(n=0; n<N; n++) 
   for(j=0; j<N; j++) 
      A[j+n*N]=sx[j+n];
   
   //------Gauss-------
   double r,s;
   for(int k=0; k<N-1; k++)
   for(n=k+1; n<N; n++)
   {
      r=0; if (A[k+k*N]!=0) r=A[k+n*N]/A[k+k*N];
      for(j=k; j<N; j++)
         A[j+n*N]-=A[j+k*N]*r;
      B[n]-= B[k]*r;
   }
   if (A[N-1+(N-1)*N]!=0) X[N-1]=B[N-1]/A[N-1+(N-1)*N]; else X[N-1]=0;
   for(n=N-2; n>=0; n--)
   {
      s=0;
      for(j=n+1; j<N; j++)
         s+=A[j+n*N]*X[j];
      if (A[n+n*N]!=0) X[n]=(B[n]-s)/A[n+n*N]; else X[n]=0;
   }
   //--------fx--------
   for (j=0; j<p; j++)
   {
      sum=X[0];
      for(n=1; n<N; n++) 
         sum+=X[n]*MathPow(j,n); 
      y[j]=sum;
   }
}
//******************************************************************* 
 
ANG3110:

Тогда уж проще в режиме индикатора. Что-то типа такого:

Нееее, это не то пальто))  

Причина обращения: