Hilfe beim Schreiben einer linearen Regression

 
Vor langer Zeit schrieb ich lineare Regression Indikatoren in MQL3, begann sie in 4 neu zu schreiben, sie funktionieren nicht. Fachleute helfen mir bitte beim Schreiben oder korrigieren einen Fehler.
//+------------------------------------------------------------------+
//|                                          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);
  }
//+------------------------------------------------------------------+
 
Und eine ähnliche: hyperbolische Regression (kann den Fehler auch nicht finden)
//+------------------------------------------------------------------+
//|                                    гиперболическая регрессия.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
 
Danke, interessant, aber wo habe ich den Indikator verwechselt?
 
kvn:
Danke, interessant, aber wo habe ich den Indikator verwechselt?
Das ist richtig -verpfuscht.
 
Rosh:
kvn:

Danke, interessant, aber wo habe ich den Indikator verwechselt?

Das stimmt -ich habe es verm asselt.

Sie sind doch gebildet, oder? Dann sagen Sie mir, wo. Und vielen Dank.
 
kvn:
Rosh:
kvn:

Danke, interessant, aber wo habe ich den Indikator verwechselt?

Das ist richtig -verpfuscht.

Dann sagen Sie mir, wo, und vielen Dank.
Es wurde hier schon viel zu diesem Thema gesagt. Ich kann Ihnen nur eine allgemeine Idee geben: die Gleichung der Summe der Standardabweichungen von der Näherungskurve mit beliebig vielen vorgegebenen Parametern. Anschließend werden die partiellen Ableitungen der einzelnen Parameter ermittelt und mit Null gleichgesetzt. Aus dem sich daraus ergebenden System linearer Gleichungen werden alle erforderlichen Parameter ermittelt. Der Algorithmus ist, wie Sie sehen können, einfach und überhaupt nicht kreativ.
 
Was Sie sagen, ist nicht gerade eine lineare Regression. Die LR-Technik ist in meinem Indikator beschrieben.

//Der Indikator wird nach folgender Formel gebildet: LR = at+b
//wobei LR - prognostizierter "durchschnittlicher" Schlusskurs,
//t - Zeitpunkt,Pt - Schlusskurs der letzten n Perioden.
//a = (n*SUMM(t*Pt) -SUMM(t)*SUMM(Pt))/(n*SUMM(t^2) - (SUMM(t))^2) - Winkeltangente der Regressionsgeraden,
//b = 1/n*(SUMM(Pt) - a*SUMM(t)), - horizontale Verschiebung}

Aber wenn ich es ausführe, erhalte ich zuerst falsche Daten (wenn n=1-100,) und dann n=22 und die richtigen Werte kommen heraus. Es gibt irgendwo einen kleinen Fehler, den ich nicht finden kann.
Ich vermute, dass der Fehler im Schleifenoperator liegt.
 
Obwohl ich wikipedia nicht mag, gebe ich einen Link zum Thema lineare Regression an. Dies habe ich auch in einem bestimmten Blog gefunden - http://cmacfm.mazoo.net/archives/000936.html
 
Ich werde mich nicht über LR streiten. WO LIEGT ALSO DER FEHLER IM INDIKATOR CODE???????