帮助写一个线性回归

 
很久以前,我 在MQL3中写了 线性回归指标,开始在4中重写,它们没有工作。专家们请帮助我写作或纠正一个错误。
//+------------------------------------------------------------------+
//|                                          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);
  }
//+------------------------------------------------------------------+
 
还有一个类似的:双曲回归(也找不到错误)。
//+------------------------------------------------------------------+
//|                                    гиперболическая регрессия.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
 
谢谢,很有意思,但我在哪里弄乱了指标?
 
kvn:
谢谢,很有意思,但我在哪里弄乱了指标?
这就对了--搞砸
 
Rosh:
kvn

谢谢,很有意思,但我在哪里弄乱了指标?

这是正确的 - 搞砸了。

你是识字的,对吗? 那就告诉我在哪里。 而且非常感谢你。
 
kvn:
罗什
kvn

谢谢,很有意思,但我在哪里弄乱了指标?

这就对了--搞砸

那就告诉我在哪里,非常感谢你。
这里已经有很多关于这个主题的信息。我只能给你一个大致的概念:从近似曲线的标准偏差之和的方程,有多少给定的参数就有多少。然后找到每个参数的偏导数,并将其等效为零。从所产生的线性方程组中可以找到所有必要的参数。正如你所看到的,这个算法很简单,而且做起来一点都不费劲。
 
你所说的并不完全是线性回归。我的指标中描述了LR技术。

//使用公式建立指标:LR = at+b
//where LR - 预测的收盘 "平均 "价格。
//t--时间点,Pt--过去N期的收盘价。
/a = (n*SUMM(t*Pt) -SUMM(t)*SUMM(Pt))/(n*SUMM(t^2) - (SUMM(t))^2) - 回归线的角正切。
//b = 1/n*(SUMM(Pt) - a*SUMM(t)), - 横移}。

但当我执行它时,首先得到的是错误的数据(当n=1-100时,),然后n=22,正确的数值就出来了。某处有一个小错误,我找不到了。
我怀疑错误出在循环运算符上。
 
虽然我不喜欢维基百科,但我还是提供一个关于线性回归主题 的链接。我还在某个博客上发现了这个--http://cmacfm.mazoo.net/archives/000936.html
 
我不会争论LR的问题。那么,指标代码??????? 中的错误在哪里呢?