Ayuda para escribir una regresión lineal

 
Hace mucho tiempo escribí indicadores de regresión lineal en MQL3, empecé a reescribirlos en 4, no funcionan. Especialistas por favor ayúdenme a escribir o corregir un error.
//+------------------------------------------------------------------+
//|                                          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);
  }
//+------------------------------------------------------------------+
 
Y otro similar: regresión hiperbólica (tampoco encuentro el error)
//+------------------------------------------------------------------+
//|                                    гиперболическая регрессия.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
 
Gracias, interesante, pero ¿dónde me he equivocado con el indicador?
 
kvn:
Gracias, interesante, pero ¿dónde me he equivocado con el indicador?
Eso es, unlío.
 
Rosh:
kvn:

Gracias, interesante, pero ¿dónde me he equivocado con el indicador?

Así es,lo he estropeado.

Eres alfabetizado, ¿no? Entonces dime dónde. Y muchas gracias.
 
kvn:
Rosh:
kvn:

Gracias, interesante, pero ¿dónde me he equivocado con el indicador?

Eso es, unlío.

¿Literatura, eh? Entonces dime dónde, y muchas gracias.
Se ha informado mucho sobre este tema aquí. Sólo puedo darte una idea general: la ecuación de la suma de las desviaciones estándar de la curva de aproximación con tantos parámetros dados como quieras. A continuación, se hallan las derivadas parciales de cada parámetro y se igualan a cero. A partir del sistema de ecuaciones lineales resultante se encuentran todos los parámetros necesarios. El algoritmo, como puedes ver, es sencillo, y nada creativo para hacerlo.
 
Lo que dices no es exactamente una regresión lineal. La técnica LR se describe en mi indicador.

//El indicador se construye con la fórmula:LR = at+b
//donde LR - precio "medio" previsto de cierre,
//t - punto en el tiempo, Pt - precio de cierre de los últimos n períodos.
/a = (n*SUMM(t*Pt) -SUMM(t)*SUMM(Pt))/(n*SUMM(t^2) - (SUMM(t))^2) - ángulo tangente de la recta de regresión,
//b = 1/n*(SUMM(Pt) - a*SUMM(t)), - desplazamiento horizontal}

Pero durante la ejecución al principio datos erróneos (cuando n=1-100,) y luego n=22 y salen valores correctos. Hay un pequeño error en alguna parte y no lo encuentro.
Sospecho que el error está en el operador de bucle.
 
Aunque no me gusta la wikipedia, pero pongo un enlace sobre el tema de la regresión lineal. También encontré esto en cierto blog - http://cmacfm.mazoo.net/archives/000936.html
 
No voy a discutir sobre LR. ENTONCES, ¿DÓNDE ESTÁ EL ERROR EN EL INDICADOR CODE???????