Doğrusal regresyon kanalı - sayfa 18

 
İşte mql4'te parabolik ve lineer regresyonun kompakt, hızlı bir versiyonu ama sxxy değerini hesaplarken bir döngüden nasıl kurtulacağımı hala çözemedim.
 #property strict
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 clrDeepSkyBlue
#property indicator_color2 clrRed
#property indicator_width1 2
#property indicator_width2 2
#property indicator_type1 DRAW_LINE
#property indicator_type2 DRAW_LINE
//================================
extern int p = 2 4;
//================================
double lr[],qr[];
double lwi,mai,fxi;
double ci,cp,sy,sxy,sxxy,lri,qri;
double a1,a2;
int w,n;
//*************************************************
int init()
{
   SetIndexBuffer ( 0 ,qr);
   SetIndexBuffer ( 1 ,lr);
   //-----------------------
   if (p< 3 ) p= 3 ;
   
   return ( 0 );
}
//*******************************************************************
int start()
{
   int cbi= Bars -IndicatorCounted()- 1 ; if (cbi< 0 ) return (- 1 );
   if (cbi== 0 ) return ( 0 ); if (cbi== 1 ) cbi= 0 ; 
   if (cbi> 1 )
   { 
      cbi= Bars -p- 1 ;
     
      sy= 0 ; sxy= 0 ; w= 0 ;  
       for ( int j= 1 ; j<=p; j++) 
      {
         ci=Open[cbi+p-j];
         sy+=ci; 
         sxy+=j*ci;
         w+=j; 
      }
      cbi--;
      
      a1= 6.0 /(p*(p+ 1 )*( 2 *p+ 1 ))*( 10 - 15.0 /(p+ 2 )); 
      a2= 12 - 15.0 /(p+ 2 );
   }
   //----------------------------------------
   for ( int i=cbi; i>= 0 ; i--) 
   {
      sxxy= 0 ;
       for ( int j= 1 ; j<=p; j++)
         sxxy+=j*j*Open[i+p-j];
      
      ci=Open[i]; 
      cp=Open[i+p];
      
      sxy+=ci*p-sy;
      sy+=ci-cp;
      
      mai=sy/p;
      lwi=sxy/w;
      
      lri= 3 *lwi- 2 *mai;
      
      qri= 3 *mai+a1*sxxy-lwi*a2;
      
      qr[i]=qri;
      lr[i]=lri;
   }
   //----------------------------------------
   return ( 0 );
}
//*********************************************************



 
Yousufkhodja Sultonov :

gösterge çalışmaları

Ve şimdi mutluluğu nerede arıyorsunuz, yine tavandan bir şey (madencilik endüstrisi gibi)?
 
ANG3110 :
İşte mql4'te parabolik ve lineer regresyonun kompakt, hızlı bir versiyonu ama sxxy değerini hesaplarken bir döngüden nasıl kurtulacağımı hala çözemedim.

Ve bunun anlamı ne?

Regresyonu hesaplamak için bu kodu başka bir yerde uygulamaya çalışın, örneğin, bir dizi değeriniz varsa - kodu oldukça derinlemesine incelemeniz gerekecek. Ve neden, tersini yapmak daha mantıklıysa, kodun o kadar verimli değil, kolayca değiştirilebilir olmasına izin verin.

Şahsen, regresyon sınıfımın üç sanal işlevi vardır - regresyonu uygulamak için noktaların sayısını ve koordinatlarını almak - bu işlevlerin gerekli olanlarla aşırı yükleneceği bir sınıf bildirmeniz gerekir - ve hemen regresyon polinom katsayısını elde ederiz. sıfırdan üçüncüye kadar herhangi bir derece. Ek olarak, iki isteğe bağlı işlev daha vardır - ağırlıkları ve "kutup noktasını" (yani, polinomun geçmesi gereken böyle bir nokta) almak için, ancak bu işlevler atlanabilir, ağırlıklar bire eşit olarak ayarlanır. , ve polinom polar noktalar olmadan hesaplanacaktır. Belki o kadar verimli değil (hem iç döngüler hem de sanal işlevler nedeniyle), ancak diğer yandan çok esnek ve anlamaya gerek kalmadan.

 
Georgiy Merts :

Ve bunun anlamı ne?

Regresyonu hesaplamak için bu kodu başka bir yerde uygulamaya çalışın, örneğin, bir dizi değeriniz varsa - kodu oldukça derinlemesine incelemeniz gerekecek. Ve neden, tersini yapmak daha mantıklıysa, kodun o kadar verimli değil, kolayca değiştirilebilir olmasına izin verin.

Şahsen, regresyon sınıfımın üç sanal işlevi vardır - regresyonu uygulamak için noktaların sayısını ve koordinatlarını almak - bu işlevlerin gerekli olanlarla aşırı yükleneceği bir sınıf bildirmeniz gerekir - ve hemen regresyon polinom katsayısını elde ederiz. sıfırdan üçüncüye kadar herhangi bir derece. Ek olarak, iki isteğe bağlı işlev daha vardır - ağırlıkları ve "kutup noktasını" (yani, polinomun geçmesi gereken böyle bir nokta) almak için, ancak bu işlevler atlanabilir, ağırlıklar bire eşit olarak ayarlanır. , ve polinom polar noktalar olmadan hesaplanacaktır. Belki o kadar verimli değil (hem iç döngüler hem de sanal işlevler nedeniyle), ancak diğer yandan çok esnek ve anlamaya gerek kalmadan.

Bunlar, belirli amaçlar için hızlı seçeneklerdir, tam olarak test ederken hıza ihtiyacınız olan yerde ve regresyonun sonunun konumu. Katsayılara ve farklı bir polinom derecesine ihtiyacınız varsa, o zaman bu seçeneği kullanıyorum.İşte X[] kodunda bir katsayı dizisi. Yani, herhangi bir derinliğe kadar eğriler oluşturmak için kapsamlı bilgiler vardır. Bir şeyin uygunluğu hakkında konuşursak, muhtemelen herkesin ihtiyacı olduğu gibi. Ticarette, şimdiye kadar sadece belirli araştırma amaçları için kullanmıyorum.
 #property strict
//********************************************************************
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 clrMediumSlateBlue
#property indicator_width1 2
#property indicator_type1 DRAW_LINE
//================================
extern int p = 120 ;
extern int m = 2 ;
//================================
double fx[];
double a[],b[],sx[],x[];
double ci,sum;
int N;
//********************************************************************
int init()
{
   SetIndexBuffer ( 0 ,fx);
   //------------------------------------------------
   N=m+ 1 ;
  
   if (p<N+ 2 ) p=N+ 2 ;
  
   ArrayResize (sx, 2 *N);
   ArrayResize (a,N*N);
   ArrayResize (b,N);
   ArrayResize (x,N);
  
   return ( 0 );
}
//********************************************************************
int start()
{
   int cbi= Bars -IndicatorCounted()- 1 ; if (cbi< 0 ) return (- 1 );
   if (cbi== 0 ) return ( 0 );
  
   //--------sx-------
   sx[ 0 ]=p;
   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 ( int n= 0 ; n<N; n++)
   {
      sum= 0 ;
       for ( int j= 0 ; j<p; j++)
      {
         ci=Open[j];
         if (n== 0 ) sum+=ci; else
         sum+=ci* MathPow (j,n);
      }
      b[n]=sum;
   }
   //------Matrix------
   for ( int j= 0 ; j<N; j++)
   for ( int n= 0 ; n<N; n++)
      a[n+j*N]=sx[n+j];
   //------Gauss-------
   af_Gauss(N,a,b,x);
   //------------------
   for ( int j= 0 ; j<p; j++)
   {
      sum=x[ 0 ];
       for ( int n= 1 ; n<N; n++)
         sum+=x[n]* MathPow (j,n);
        
      fx[j]=sum;
   }
  
   SetIndexDrawBegin( 0 , Bars -p);
  
   return ( 0 );
}
//***************************************************************
void af_Gauss( int M, double & A[], double & B[], double & X[])
{
   double r,s;
   for ( int k= 0 ; k<M- 1 ; k++)
   for ( int i=k+ 1 ; i<M; i++)
   {
      r= 0 ; if (A[k+k*M]!= 0 ) r=A[k+i*M]/A[k+k*M];
       for ( int j=k; j<M; j++)
         A[j+i*M]-=A[j+k*M]*r;
      B[i]-= B[k]*r;
   }
   if (A[M- 1 +(M- 1 )*M]!= 0 ) X[M- 1 ]=B[M- 1 ]/A[M- 1 +(M- 1 )*M]; else X[M- 1 ]= 0 ;

   for ( int i=M- 2 ; i>= 0 ; i--)
   {
      s= 0 ;
       for ( int j=i+ 1 ; j<M; j++)
         s+=A[j+i*M]*X[j];
       if (A[i+i*M]!= 0 ) X[i]=(B[i]-s)/A[i+i*M]; else X[i]= 0 ;
   }
}
//***************************************************************
 
Herhangi bir derecede polinomların her yerde mevcut olduğu ve vazgeçilmezliği hakkındaki yerleşik görüşü çürütmeye hazırım. Gerçek katılımcı örnekleri kullanarak, polinomların batmazlığını sonsuza kadar unutmak için RRM regresyonunun neredeyse tüm göstergelerinde (yukarıda bir bağlantı verdim) polinomların kaybettiğini kanıtlayacağım.
 
Yousufkhodja Sultonov :
Herhangi bir derecede polinomların her yerde mevcut olduğu ve vazgeçilmezliği hakkındaki yerleşik görüşü çürütmeye hazırım. Gerçek katılımcı örnekleri kullanarak, polinomların batmazlığını sonsuza kadar unutmak için RRM regresyonunun neredeyse tüm göstergelerinde (yukarıda bir bağlantı verdim) polinomların kaybettiğini kanıtlayacağım.

Evet, hayır, uzun zamandır herkese her şeyi kanıtladınız, inanıyoruz

 
TheXpert :

Sırayla ne? Evet, teknik konularda, özellikle artılarla ilgili olanlar, saçma sapan saçmalıklar ve katılımcıları trolleme, "kulüp" ve diğer saçmalıklardan bahsetmeye başlayana kadar beni ona bağla.

Sadece bu başlıkta yaptığı trollük güzel bir şekilde samobana çevrildi, bunun için teşekkür ettim.

Peki, bunu nasıl aşabilirsin? Ve hayal kurma. İşte kulüpte bir başka tavlanmış - 11 sayfa berbattı, birbirleriyle tartıştı ve hiç kimse normal bir test yazmak için yeterince zor değil - pozisyonlarını argümanlarla kontrol etmek ve savunmak için. Ve sadece güçlerinizi birleştirip en azından kendiniz için çözmeniz daha iyi olur. Buna artılarda süper teknik uzmanlar denir... Artılarını orada yazdığını hayal ediyorum.

Burada başka bir kulüp, OOP Mağdurlar Kulübü'nü yeni konseptlerle birlikte organize etti - kalıtım kullanılmazsa, bunun artık OOP, böyle bir çöp olmadığı ortaya çıkıyor. Ayrıca bir test yazmak ve ne zaman daha hızlı olduğunu kontrol etmek de yeterli değildir - ne zaman polimorfizm ve ne zaman bir anahtar, vb. ...ve C++ Victims Club'dan tanıdığımız tüm yüzler.

 
Vladimir Baskakov :
Ve şimdi mutluluğu nerede arıyorsunuz, yine tavandan bir şey (madencilik endüstrisi gibi)?

Hiçbir yerde "mutluluk" tarifi yok, bakmak işe yaramaz. Elde ettiklerimden memnunum. URM https://www.mql5.com/ru/articles/250 ve "Piyasa Teorisi" https://www.mql5.com/ru/articles/1825 geliştirmeyi başardığım için gurur duyuyorum, ancak 100 veya daha fazla yıl içinde anlaşılabilir. Daha önce https://www.mql5.com/ru/forum/318795/page17#comment_13020163 göstergenin inatla kanatlarda beklediğini söylemiştim ve geldi:


Канал линейной регрессии
Канал линейной регрессии
  • 2019.08.29
  • www.mql5.com
Есть индикатор линейной регрессии. Как встроить его расчет в советник и получить данные на 0 баре или на 1...
 
Yousufkhodja Sultonov :

Hiçbir yerde "mutluluk" tarifi yok.

Yazık öğrencilerinize, Semko bu fikrin tutarsızlığını uzun zaman önce kanıtladı.
 
Dmitry Fedoseev :

Özyinelemesiz bir çözüm bulunursa, özyinelemeden daha iyidir.

Herşey iyi
Neden: