Aide à la rédaction d'une régression linéaire

 
Il y a longtemps, j'ai écrit des indicateurs de régression linéaire dans MQL3, j'ai commencé à les réécrire dans 4, ils ne fonctionnent pas. Spécialistes s'il vous plaît aidez-moi à écrire ou à corriger une erreur.
//+------------------------------------------------------------------+
//|                                          KVNLinearRegression.mq4 |
//|                      Copyright © 2008, MetaQuotes Software Corp. |
//|                                        https://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, MetaQuotes Software Corp."
#property link      "https://www.metaquotes.net"
 
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 MediumBlue
//---- input parameters
extern int       nn=21;
//---- buffers
double LR1[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   //SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexBuffer(0,LR1);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| пользовательский индикатор                            |
//+------------------------------------------------------------------+
int start()
  {
  int  n,n1,n2;
      double ssm1,ssm2,ssm3,ssm4,a,b,LR;
                  ssm1=0;
                ssm2=0;    
                ssm3=0;
                 ssm4=0;
 // for(n=0;n<=Bars;n++)
 for(n=0;n<=100;n++)
{
    for(n1=1;n1<=nn;n1++)    
    {
n2=n+n1-1;
ssm1=ssm1+n1*Close[n2];
ssm2=ssm2+n1;
ssm3=ssm3+Close[n2];
ssm4=ssm4+n1*n1;
    }
//Индикатор строится по формуле:LR = at+b
//где LR - прогнозируемая "средняя" цена закрытия,
//t - момент времени,Pt  - цены закрытия за n последних периодов.
//a = (n*СУММА (t*Pt) - СУММА(t)*CУММА(Pt))/(n*СУММА(t^2) - (СУММА(t))^2) - тангенс угла наклона линии регрессии,
//b = 1/n*(СУММА(Pt) - a*СУММА(t)), - смещение по горизонтали}
 
a=(nn*ssm1-ssm2*ssm3)/(nn*ssm4-ssm2*ssm2);
b=(1/nn)*(ssm3-a*ssm2);
LR=a*nn+b;
                ssm1=0;
                ssm2=0;    
                ssm3=0;
                 ssm4=0;
  LR1[n]=LR;                 
 }
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
 
Et une autre similaire : la régression hyperbolique (je ne trouve pas non plus l'erreur).
//+------------------------------------------------------------------+
//|                                    гиперболическая регрессия.mq4 |
//|                      Copyright © 2008, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
 
//#property indicator_chart_window
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Red
//---- input parameters
extern int       nn=21;
//---- buffers
double ExtMapBuffer1[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,ExtMapBuffer1);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
//----
   double barr, as, bs,cs,ds,e, f,k,LR,ExtMapBuffer1[];
   int n,n1;
// Индикатор Гиперболической Регресии
for (barr=0;barr<=100;barr++){
    for (n=1;n<=nn;n++){
        n1=barr+n-1;
as=as+1/n;
bs=bs+1/(n*n);
cs=cs+Close[n1];
ds=ds+Close[n1]/n;
}
 
e=nn*bs-as*as;
f=cs*bs-ds*as;
k=nn*ds-as*cs;
f=f/e;
k=k/e;                                                                                                                                                                                                                                     
LR = f+k/nn;
    as=0;                                                 
    bs=0;
    cs=0;
    ds=0;
    ExtMapBuffer1[n]=LR;
}
//----
   return(0);
  }
//+------------------------------------------------------------------+
 
 
https://forum.mql4.com/ru/10446/page13
 
Merci, intéressant, mais où est-ce que je me suis trompé dans l'indicateur ?
 
kvn:
Merci, intéressant, mais où est-ce que je me suis trompé dans l'indicateur ?
C'est vrai,c'est raté.
 
Rosh:
kvn:

Merci, intéressant, mais où est-ce que je me suis trompé dans l'indicateur ?

C'est vrai -j'ai fait une erreur.

Vous savez lire, n'est-ce pas ? Alors dites-moi où. Et merci beaucoup.
 
kvn:
Rosh:
kvn:

Merci, intéressant, mais où est-ce que je me suis trompé dans l'indicateur ?

C'est vrai,c'est raté.

Littéraire, hein ? Alors dites-moi où, et merci beaucoup.
On a beaucoup parlé de ce sujet ici. Je ne peux que vous donner une idée générale : l'équation de la somme des écarts types de la courbe d'approximation avec autant de paramètres donnés que vous le souhaitez. Ensuite, les dérivées partielles de chaque paramètre sont trouvées et mises à zéro. Le système d'équations linéaires résultant permet de trouver tous les paramètres nécessaires. L'algorithme, comme vous pouvez le voir, est simple, et ne demande aucune créativité.
 
Ce que vous dites n'est pas exactement une régression linéaire. La technique LR est décrite dans mon indicateur.

//L'indicateur est construit à l'aide de la formule : LR = at+b
//où LR - prix "moyen" prévu pour la clôture,
//t - point dans le temps, Pt - prix de clôture des n dernières périodes.
//a = (n*SUMM(t*Pt) -SUMM(t)*SUMM(Pt))/(n*SUMM(t^2) - (SUMM(t))^2) - angle tangent de la ligne de régression,
//b = 1/n*(SOMME(Pt) - a*SUMM(t)), - décalage horizontal}

Mais lorsque je l'exécute, j'obtiens d'abord des données erronées (lorsque n=1-100,) et ensuite n=22 et les valeurs correctes sortent. Il y a une petite erreur quelque part et je n'arrive pas à la trouver.
Je soupçonne que l'erreur se trouve dans l'opérateur de boucle.
 
Bien que je n'aime pas wikipedia, je vous propose un lien vers celui-ci sur le sujet de la régression linéaire. J'ai également trouvé ceci sur un certain blog - http://cmacfm.mazoo.net/archives/000936.html
 
Je ne discuterai pas de LR. ALORS OÙ EST L'ERREUR DANS LE CODE INDICATEUR ???????
Raison: