индикатор для определения тренда

 

Здравствуйте, я пишу индикатор. Суть его состоит в том, что рисуется прямая вида y=b1*t+bo (на определенном промежутке), t- время, y- цена закрытия. b1 и b0- коэффициенты находятся методом наименьших квадратов. Вообще мне нужна помощь, индикатор я написал, прямая рисуется и с каждым новым тиком прямая должна перерисовываться (обновляется), но происходит не совсем то. Прямая перерисуется, как необходимо, только в том случае, если индикатор перезапустить. Не могу понять, в чем ошибка. Выкладываю код. Спасибо

//+------------------------------------------------------------------+
//|                                                    27sen2007.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  Blue


extern int period =20;
double A[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
 SetIndexStyle(0,DRAW_LINE,EMPTY,2,Blue);
   SetIndexBuffer(0,A);
   SetIndexDrawBegin(0,0);

//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+

int start()
  {
 // if (bar!=Bars  ){
   int   i, j, k, g, q, limit;
   double X[2][2], Y[2], B[2], x[2][200], y[200], a;

//===========================================
for (i=0; i<=period; i++) {
x[0][i]=1;
x[1][i]=i;
y[period-i]=   Close[i];
}
//===========================================
  for (k=1; k<=period; k++) {
  for (j=0; j<=1; j++) {
  for (i=0; i<=1; i++) { 
   X[i][j]=x[j][k]*x[i][k]+X[i][j];   
   }
   Y[j]=y[k]*x[j][k]+Y[j];
   }}  
//===========================================  
k=0; 
 j=1; 
  a=X[k][j]/X[k][k];
  for (i=0; i<=3; i++){
  X[i][j]=X[i][j]-X[i][k]*a; 
  }
  Y[j]=Y[j]-Y[k]*a;

//==========================================  
for (k=2; k>=1; k--){
a=0;
for (i=1; i>=k; i--){
a=X[i][k-1]*B[i]+a;
}
B[k-1]=(Y[k-1]-a)/X[k-1][k-1];
}
//=========================================
 for(q=0; q<=period; q++){
A[q]=0;
   A[q]=B[0]+B[1]*(period-q);
}
A[period+1]=0;
SetIndexEmptyValue(0, 0) ;


//}
//=========================================

   return(0);
  }
//+------------------------------------------------------------------+
Файлы:
trend.mq4  3 kb
 
для тестирования индикатора, запуститете его в тестере стратегий
 

Массивы нулем надо инициализировать

   ArrayInitialize(X,0);
   ArrayInitialize(Y,0);   
   ArrayInitialize(B,0);   
   ArrayInitialize(x,0);
   ArrayInitialize(y,0);    
Они хоть и в функции объявлены и не статическими, но всеравно сохраняют свои значения.
 
Integer >>:

Массивы нулем надо инициализировать

Они хоть и в функции объявлены и не статическими, но всеравно сохраняют свои значения.

большое человеческое спасибо ))

Причина обращения: