как проверить массив - страница 2

 
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] ? 


На мой взгляд не лишне сделать проверку на ноль.

if (High[x]!=0.0 && Low[x]!=0.0){sum0=sum+(High[x]-Low[x]);}

 Но, если максимум или минимум будут равняться нолю, то sum0 будет равняться только нолю.

 
forexman77:

На мой взгляд не лишне сделать проверку на ноль.

 Но, если максимум или минимум будут равняться нолю, то sum0 будет равняться только нолю.

Ошибка вылезет при вызове High[x]. С нулем сравнения уже не будет. 
 
dimeon:
Ошибка вылезет при вызове High[x]. С нулем сравнения уже не будет. 
Строка "array out of range in" выход за пределы массива.
У меня такое было, когда объявлял размер массива и при динамической точки отсчета бывало на один бар,  отсчет заходил за пределы массива.
Если у Вас нет в коде других массивов(возможно, эта строка  выходит по отношению к чему-то другому),
то, наверное, так и есть пришел тик, а массив не заполнился.
Может быть, где получается ошибка, возвращать назад "return"  и попробовать снова.

 
forexman77:
Строка "array out of range in" выход за пределы массива.
У меня такое было, когда объявлял размер массива и при динамической точки отсчета бывало на один бар,  отсчет заходил за пределы массива.
Если у Вас нет в коде других массивов(возможно, эта строка  выходит по отношению к чему-то другому),
то, наверное, так и есть пришел тик, а массив не заполнился.
Может быть, где получается ошибка, возвращать назад "return"  и попробовать снова.

Строчку я указал полностью. Ваш return не сработает, потому как ошибка вылезет до return. Вообщем решение найдено через iHigh или iLow 

 

А так?

if (NULL == High[x]) break;

 
Используйте CopyRates, CopyHigh, CopyTime. Затем проверяйте массив-получатель на количество скопированных элементов. В MQL4 проблем с функциями Copy... нет.
 
dimeon:

Строчку я указал полностью. Ваш return не сработает, потому как ошибка вылезет до return. Вообщем решение найдено через iHigh или iLow 

 

Если у вас баров 200 а баров на графике по любой инструмент по MN  только : 12,5 год x 12 = 150   то кнофликт с масивом будеть 

Кроме того по любую графику может случится что нет 200 баров в записи и тогда  снова  будеть конфликт 

 
C-4:
Используйте CopyRates, CopyHigh, CopyTime. Затем проверяйте массив-получатель на количество скопированных элементов. В MQL4 проблем с функциями Copy... нет.
Согласен. Новый подход от MQL5 скорей всего корректно отработает этот кусок. Раньше эксперты не останавливались, если была критическая ошибка и использование High[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] ? 


Вообще строчка должна работать, если вы правильно все указали. Но в High[x] отсчет лучше вести от 1 так как 0 бар еще только формируется, у iHigh Может возникну та же проблема на ТФ М1
 
Alexey:
Вообще строчка должна работать, если вы правильно все указали. Но в High[x] отсчет лучше вести от 1 так как 0 бар еще только формируется, у iHigh Может возникну та же проблема на ТФ М1
Что значит не сформировалась ? Вы видите на графике High[0] ? Вот и робот должен видеть. Другое дело, что это не окончательное значение, которое запишется в историю, Но именно в нулевом баре вся соль !