Почему так происходит?

 

Сделал индикатор. Одна из возможностей которого показывать ситуацию с меньшего ТФ. Индикаторная линия, по идее, должна пересчитаться заново при появлении нового бара на меньшем ТФ, но этого не происходит, хотя переменная цикла limit получает корректные значения. Подскажите в чем проблема, а то в упор не вижу?

Код и картинку, демонстрирующие это прикладываю.

На картинке вверху индикатор показывающий ситуацию с ТФ = М1, внизу тоже самое, но принудительно перестроенный.

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Lime
#property indicator_level1 0  
 
extern int TF = 0;
int Depth = 8;
datetime newbar;
double buffer1[], buffer2[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void init() {
 
   if(TF == 0) TF = Period();
   IndicatorBuffers(2);
   SetIndexBuffer(0, buffer2);
   SetIndexBuffer(1, buffer1);
   //ArraySetAsSeries(buffer1, true);
   return;
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
void start() {
   int cbars, i, limit;
   
   cbars = IndicatorCounted();
   
   if(cbars > 0) {
      cbars--;
      limit = Bars - cbars;
   }  else limit = Bars - 2;
 
// если таймфрейм мешьше текущего, то при появлении новой свечи на меньшем ТФ 
// устанавливаем limit = Bars - 2; и пытаемся сначала пересчитать индикатор
   if(TF < Period()) {
      if(newbar != iTime(NULL, TF,0)) {
         limit = Bars - 2;
         newbar = iTime(NULL, TF,0);
      }
   }
   
   if(TF > Period()) {
      if(newbar != Time[0]) {
         limit = Bars - 2;
         newbar = Time[0];
      }
   }
   
   for(i = limit; i >= 0; i--) {
      buffer1[i] = iClose(NULL, TF, i) - iClose(NULL, TF,i+1);
   }
   for(i = limit; i >= 0; i--) {
      if(i > Bars - 2 - Depth) continue;
      buffer2[i] = iMAOnArray(buffer1, 0, Depth, 0, 3, i);
   }
   
   return;
}
 

Никто так и не ответил. :((

Пришлось разбираться самому :)

Немного изменил индикатор.

Выяснил следующее.

При появлении нового бара на меньшем ТФ изменяются значения только в buffer1[]. В buffer2[] и buffer3[] значения меняются только на 0-м и 1-м барах. А т.к. отрисовываются как раз buffer2 и buffer3, то и картинка меняется только на 0-м и 1-м барах.

Вопрос к разработчикам: так и должно быть?

Код индикатора и лог прикладываю.

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Lime
#property indicator_color2 Red
#property indicator_level1 0  
 
extern int TF = 1;
extern int Depth = 3;
extern string Symb = "";
datetime newbar;
double buffer1[], buffer2[], buffer3[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void init() {
 
   if(TF == 0) TF = Period();
   if(Symb == "") Symb = Symbol();
   IndicatorBuffers(3);
   SetIndexBuffer(0, buffer2);
   SetIndexBuffer(1, buffer3);
   SetIndexBuffer(2, buffer1);
   IndicatorShortName( "i-Example_"+TF);
   ArraySetAsSeries(buffer1, true);
   ArraySetAsSeries(buffer2, true);
   return;
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
void start() {
   int cbars, i, limit;
   
   cbars = IndicatorCounted();
   
   if(cbars > 0) {
      cbars--;
      limit = Bars - cbars;
   }  else limit = Bars - 2;
Print("");
Print("Bars on TF", TF, ": ", iBars(Symb, TF));
Print("Time 0 bar on TF",TF,": ", TimeToStr(iTime(Symb, TF,0),TIME_DATE|TIME_MINUTES));
Print("Bars on used TF",Period(),": ", Bars);
Print("Time 0 bar on used TF",Period(),":  ", TimeToStr(Time[0],TIME_DATE|TIME_MINUTES));
Print("Time newbar before: ",TimeToStr(newbar,TIME_DATE|TIME_MINUTES));
// если таймфрейм мешьше текущего, то при появлении новой свечи на меньшем ТФ 
// устанавливаем limit = Bars - 2; и пытаемся сначала пересчитать индикатор
   if(TF < Period()) {
      if(newbar != iTime(Symb, TF,0)) {
         limit = Bars - 2;
         newbar = iTime(Symb, TF,0);
      }
   }
   
   if(TF > Period()) {
      if(newbar != Time[0]) {
         limit = Bars - 2;
         newbar = Time[0];
      }
   }
Print("Time newbar after: ",TimeToStr(newbar,TIME_DATE|TIME_MINUTES));
Print("limit=",limit);
Print("************************");
   for(i = limit; i >= 0; i--) {
      buffer1[i] = (iMA(Symb, TF, 1, 0, 0, 0, i) - iMA(Symb, TF, 1, 0, 0, 0, i+1))*10000;
      if((i >= Bars - 8) || (i <= 7 )) {
         Print("buffer1[",i,"]= ",buffer1[i]);
       }
   }
Print("************************");
Print("limit=",limit);
   for(i = limit; i >= 0; i--) {
      if(i > (Bars - Depth -1)) continue;
      buffer2[i] = iMAOnArray(buffer1, 0, Depth, 0, 0, i);
      if((i >= Bars - Depth- 7) || (i <= 7 )) {
         Print("buffer2[",i,"]= ",buffer2[i]);
      }
   }
Print("************************");
Print("limit=",limit);
   for(i = limit; i >= 0; i--) {
      if(i > (Bars - 2*Depth)) continue;
      buffer3[i] = iMAOnArray(buffer2, 0, Depth, 0, 0, i);
      if((i >= Bars - 2*Depth - 6) || (i <= 7 )) {
         Print("buffer3[",i,"]= ",buffer3[i]);
      }
   }
Print("************************");
   return;
}
//+------------------------------------------------------------------+
Файлы:
20080213.zip  2 kb
 

Пациент: "Доктор меня все игнорируют."

Доктор: "Следующий!!!"

 
Видимо, нет вопроса, на который хотелось бы ответить.
Я старательно прочитал оба поста, понял о чем идет речь.
Но желания разбираться в себе не нашел.

Захотелось спросить: "а что сделал автор для того чтоб найти и решить проблему?".
Потому что если он ничего не сделал, то помочь ему нельзя - можно только сделать за него...
 
komposter:
Захотелось спросить: "а что сделал автор для того чтоб найти и решить проблему?".
Потому что если он ничего не сделал, то помочь ему нельзя - можно только сделать за него...

+1

Андрюшка, жму твою волосатую мужественную руку :-)

 
komposter:

Захотелось спросить: "а что сделал автор для того чтоб найти и решить проблему?".
Потому что если он ничего не сделал, то помочь ему нельзя - можно только сделать за него...

Андрей, я не понимаю в чем проблема. В первом посте написал: "Подскажите в чем проблема, а то в упор не вижу?"

Только намекните, а уж остальное сделаю сам.

Вижу, только что buffer1 меняется, а остальные буферы, которые используют его для расчета, нет. Видимо что-то делаю не так.

 
Talex:

Только намекните, а уж остальное сделаю сам.

Намекаю...
 
komposter:
Talex:

Только намекните, а уж остальное сделаю сам.

Намекаю...

Да уж. По Вашему в последнем коде мало Print-ов? И имено из лога видно, то что писал выше. Не смею больше беспокоить.
 
Talex:
Да уж. По Вашему в последнем коде мало Print-ов? И имено из лога видно, то что писал выше. Не смею больше беспокоить.
Обижаться - не лучший выход из ситуации. Да и не хотел я никого обидеть.
Просто попробуйте сами понять в чем ошибка, и, если не получится, покажите ход ваших мыслей.
Когда от кода останется 3 строки, иллюстрирующих ошибку, и будет видно что вы уже сделали для решения проблемы, помошники ломанутся гурьбой ;)
 
komposter:
Просто попробуйте сами понять в чем ошибка, и, если не получится, покажите ход ваших мыслей.
Когда от кода останется 3 строки, иллюстрирующих ошибку, и будет видно что вы уже сделали для решения проблемы, помошники ломанутся гурьбой ;)

Вот, что получилось.

1 вариант. Имеем два индикаторных буфера. Один ( buffer1) только для расчета

#property indicator_separate_window
#property indicator_buffers 1 // отображаемый буфер индикатора
#property indicator_color1 Lime
#property indicator_level1 0  
 
extern int TF = 1; // ТФ на котором проверяется появление нового бара
extern int Depth = 2; // Период усреднения 
datetime newbar;
double buffer1[], buffer2[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void init() {
 
   if(TF == 0) TF = Period();
   IndicatorBuffers(2); // два буфера для вычислений пользовательского индикатора
   SetIndexBuffer(0, buffer2); // этот буфер отображается
   SetIndexBuffer(1, buffer1); // этот буфер используется для расчета
   IndicatorShortName( "i-Example2_"+TF);
Print("TF=",TF);
Print("Depth=",Depth);
   return;
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
void start() {
   int i, limit;
// условие если newbar неравен нулевому бару с таймфрейма TF
// то работает код   
   if(newbar != iTime(NULL, TF, 0)) { 
      limit = 10; // ограничиваем, т.к для демонстрации больше не надо
Print("+++++++++++++++++++++++++++++");
// Расчитываем buffer1
      for(i = limit; i >= 0; i--) {
         buffer1[i] = (iMA(NULL, TF, 1, 0, 0, 0, i) - iMA(NULL, TF, 1, 0, 0, 0, i+1))*10000;
Print("buffer1[",i,"]= ",buffer1[i]);
      }
Print("************************");
// Расчитываем buffer2
      for(i = limit; i >= 0; i--) {
         if(i > (10 - Depth + 1)) continue;
         buffer2[i] = iMAOnArray(buffer1, 0, Depth, 0, 0, i);
Print("buffer2[",i,"]= ",buffer2[i]);
      }
      newbar = iTime(NULL, TF, 0); // присваиваем newbar новое значение
   }
   return;
}
//+------------------------------------------------------------------+

Лог:

12:33:00 i-Example2 EURUSD,M5: TF=1
12:33:00 i-Example2 EURUSD,M5: Depth=2
12:33:00 i-Example2 EURUSD,M5: initialized
12:33:00 i-Example2 EURUSD,M5: +++++++++++++++++++++++++++++
12:33:00 i-Example2 EURUSD,M5: buffer1[10]= -3
12:33:00 i-Example2 EURUSD,M5: buffer1[9]= 0
12:33:00 i-Example2 EURUSD,M5: buffer1[8]= -1
12:33:00 i-Example2 EURUSD,M5: buffer1[7]= 0
12:33:00 i-Example2 EURUSD,M5: buffer1[6]= 0
12:33:00 i-Example2 EURUSD,M5: buffer1[5]= 2
12:33:00 i-Example2 EURUSD,M5: buffer1[4]= 1
12:33:00 i-Example2 EURUSD,M5: buffer1[3]= -1
12:33:00 i-Example2 EURUSD,M5: buffer1[2]= 1
12:33:00 i-Example2 EURUSD,M5: buffer1[1]= 2
12:33:00 i-Example2 EURUSD,M5: buffer1[0]= 1
12:33:00 i-Example2 EURUSD,M5: ************************
12:33:00 i-Example2 EURUSD,M5: buffer2[9]= -1.5 при 1-ом проходе считает все верно.
12:33:00 i-Example2 EURUSD,M5: buffer2[8]= -0.5
12:33:00 i-Example2 EURUSD,M5: buffer2[7]= -0.5
12:33:00 i-Example2 EURUSD,M5: buffer2[6]= -0
12:33:00 i-Example2 EURUSD,M5: buffer2[5]= 1
12:33:00 i-Example2 EURUSD,M5: buffer2[4]= 1.5
12:33:00 i-Example2 EURUSD,M5: buffer2[3]= -0
12:33:00 i-Example2 EURUSD,M5: buffer2[2]= -0
12:33:00 i-Example2 EURUSD,M5: buffer2[1]= 1.5
12:33:00 i-Example2 EURUSD,M5: buffer2[0]= 1.5
12:33:06 i-Example2 EURUSD,M5: +++++++++++++++++++++++++++++
12:33:06 i-Example2 EURUSD,M5: buffer1[10]= 0
12:33:06 i-Example2 EURUSD,M5: buffer1[9]= -1
12:33:06 i-Example2 EURUSD,M5: buffer1[8]= 0
12:33:06 i-Example2 EURUSD,M5: buffer1[7]= 0
12:33:06 i-Example2 EURUSD,M5: buffer1[6]= 2
12:33:06 i-Example2 EURUSD,M5: buffer1[5]= 1
12:33:06 i-Example2 EURUSD,M5: buffer1[4]= -1
12:33:06 i-Example2 EURUSD,M5: buffer1[3]= 1
12:33:06 i-Example2 EURUSD,M5: buffer1[2]= 2
12:33:06 i-Example2 EURUSD,M5: buffer1[1]= 2
12:33:06 i-Example2 EURUSD,M5: buffer1[0]= 1
12:33:06 i-Example2 EURUSD,M5: ************************
12:33:06 i-Example2 EURUSD,M5: buffer2[9]= -1.5 в buffer1 данные сместились, а в buffer2 все осталось как и было.
12:33:06 i-Example2 EURUSD,M5: buffer2[8]= -0.5
12:33:06 i-Example2 EURUSD,M5: buffer2[7]= -0.5
12:33:06 i-Example2 EURUSD,M5: buffer2[6]= -0
12:33:06 i-Example2 EURUSD,M5: buffer2[5]= 1
12:33:06 i-Example2 EURUSD,M5: buffer2[4]= 1.5
12:33:06 i-Example2 EURUSD,M5: buffer2[3]= -0
12:33:06 i-Example2 EURUSD,M5: buffer2[2]= -0
12:33:06 i-Example2 EURUSD,M5: buffer2[1]= 2
12:33:06 i-Example2 EURUSD,M5: buffer2[0]= 1.5
12:34:59 i-Example2 EURUSD,M5: +++++++++++++++++++++++++++++
12:34:59 i-Example2 EURUSD,M5: buffer1[10]= -1
12:34:59 i-Example2 EURUSD,M5: buffer1[9]= 0
12:34:59 i-Example2 EURUSD,M5: buffer1[8]= 0
12:34:59 i-Example2 EURUSD,M5: buffer1[7]= 2
12:34:59 i-Example2 EURUSD,M5: buffer1[6]= 1
12:34:59 i-Example2 EURUSD,M5: buffer1[5]= -1
12:34:59 i-Example2 EURUSD,M5: buffer1[4]= 1
12:34:59 i-Example2 EURUSD,M5: buffer1[3]= 2
12:34:59 i-Example2 EURUSD,M5: buffer1[2]= 2
12:34:59 i-Example2 EURUSD,M5: buffer1[1]= 0
12:34:59 i-Example2 EURUSD,M5: buffer1[0]= -1
12:34:59 i-Example2 EURUSD,M5: ************************
12:34:59 i-Example2 EURUSD,M5: buffer2[9]= -0.5 теперь и в Buffer2 данные изменились, но все равно не соответствуют расчету
12:34:59 i-Example2 EURUSD,M5: buffer2[8]= -0.5 изменение связано с тем, что на старшем периоде появился новый бар
12:34:59 i-Example2 EURUSD,M5: buffer2[7]= -0
12:34:59 i-Example2 EURUSD,M5: buffer2[6]= 1
12:34:59 i-Example2 EURUSD,M5: buffer2[5]= 1.5
12:34:59 i-Example2 EURUSD,M5: buffer2[4]= -0
12:34:59 i-Example2 EURUSD,M5: buffer2[3]= -0
12:34:59 i-Example2 EURUSD,M5: buffer2[2]= 2
12:34:59 i-Example2 EURUSD,M5: buffer2[1]= 1
12:34:59 i-Example2 EURUSD,M5: buffer2[0]= -0.5
12:36:04 i-Example2 EURUSD,M5: +++++++++++++++++++++++++++++
12:36:04 i-Example2 EURUSD,M5: buffer1[10]= 0
12:36:04 i-Example2 EURUSD,M5: buffer1[9]= 0
12:36:04 i-Example2 EURUSD,M5: buffer1[8]= 2
12:36:04 i-Example2 EURUSD,M5: buffer1[7]= 1
12:36:04 i-Example2 EURUSD,M5: buffer1[6]= -1
12:36:04 i-Example2 EURUSD,M5: buffer1[5]= 1
12:36:04 i-Example2 EURUSD,M5: buffer1[4]= 2
12:36:04 i-Example2 EURUSD,M5: buffer1[3]= 2
12:36:04 i-Example2 EURUSD,M5: buffer1[2]= 0
12:36:04 i-Example2 EURUSD,M5: buffer1[1]= -1
12:36:04 i-Example2 EURUSD,M5: buffer1[0]= 1
12:36:04 i-Example2 EURUSD,M5: ************************
12:36:04 i-Example2 EURUSD,M5: buffer2[9]= -0.5
12:36:04 i-Example2 EURUSD,M5: buffer2[8]= -0.5
12:36:04 i-Example2 EURUSD,M5: buffer2[7]= -0
12:36:04 i-Example2 EURUSD,M5: buffer2[6]= 1
12:36:04 i-Example2 EURUSD,M5: buffer2[5]= 1.5
12:36:04 i-Example2 EURUSD,M5: buffer2[4]= -0
12:36:04 i-Example2 EURUSD,M5: buffer2[3]= -0
12:36:04 i-Example2 EURUSD,M5: buffer2[2]= 2
12:36:04 i-Example2 EURUSD,M5: buffer2[1]= -0.5
12:36:04 i-Example2 EURUSD,M5: buffer2[0]= 0
12:37:19 i-Example2 EURUSD,M5: +++++++++++++++++++++++++++++

 

2 вариант. Имеем один индикаторный буфер. И один (buffer1) пользовательский массив для расчета

#property indicator_separate_window
#property indicator_buffers 1 // отображаемый буфер индикатора
#property indicator_color1 Lime
#property indicator_level1 0  
 
extern int TF = 1; // ТФ на котором проверяется появление нового бара
extern int Depth = 2; // Период усреднения 
datetime newbar;
double buffer1[11], buffer2[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void init() {
 
   if(TF == 0) TF = Period();
   IndicatorBuffers(1); // два буфера для вычислений пользовательского индикатора
   SetIndexBuffer(0, buffer2); // этот буфер отображается
   ///SetIndexBuffer(1, buffer1); // этот буфер используется для расчета
   IndicatorShortName( "i-Example2_"+TF);
   ArraySetAsSeries(buffer1,true);
Print("TF=",TF);
Print("Depth=",Depth);
   return;
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
void start() {
   int i, limit;
// условие если newbar неравен нулевому бару с таймфрейма TF
// то работает код   
   if(newbar != iTime(NULL, TF, 0)) { 
      limit = 10; // ограничиваем, т.к для демонстрации больше не надо
Print("+++++++++++++++++++++++++++++");
// Расчитываем buffer1
      for(i = limit; i >= 0; i--) {
         buffer1[i] = (iMA(NULL, TF, 1, 0, 0, 0, i) - iMA(NULL, TF, 1, 0, 0, 0, i+1))*10000;
Print("buffer1[",i,"]= ",buffer1[i]);
      }
Print("************************");
// Расчитываем buffer2
      for(i = limit; i >= 0; i--) {
         if(i > (10 - Depth + 1)) continue;
         buffer2[i] = iMAOnArray(buffer1, 0, Depth, 0, 0, i);
Print("buffer2[",i,"]= ",buffer2[i]);
      }
      newbar = iTime(NULL, TF, 0); // присваиваем newbar новое значение
   }
   return;
}
//+------------------------------------------------------------------+

Теперь все работает как и хотелось.

Лог:

13:01:42 i-Example2 EURUSD,M5: loaded successfully
13:01:49 i-Example2 EURUSD,M5: TF=1
13:01:49 i-Example2 EURUSD,M5: Depth=2
13:01:49 i-Example2 EURUSD,M5: initialized
13:01:49 i-Example2 EURUSD,M5: +++++++++++++++++++++++++++++
13:01:49 i-Example2 EURUSD,M5: buffer1[10]= -2
13:01:49 i-Example2 EURUSD,M5: buffer1[9]= 0
13:01:49 i-Example2 EURUSD,M5: buffer1[8]= -3
13:01:49 i-Example2 EURUSD,M5: buffer1[7]= 0
13:01:49 i-Example2 EURUSD,M5: buffer1[6]= -1
13:01:49 i-Example2 EURUSD,M5: buffer1[5]= 2
13:01:49 i-Example2 EURUSD,M5: buffer1[4]= 1
13:01:49 i-Example2 EURUSD,M5: buffer1[3]= -1
13:01:49 i-Example2 EURUSD,M5: buffer1[2]= -1
13:01:49 i-Example2 EURUSD,M5: buffer1[1]= 0
13:01:49 i-Example2 EURUSD,M5: buffer1[0]= -1
13:01:49 i-Example2 EURUSD,M5: ************************
13:01:49 i-Example2 EURUSD,M5: buffer2[9]= -1
13:01:49 i-Example2 EURUSD,M5: buffer2[8]= -1.5
13:01:49 i-Example2 EURUSD,M5: buffer2[7]= -1.5
13:01:49 i-Example2 EURUSD,M5: buffer2[6]= -0.5
13:01:49 i-Example2 EURUSD,M5: buffer2[5]= 0.5
13:01:49 i-Example2 EURUSD,M5: buffer2[4]= 1.5
13:01:49 i-Example2 EURUSD,M5: buffer2[3]= 0
13:01:49 i-Example2 EURUSD,M5: buffer2[2]= -1
13:01:49 i-Example2 EURUSD,M5: buffer2[1]= -0.5
13:01:49 i-Example2 EURUSD,M5: buffer2[0]= -0.5
13:01:50 i-Example2 EURUSD,M5: +++++++++++++++++++++++++++++
13:01:50 i-Example2 EURUSD,M5: buffer1[10]= 0
13:01:50 i-Example2 EURUSD,M5: buffer1[9]= -3
13:01:50 i-Example2 EURUSD,M5: buffer1[8]= 0
13:01:50 i-Example2 EURUSD,M5: buffer1[7]= -1
13:01:50 i-Example2 EURUSD,M5: buffer1[6]= 2
13:01:50 i-Example2 EURUSD,M5: buffer1[5]= 1
13:01:50 i-Example2 EURUSD,M5: buffer1[4]= -1
13:01:50 i-Example2 EURUSD,M5: buffer1[3]= -1
13:01:50 i-Example2 EURUSD,M5: buffer1[2]= 0
13:01:50 i-Example2 EURUSD,M5: buffer1[1]= -2
13:01:50 i-Example2 EURUSD,M5: buffer1[0]= 1
13:01:50 i-Example2 EURUSD,M5: ************************
13:01:50 i-Example2 EURUSD,M5: buffer2[9]= -1.5
13:01:50 i-Example2 EURUSD,M5: buffer2[8]= -1.5
13:01:50 i-Example2 EURUSD,M5: buffer2[7]= -0.5
13:01:50 i-Example2 EURUSD,M5: buffer2[6]= 0.5
13:01:50 i-Example2 EURUSD,M5: buffer2[5]= 1.5
13:01:50 i-Example2 EURUSD,M5: buffer2[4]= 0
13:01:50 i-Example2 EURUSD,M5: buffer2[3]= -1
13:01:50 i-Example2 EURUSD,M5: buffer2[2]= -0.5
13:01:50 i-Example2 EURUSD,M5: buffer2[1]= -1
13:01:50 i-Example2 EURUSD,M5: buffer2[0]= -0.5
13:03:21 i-Example2 EURUSD,M5: +++++++++++++++++++++++++++++
13:03:21 i-Example2 EURUSD,M5: buffer1[10]= -3
13:03:21 i-Example2 EURUSD,M5: buffer1[9]= 0
13:03:21 i-Example2 EURUSD,M5: buffer1[8]= -1
13:03:21 i-Example2 EURUSD,M5: buffer1[7]= 2
13:03:21 i-Example2 EURUSD,M5: buffer1[6]= 1
13:03:21 i-Example2 EURUSD,M5: buffer1[5]= -1
13:03:21 i-Example2 EURUSD,M5: buffer1[4]= -1
13:03:21 i-Example2 EURUSD,M5: buffer1[3]= 0
13:03:21 i-Example2 EURUSD,M5: buffer1[2]= -2
13:03:21 i-Example2 EURUSD,M5: buffer1[1]= 0
13:03:21 i-Example2 EURUSD,M5: buffer1[0]= -1
13:03:21 i-Example2 EURUSD,M5: ************************
13:03:21 i-Example2 EURUSD,M5: buffer2[9]= -1.5
13:03:21 i-Example2 EURUSD,M5: buffer2[8]= -0.5
13:03:21 i-Example2 EURUSD,M5: buffer2[7]= 0.5
13:03:21 i-Example2 EURUSD,M5: buffer2[6]= 1.5
13:03:21 i-Example2 EURUSD,M5: buffer2[5]= 0
13:03:21 i-Example2 EURUSD,M5: buffer2[4]= -1
13:03:21 i-Example2 EURUSD,M5: buffer2[3]= -0.5
13:03:21 i-Example2 EURUSD,M5: buffer2[2]= -1
13:03:21 i-Example2 EURUSD,M5: buffer2[1]= -1
13:03:21 i-Example2 EURUSD,M5: buffer2[0]= -0.5
13:04:00 i-Example2 EURUSD,M5: +++++++++++++++++++++++++++++

И всетаки мне не понятно почему в 1-м варианте buffer1 расчитывается нормально, а Buffer2

(расчитывается на основании buffer1) использует для расчета старый экземпляр buffer1.

Объясните, кто-нибудь!!!