Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Зачем продавать продукты в MetaTrader AppStore? Узнай из статьи!
Dmitiry Ananiev
6593
Dmitiry Ananiev 2015.03.18 20:53 
   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] ? 


Vladimir Karputov
Модератор
46220
Vladimir Karputov 2015.03.18 21:04  
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] ? 


Нужно в коде гарантировать при любых обстоятельствах запись в массив перед тем, как Вы что-то попытаетесь получить из массива.
Sergey Dzyublik
4817
Sergey Dzyublik 2015.03.18 21:16  
может вы данный код в init использовали?
или со static спецификатором?
Dmitiry Ananiev
6593
Dmitiry Ananiev 2015.03.18 21:26  
ALXIMIKS:
может вы данный код в init использовали?
или со static спецификатором?
нет. В OnTick(). Как проверить массив на кооректность ? 
Dmitiry Ananiev
6593
Dmitiry Ananiev 2015.03.18 21:28  
barabashkakvn:
Нужно в коде гарантировать при любых обстоятельствах запись в массив перед тем, как Вы что-то попытаетесь получить из массива.

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

Alexandr Gavrilin
31704
Alexandr Gavrilin 2015.03.18 21:33  

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

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

Andrey Miguzov
2108
Andrey Miguzov 2015.03.18 21:35  
dimeon:

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

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

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

Aleksey Lebedev
6058
Aleksey Lebedev 2015.03.18 21:41  
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;//как-то так, достаточно один любой массив-таймсерию проверить.

Vladimir Karputov
Модератор
46220
Vladimir Karputov 2015.03.18 21:41  
dimeon:

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

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

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

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

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

if(Bars<200) return;

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

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

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

12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий