Doğrusal regresyon yazmaya yardımcı olun

 
Uzun zaman önce MQL3'te doğrusal regresyon göstergeleri yazdım , 4 için yeniden yazmaya başladım, ancak çalışmıyor. Uzmanlar hatayı yazmaya veya düzeltmeye yardımcı olur.
 //+------------------------------------------------------------------+
//|                                          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 ) ;
  }
//+------------------------------------------------------------------+
 
Ve buna benzer bir tane daha: hiperbolik regresyon (hatayı ben de bulamıyorum)
 //+------------------------------------------------------------------+
//|                                    гиперболическая регрессия.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/en/10446/page13
 
Teşekkürler, ilginç, ama göstergede nerede hata yaptım?
 
kvn :
Teşekkürler, ilginç, ama göstergede nerede hata yaptım?
Bu doğru - bunun hakkında konuştu .
 
Rosh :
kvn :

Teşekkürler, ilginç, ama göstergede nerede hata yaptım?

Bu doğru - bunun hakkında konuştu .

Yetkin ha? o zaman bana nerede olduğunu söyle. ve benden kocaman bir teşekkür.
 
kvn :
Roş :
kvn :

Teşekkürler, ilginç, ama göstergede nerede hata yaptım?

Bu doğru - bunun hakkında konuştu .

Yetkin ha? o zaman bana nerede olduğunu söyle. ve benden kocaman bir teşekkür.
İşte bu konuda bir vagon + küçük bir araba vardı. Sadece genel terimlerle yapabilirim: Herhangi bir sayıda verilen parametre ile yaklaşık eğriden standart sapmaların toplamı için bir denklem hazırlanır. Daha sonra her parametrenin kısmi türevleri bulunur ve sıfıra eşitlenir. Elde edilen lineer denklem sisteminden gerekli tüm parametreler bulunur. Algoritma, gördüğünüz gibi, bunu yapmak için basit ve hiç de yaratıcı değil.
 
Söylediğiniz şey tam olarak lineer regresyon değil. LR tekniği göstergemde açıklanmıştır.

//Gösterge şu formüle göre oluşturulmuştur:LR = at+b
// burada LR, öngörülen "ortalama" kapanış fiyatıdır,
//t - zaman noktası, Pt - son n dönem için kapanış fiyatları.
//a = (n*SUM (t*Pt) - SUM(t)*SUM(Pt))/(n*SUM(t^2) - (SUM(t))^2) - regresyon doğrusu eğimi ,
//b = 1/n*(SUM(Pt) - a*SUM(t)) - yatay kayma}

Ama çalıştırırken önce yanlış verilerle geliyor (n=1-100 olduğunda), sonra n=22 ve doğru değerleri veriyor. Bir yerde küçük bir hata ve bulamıyorum.
Hatanın döngü ifadesinde olduğundan şüpheleniyorum.
 
Wikipedia'yı sevmememe rağmen, ona lineer regresyon konusunda bir link veriyorum. Ayrıca bazı bloglarda buldum - http://cmacfm.mazoo.net/archives/000936.html
 
LR hakkında tartışmayacağım. PEKİ GÖSTERGE KODUNDAKİ HATA NEREDE???????