Canal de régression linéaire - page 18

 
Voici une version compacte et rapide de la régression parabolique et linéaire dans mql4, mais je n'ai pas encore trouvé comment se débarrasser d'un cycle lors du calcul de la valeur sxxy.
#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:

L'indicateur fonctionne

Et où cherchez-vous le bonheur maintenant, quelque chose qui vient du plafond à nouveau (comme l'exploitation minière) ?
 
ANG3110:
Voici une variante compacte et rapide de la régression parabolique et linéaire dans mql4, mais je n'ai toujours pas trouvé comment se débarrasser d'un cycle lors du calcul de la valeur sxxy.

Quel est le but de tout ça ?

Essayez d'appliquer ce code pour calculer la régression ailleurs, par exemple, si vous disposez d'un tableau de valeurs - vous devrez aller assez loin dans le fonctionnement du code. Et pourquoi, s'il est plus raisonnable de faire l'inverse, le code n'est peut-être pas aussi efficace, mais il est facile à modifier.

Personnellement, ma classe de régression a trois fonctions virtuelles - pour obtenir le nombre de points et leurs coordonnées, pour appliquer la régression - vous devriez déclarer une classe où vous surchargez ces fonctions pour celles qui sont nécessaires - et obtenir immédiatement le coefficient du polynôme de régression de n'importe quel degré de zéro au troisième. En outre, il existe deux fonctions facultatives - pour obtenir les poids et le "point polaire" (c'est-à-dire le point par lequel le polynôme doit nécessairement passer), mais ces fonctions peuvent être omises, les poids seront égaux à un, et le polynôme sera calculé sans le point polaire. Elle n'est peut-être pas aussi efficace (au détriment des boucles internes et des fonctions virtuelles), mais elle est très souple et il n'est pas nécessaire de s'y retrouver.

 
Georgiy Merts:

Quel est le but de tout ça ?

Essayez d'appliquer ce code pour calculer la régression ailleurs, par exemple, si vous disposez d'un tableau de valeurs - vous devrez aller assez loin dans le fonctionnement du code. Et pourquoi, alors qu'il est plus raisonnable de faire le contraire, faire en sorte que le code ne soit pas si efficace, mais facilement modifiable.

Personnellement, ma classe de régression a trois fonctions virtuelles - nombre de points et leurs coordonnées - pour appliquer la régression - je déclare une classe où ces fonctions doivent être surchargées et nous obtenons immédiatement le coefficient polynomial de régression de n'importe quel degré de zéro au troisième. En outre, il existe deux fonctions facultatives - pour obtenir les poids et le "point polaire" (c'est-à-dire le point par lequel le polynôme doit nécessairement passer), mais ces fonctions peuvent être omises, les poids seront égaux à un, et le polynôme sera calculé sans le point polaire. Elle n'est peut-être pas aussi efficace (au détriment des boucles internes et des fonctions virtuelles), mais elle est très souple et il n'est pas nécessaire de s'y retrouver.

Ces variantes rapides, à des fins spécifiques, exactement celles où la vitesse est nécessaire, lors des tests et la position de la fin de la régression. Si vous avez besoin de coefficients et de différents degrés de polynôme, alors j'applique cette variante.ici tableau des coefficients dans le code - X[]. C'est-à-dire qu'il existe des informations exhaustives pour dessiner des courbes de toute profondeur. Si nous parlons de l'opportunité de quelque chose, cela dépend probablement de qui en a besoin. Je ne l'utilise pas dans le commerce, seulement à des fins de recherche spécifique jusqu'à présent.
#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;
   }
}
//***************************************************************
 
Je suis prêt à réfuter l'opinion bien ancrée selon laquelle les polynômes de tout degré sont chanceux et irremplaçables. Sur des exemples réels de participants, je prouverai que les polynômes perdent par presque tous les indicateurs de régression de l'URM (le lien est donné plus haut), pour oublier à jamais l'insubmersibilité des polynômes.
 
Yousufkhodja Sultonov:
Je suis prêt à réfuter l'opinion bien ancrée selon laquelle les polynômes de tout degré sont vitaux et irremplaçables. Sur des exemples réels de participants, je prouverai que les polynômes perdent par presque tous les indices de régression URM (j'ai donné le lien ci-dessus) pour oublier à jamais l'insubmersibilité des polynômes.

Pas besoin, vous l'avez prouvé il y a longtemps, nous le croyons.

 
TheXpert:

En échange de quoi ? Je me fous de lui, tant qu'il ne se met pas à courir dans les fils techniques, surtout en ce qui concerne les pros, à dire des bêtises et à troller les membres, à mentionner "le club" et autres bêtises.

C'est juste que dans ce fil, son trolling s'est magnifiquement traduit par un auto-banning, ce dont je l'ai remercié.

Comment pouvez-vous passer outre quelque chose comme ça ? Envoici un autre dans le club- 11 pages pleines de conneries, se chiant les uns les autres, mais personne n'a assez de cran pour écrire un test normal - pour vérifier et argumenter leur position. Et mieux vaut unir ses forces et trouver une solution au moins pour eux-mêmes. C'est ce qu'on appelle des experts super techniques sur les pros... Je peux imaginer ce qu'ils écrivent sur leurs "plus".

Il y a un autre club ici - le club des victimes de la POO avec de nouveaux concepts - il s'avère que si l'héritage n'est pas utilisé, ce n'est plus de la POO, donc il y a cette bêtise. Et eux aussi n'ont pas le courage d'écrire un test et de vérifier quand c'est plus rapide - quand c'est du polymorphisme et quand c'est du piggyback etc. ...et tous les mêmes visages que nous connaissons dans le club des victimes du C++.

 
Vladimir Baskakov:
Et où cherchez-vous le bonheur maintenant, encore quelque chose qui vient du plafond (comme l'exploitation minière) ?

Il n'y a aucune recette du "bonheur" nulle part, il est inutile de la chercher. Je suis satisfait de ce qui a été réalisé. Je suis fier d'avoir réussi à développer l'URMhttps://www.mql5.com/ru/articles/250 et la "théorie du marché" https://www.mql5.com/ru/articles/1825, mais, ils seront compris dans 100 ans ou plus. J'ai dit plus tôt que l'indicateurhttps://www.mql5.com/ru/forum/318795/page17#comment_13020163 attend obstinément son heure et elle est arrivée :


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

Il n'existe nulle part de recette du "bonheur".

Dommage pour vos étudiants, Semko a prouvé que cette idée était intenable il y a longtemps.
 
Dmitry Fedoseev:

Si vous pouvez trouver une solution sans récursion, elle est meilleure qu'avec récursion.

C'est bon.