Array out of range in Нужна Помощь - страница 3

 

Ок

за этот период 

 
Dark Kchlyzov:

не понял ?

за неделю или месяц, ближайший минимум какого дня?
 
Я понял, за весь период
 
Low_D1_Level   = iLow (_Symbol,PERIOD_D1,1);   // Возвращает значение минимальной цены бара  D1

ближайший минимум в истории  меньше Low_1_Level , какой будет .

код запустите там видно как работает .

 
Dark Kchlyzov:

У меня нет ошибок за весь период

лог прилагаю

Файлы:
20201209.log  3729 kb
 
MakarFX:

У меня нет ошибок за весь период

лог прилагаю

ошибки вроде нет но она есть и в логе

У вас в логе 19:31:53.126 2016.12.15 00:00:00  Array EURUSD,H1:  i = 456 Bar_data_D1 [i][2] = 1.04789

как и у меня цена Min_D:104789 больше чем low_D1 1.03660 , по условию так быть не может .

если заменить цикл for то ошибка будет. и она будет правильной . 

посути   выражение2 просто маскирует ошибку 

i<ArrayRange(Bar_data_D1,0)
 for(int i = 1; ;i++)
    {
     Print(" i = ",i," Bar_data_D1 [i][2] = ",Bar_data_D1 [i][2]);
     if( Bar_data_D1 [i][2] < Low_D1_Level)
       {
        Min_D_Level = Bar_data_D1 [i][2];break;
       }
    } 


 
Dark Kchlyzov:


Есть вопрос. А почему Вы начинаете цикл с первого элемента, а не нулевого?

 
Dark Kchlyzov:

Если не затруднит пример как правильно написать ?

Опыт в торговли есть а вот MQL 4 начинаю изучать . 

Если через MqlRates, то объявляете массив так:

MqlRates Bar_data_D1[];

То есть получаете одномерный массив вместо двумерного. MqlRates -это штатная структура (в справочнике по MQL4 описаны в разделе "Основы языка" - "Типы данных" - "Структуры, классы, интерфейсы"). У нее есть все поля, которые Вам необходимы в данном случае. Обращаться к ним будете так:

Bar_data_D1[i].high; Максимум свечи
Bar_data_D1[i].low; Минимум свечи

i - это индекс массива.

Аналогичным образом можно создать свою структуру для записи параметров свечей. Она получится меньше по объему, чем Mqlrates, на два поля (spread и real_volume), которые Вам не нужны. Структура будет выглядеть так:

struct BarData
{ 
   datetime time;         // время начала периода 
   double   open;         // цена открытия 
   double   high;         // наивысшая цена за период 
   double   low;          // наименьшая цена за период 
   double   close;        // цена закрытия 
   long     tick_volume;  // тиковый объем 
};

Объявление массива таких структур выглядит так:

BarData Bar_data_D1[];

Обращение к членам структуры аналогично обращению к членам структуры MqlRates.

Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура исторических данных
Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура исторических данных
  • www.mql5.com
Структура исторических данных - Структуры данных - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Ihor Herasko:

Точно!

 
Ihor Herasko:

Если через MqlRates, то объявляете массив так:

То есть получаете одномерный массив вместо двумерного. MqlRates -это штатная структура (в справочнике по MQL4 описаны в разделе "Основы языка" - "Типы данных" - "Структуры, классы, интерфейсы"). У нее есть все поля, которые Вам необходимы в данном случае. Обращаться к ним будете так:

i - это индекс массива.

Аналогичным образом можно создать свою структуру для записи параметров свечей. Она получится меньше по объему, чем Mqlrates, на два поля (spread и real_volume), которые Вам не нужны. Структура будет выглядеть так:

Объявление массива таких структур выглядит так:

Обращение к членам структуры аналогично обращению к членам структуры MqlRates.

Ок завтра попробую !

Спасибо за помощь. Отпишусь как разберусь .