線形回帰の記述を支援する

 
昔、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://www.mql5.com/ru/code を検索してください。
 
https://forum.mql4.com/ru/10446/page13
 
ありがとうございます、面白いですね、でもどこでインジケータを間違えたのでしょうか?
 
kvn:
ありがとうございます、面白いですね、でもどこでインジケータを間違えたのでしょうか?
そうなんです、メチャクチャな んです。
 
Rosh:
kvn

ありがとうございます、面白いですね、でもどこでインジケータを間違えたのでしょうか?

そうなんです、失敗 しちゃったんです。

字は読めるんだろ? だったら場所を教えてくれ ありがとうございます
 
kvn:
ロッシュ
kvn

ありがとうございます、面白いですね、でもどこでインジケータを間違えたのでしょうか?

そうなんです、メチャクチャな んです。

じゃあどこなんだ?
この話題については、ここでもいろいろな情報が飛び交っています。一般的な方法として、与えられたパラメータの数だけ近似曲線からの標準偏差の和の方程式を挙げることができます。そして、各パラメータの偏導関数を求め、ゼロに等化する。得られた連立一次方程式から、必要なパラメータをすべて求めます。アルゴリズムはご覧の通りシンプルで、やることに全く工夫がありません。
 
あなたの言うことは、正確には線形回帰では ありません。LRのテクニックは私のインジケーターに書いてあります。

//インジケータはLR = at+b の式で構築されます。
//LR - 終値の予測「平均」価格。
//t - 時点,Pt - 直近n期間の終値.
//a = (n*SUMM(t*Pt) -SUMM(t)*SUMM(Pt))/(n*SUMM(t^2) - (SUMM(t))^2) -回帰直線の角度正接(t),
//b = 1/n*(SUMM(Pt)-a*SUMM(t))、-水平シフト}。

しかし、実行すると、まず間違ったデータ(n=1-100の時、)が出て、次にn=22と正しい値が出てきます。どこかに小さなエラーがあり、それを見つけることができない。
ループ演算子にエラーがあるのでは?
 
私はwikipediaが好きではありませんが、線形回帰のテーマで リンクを提供しています。また、某ブログで見つけたのですが、http://cmacfm.mazoo.net/archives/00 0936.html。
 
LRについては論外です。ということは、インジケーターコードのどこに誤りがあるのでしょうか?
理由: