Aiuta a scrivere una regressione lineare

 
Molto tempo fa ho scritto indicatori di regressione lineare in MQL3, ho iniziato a riscriverli in 4, non funzionano. Specialisti per favore aiutatemi a scrivere o a correggere un errore.
//+------------------------------------------------------------------+
//|                                          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);
  }
//+------------------------------------------------------------------+
 
E uno simile: regressione iperbolica (non si trova nemmeno l'errore)
//+------------------------------------------------------------------+
//|                                    гиперболическая регрессия.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
 
Grazie, interessante, ma dove ho sbagliato l'indicatore?
 
kvn:
Grazie, interessante, ma dove ho sbagliato l'indicatore?
Proprio così -incasinato.
 
Rosh:
kvn:

Grazie, interessante, ma dove ho sbagliato l'indicatore?

È vero -ho fatto un casino.

Lei è alfabetizzato, vero? Allora mi dica dove, e grazie mille.
 
kvn:
Rosh:
kvn:

Grazie, interessante, ma dove ho sbagliato l'indicatore?

Proprio così -incasinato.

Allora dimmi dove, e grazie mille.
C'è stato molto sull'argomento qui. Posso solo darvi un'idea generale: l'equazione della somma delle deviazioni standard della curva approssimativa con tanti parametri dati quanti ne volete. Poi le derivate parziali di ogni parametro sono trovate ed equiparate a zero. Dal sistema risultante di equazioni lineari si trovano tutti i parametri necessari. L'algoritmo, come potete vedere, è semplice, e non è affatto creativo per farlo.
 
Quello che dici non è esattamente una regressione lineare. La tecnica LR è descritta nel mio indicatore.

//L'indicatore è costruito con la formula:LR = at+b
//Dove LR - prezzo "medio" previsto di chiusura,
//t - punto nel tempo,Pt - prezzo di chiusura degli ultimi n periodi.
//a = (n*SUMM(t*Pt) -SUMM(t)*SUMM(Pt))/(n*SUMM(t^2) - (SUMM(t))^2) - angolo tangente della linea di regressione,
//b = 1/n*(SOMMA(Pt) - a*SOMMA(t)), - spostamento orizzontale}

Ma quando lo eseguo, prima ottengo dati sbagliati (quando n=1-100,) e poi n=22 e vengono fuori valori corretti. C'è un piccolo errore da qualche parte e non riesco a trovarlo.
Sospetto che l'errore sia nell'operatore del ciclo.
 
Anche se non mi piace wikipedia, ma sto fornendo un link ad essa sul tema della regressione lineare. Ho anche trovato questo su un certo blog - http://cmacfm.mazoo.net/archives/000936.html
 
Non voglio discutere di LR. QUINDI DOV'È L'ERRORE NEL CODICE DELL'INDICATORE???????