Linearer Regressionskanal - Seite 18

 
Hier ist eine kompakte, schnelle Version der parabolischen und linearen Regression in mql4, aber wie man einen Zyklus bei der Berechnung des sxxy-Wertes loswird, habe ich noch nicht herausgefunden.
#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:

Der Indikator funktioniert

Und wo suchen Sie jetzt Ihr Glück, wieder an der Decke (wie im Bergbau)?
 
ANG3110:
Hier ist eine kompakte, schnelle Variante der parabolischen und linearen Regression in mql4, aber ich habe noch nicht herausgefunden, wie man einen Zyklus bei der Berechnung des sxxy-Wertes loswerden kann.

Wozu soll das gut sein?

Versuchen Sie, diesen Code anzuwenden, um die Regression an anderer Stelle zu berechnen, z. B. wenn Sie ein Array von Werten haben - Sie müssen ziemlich tief in die Funktionsweise des Codes einsteigen. Und warum, wenn es sinnvoller ist, das Gegenteil zu tun? Der Code ist vielleicht nicht so effizient, aber er ist leicht zu ändern.

Ich persönlich habe in meiner Regressionsklasse drei virtuelle Funktionen - um die Anzahl der Punkte und ihre Koordinaten zu erhalten, um die Regression anzuwenden - Sie sollten eine Klasse deklarieren, in der Sie diese Funktionen auf die benötigten Funktionen überladen - und sofort den Koeffizienten des Regressionspolynoms eines beliebigen Grades von null bis zum dritten erhalten. Darüber hinaus gibt es zwei optionale Funktionen - für die Ermittlung der Gewichte und des "Polarkreises" (d.h. des Punktes, durch den das Polynom notwendigerweise gehen muss), aber diese Funktionen können weggelassen werden, die Gewichte werden mit 1 gleichgesetzt, und das Polynom wird ohne den Polarkreis berechnet. Es ist vielleicht nicht so effizient (sowohl auf Kosten der internen Schleifen als auch der virtuellen Funktionen), aber es ist sehr flexibel, und man muss es nicht erst herausfinden.

 
Georgiy Merts:

Wozu soll das gut sein?

Versuchen Sie, diesen Code anzuwenden, um die Regression an anderer Stelle zu berechnen, z. B. wenn Sie ein Array von Werten haben - Sie müssen ziemlich tief in die Funktionsweise des Codes einsteigen. Und warum, wenn es vernünftiger ist, das Gegenteil zu tun, den Code nicht so effektiv, aber leicht änderbar sein zu lassen.

Persönlich, meine Regression Klasse hat drei virtuelle Funktionen - Anzahl der Punkte und ihre Koordinaten - zur Anwendung Regression - ich deklarieren eine Klasse, wo diese Funktionen müssen überladen werden und wir erhalten sofort die Regression Polynom-Koeffizient von jedem Grad von Null bis zum dritten. Darüber hinaus gibt es zwei optionale Funktionen - für die Ermittlung der Gewichte und des "Polarkreises" (d.h. des Punktes, durch den das Polynom notwendigerweise gehen muss), aber diese Funktionen können weggelassen werden, die Gewichte werden mit 1 gleichgesetzt, und das Polynom wird ohne den Polarkreis berechnet. Es ist vielleicht nicht so effizient (sowohl auf Kosten der internen Schleifen als auch der virtuellen Funktionen), aber es ist sehr flexibel, und man muss es nicht erst herausfinden.

Diese schnellen Varianten, für bestimmte Zwecke, genau die, wo Geschwindigkeit benötigt wird, beim Testen und die Position des Endes der Regression. Wenn Sie Koeffizienten und unterschiedlichen Grades des Polynoms benötigen, dann wende ich diese Variante an, hier Array von Koeffizienten im Code - X[]. Das heißt, es gibt erschöpfende Informationen zum Zeichnen von Kurven beliebiger Tiefe. Wenn es um die Zweckmäßigkeit einer Sache geht, hängt es wahrscheinlich davon ab, wer sie braucht. Ich verwende es nicht im Handel, sondern bisher nur für spezielle Forschungszwecke.
#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;
   }
}
//***************************************************************
 
Ich bin bereit, die tief verwurzelte Meinung zu widerlegen, dass Polynome jeden Grades Glück bringen und unersetzlich sind. An realen Beispielen von Teilnehmern werde ich beweisen, dass Polynome bei fast allen Indikatoren der URM-Regression verlieren (oben wurde der Link angegeben), um die Unsinkbarkeit von Polynomen für immer zu vergessen.
 
Yousufkhodja Sultonov:
Ich bin bereit, die tief verwurzelte Meinung zu widerlegen, dass Polynome jeglichen Grades lebenswichtig und unersetzlich sind. An realen Beispielen von Teilnehmern werde ich beweisen, dass Polynome bei fast allen Indizes der URM-Regression verlieren (oben habe ich einen Link angegeben), um die Unsinkbarkeit von Polynomen für immer zu vergessen.

Das ist nicht nötig, Sie haben es schon vor langer Zeit bewiesen, wir glauben es.

 
TheXpert:

Als Gegenleistung für was? Ich gebe einen Scheiß auf ihn, solange er nicht anfängt, in technischen Threads herumzurennen, insbesondere wenn es um Profis geht, Unsinn zu reden und Mitglieder zu trollen, "den Club" zu erwähnen und anderen Unsinn.

Es ist nur so, dass er in diesem Thread seine Trollerei auf wunderbare Weise in eine Selbstsperre umgesetzt hat, wofür ich ihm gedankt habe.

Wie kann man so etwas überwinden?Hier ist ein weiterer im Club- 11 Seiten voller Mist, die sich gegenseitig bescheißen, aber niemand hat genug Mumm, einen normalen Test zu schreiben - um seine Position zu überprüfen und zu argumentieren. Und es ist besser, sich zusammenzutun und es zumindest für sich selbst herauszufinden. Das nennt man Supertechnik-Experten bei den Profis... Ich kann mir vorstellen, was sie auf ihre Pluspunkte schreiben.

Es gibt hier noch einen weiteren Club - den OOP Victims Club mit neuen Konzepten - es stellt sich heraus, dass, wenn Vererbung nicht verwendet wird, es nicht mehr OOP ist, also gibt es diesen Unsinn. Und auch ihnen fehlt der Mut, einen Test zu schreiben und zu prüfen, wann es schneller ist - wann es Polymorphismus ist und wann es Piggyback ist usw. ...und all die gleichen Gesichter, die wir aus dem Club der Opfer von C++ kennen.

 
Vladimir Baskakov:
Und wo suchen Sie jetzt nach Glück, wieder etwas von der Decke (wie Bergbau)?

Es gibt nirgendwo Rezepte für "Glück", es ist sinnlos, danach zu suchen. Ich bin zufrieden mit dem, was erreicht wurde. Ich bin stolz darauf, dass es mir gelungen ist, den SDMhttps://www.mql5.com/ru/articles/250 und die "Markttheorie" https://www.mql5.com/ru/articles/1825 zu entwickeln, aber man wird sie erst in 100 Jahren oder mehr verstehen. Ich sagte bereits, dass der Indikatorhttps://www.mql5.com/ru/forum/318795/page17#comment_13020163 beharrlich auf seine Zeit wartet, und diese ist nun gekommen:


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

Nirgendwo gibt es ein Rezept für "Glück

Schade um Ihre Schüler, Semko hat diese Idee schon vor langer Zeit als unhaltbar erwiesen
 
Dmitry Fedoseev:

Wenn Sie eine Lösung ohne Rekursion finden können, ist sie besser als mit Rekursion.

Das ist in Ordnung.