Ajudar a escrever uma regressão linear

 
Há muito tempo escrevi indicadores de regressão linear em MQL3, comecei a reescrevê-los em 4, eles não funcionam. Especialistas, por favor, me ajudem a escrever ou corrigir um erro.
//+------------------------------------------------------------------+
//|                                          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 um semelhante: regressão hiperbólica (também não consegue encontrar o erro)
//+------------------------------------------------------------------+
//|                                    гиперболическая регрессия.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
 
Obrigado, interessante, mas onde eu estraguei o indicador?
 
kvn:
Obrigado, interessante, mas onde eu estraguei o indicador?
É isso mesmo -bagunçado.
 
Rosh:
kvn:

Obrigado, interessante, mas onde eu estraguei o indicador?

É isso mesmo -eu fiz asneira.

Você é alfabetizado, não é? Então me diga onde. E muito obrigado.
 
kvn:
Rosh:
kvn:

Obrigado, interessante, mas onde eu estraguei o indicador?

É isso mesmo -bagunçado.

Alfabetizado, eh? Então me diga onde, e muito obrigado.
Tem havido muitas informações sobre este tópico aqui. Só posso lhe dar uma idéia geral: a equação da soma dos desvios padrão da curva aproximada com tantos parâmetros dados quantos você desejar. Em seguida, as derivadas parciais de cada parâmetro são encontradas e equiparadas a zero. A partir do sistema resultante de equações lineares, todos os parâmetros necessários são encontrados. O algoritmo, como você vê, é simples, e não é nada criativo para fazê-lo.
 
O que você diz não é exatamente uma regressão linear. A técnica LR está descrita em meu indicador.

//Indicador é construído usando a fórmula:LR = at+b
// onde LR - preço "médio" previsto de fechamento,
//t - ponto no tempo,Pt - preço de fechamento dos últimos n períodos.
//a = (n*SUMM(t*Pt) -SUMM(t)*SUMM(Pt))/(n*SUMM(t^2) - (SUMM(t))^2) - ângulo tangente da linha de regressão,
//b = 1/n*(SUMM(Pt) - a*SUMM(t)), - deslocamento horizontal}

Mas quando o executo, primeiro recebo dados errados (quando n=1-100) e depois n=22 e saem valores corretos. Há um pequeno erro em algum lugar e eu não consigo encontrá-lo.
Suspeito que o erro esteja no operador do laço.
 
Embora eu não goste de wikipedia, mas estou fornecendo um link para ela sobre o tema da regressão linear. Também encontrei isto em um certo blog - http://cmacfm.mazoo.net/archives/000936.html
 
Não vou discutir sobre a LR. ENTÃO ONDE ESTÁ O ERRO NO CÓDIGO INDICADOR???????