как проверить массив

 
   double sum0=sum+(High[0]-Low[0]);

вот такая строчка привела к ошибке и соответственно зависанию советника. 

2015.03.18 21:45:05.839 array out of range in 'Diamant Scalper.mq4' (826,25) 

Очевидно, что тик пришел, а данные куда то делись.  Может процессора не хватило, может с памятью что... 

Как проверить корректный ли массив High[x] и Low [x] ? 


 
dimeon:
   double sum0=sum+(High[0]-Low[0]);

вот такая строчка привела к ошибке и соответственно зависанию советника. 

2015.03.18 21:45:05.839 array out of range in 'Diamant Scalper.mq4' (826,25) 

Очевидно, что тик пришел, а данные куда то делись.  Может процессора не хватило, может с памятью что... 

Как проверить корректный ли массив High[x] и Low [x] ? 


Нужно в коде гарантировать при любых обстоятельствах запись в массив перед тем, как Вы что-то попытаетесь получить из массива.
 
может вы данный код в init использовали?
или со static спецификатором?
 
ALXIMIKS:
может вы данный код в init использовали?
или со static спецификатором?
нет. В OnTick(). Как проверить массив на кооректность ? 
 
barabashkakvn:
Нужно в коде гарантировать при любых обстоятельствах запись в массив перед тем, как Вы что-то попытаетесь получить из массива.

и как это сделать? Можете привести пример такой проверки ? 

 

используйте лучше iHigh, iLow 

либо перед вызовом из стандартных массивов инициализируйте их заполнение RefreshRates 

 
dimeon:

и как это сделать? Можете привести пример такой проверки ? 

При обращении к любому члену массива по индексу (допустим i) нужно убедиться что i>=0 и i<ArraySize(High). Иначе будет аварийное завершение Вашего советника.

О.. сори. Это МТ4 - сразу не заметил... 

 
dimeon:
   double sum0=sum+(High[0]-Low[0]);

вот такая строчка привела к ошибке и соответственно зависанию советника. 

2015.03.18 21:45:05.839 array out of range in 'Diamant Scalper.mq4' (826,25) 

Очевидно, что тик пришел, а данные куда то делись.  Может процессора не хватило, может с памятью что... 

Как проверить корректный ли массив High[x] и Low [x] ? 


Было как-то такое, при обращении к Time[0] вылетала программа.. при переключении тф вроде.

if(ArraySize(Time)<1) return;//как-то так, достаточно один любой массив-таймсерию проверить.

 
dimeon:

и как это сделать? Можете привести пример такой проверки ? 

Нет. Не проверки. А именно обеспечить в коде железную логику - в массив нужно записать, чтобы потом из него запрашивать. А проверить можно так:

//--- вспомогательная переменная
   int size;
//--- создание массива
   double one_dim[];
   size=ArraySize(one_dim);
   Print("Размер массива: ",size);
//--- если размер равен "0" - всё, гайка, массив пустой.
 
Переделал на iHigh и iLow. Спасибо! 
 
barabashkakvn:

Нет. Не проверки. А именно обеспечить в коде железную логику - в массив нужно записать, чтобы потом из него запрашивать. А проверить можно так:

У меня в начале советника стоит проверка 

if(Bars<200) return;

Ее как раз советник проходит.

Спасибо за способ.

Но что-том не подсказывает что использование iHigh или iLow однозначно не приведет к критической  ошибке и соответственно эксперт продолжит работу. 

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