Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 687

 

подскажите,почему не работает такая конструкция?

void OnStart()
  {
//---
   double buf[];
   ArrayInitialize(buf,0);
   for(int i=0; i<10; i++)
     {
      buf[i]= i;
     }
  }
сообщает об ошибке  array out of range in '**.mq5' (13,10)
если я строчку double buf[]; заменю на double buf[10]; тогда выхода за массив нет.
 
ivanivan_11:

подскажите,почему не работает такая конструкция?

void OnStart()
  {
//---
   double buf[];
   ArrayInitialize(buf,0);
   for(int i=0; i<10; i++)
     {
      buf[i]= i;
     }
  }
сообщает об ошибке  array out of range in '**.mq5' (13,10)
если я строчку double buf[]; заменю на double buf[10]; тогда выхода за массив нет.

Либо double buf[10];

Либо double buf[];, но затем обязательно ArrayResize(buf,10);

 
Artyom Trishkin:

Либо double buf[10];

Либо double buf[];, но затем обязательно ArrayResize(buf,10);

спасибо.

а можно еще пояснить?

т.е. если я инициализирую массив и потом заполняю его в цикле, то размер массива с каждой иттерацией увеличивается, и мне необходимо делать переопределение его размера? я думал,это делается автоматически,сколько бы его я в него элементов не добавлял.

а если я его заполняю его сразу определенным числом элементом,то такой процедуры делать не надо.

void OnStart()
  {
//---
   double buf[];
   ArrayInitialize(buf,0);
   int closed1=CopyClose("EURUSD",NULL,0,3,buf);
  
  }
 
ivanivan_11:

спасибо.

а можно еще пояснить?

т.е. если я инициализирую массив и потом заполняю его в цикле, то размер массива с каждой иттерацией увеличивается, и мне необходимо делать переопределение его размера? я думал,это делается автоматически,сколько бы его я в него элементов не добавлял.

а если я его заполняю его сразу определенным числом элементом,то такой процедуры делать не надо.

void OnStart()
  {
//---
   double buf[];
   ArrayInitialize(buf,0);
   int closed1=CopyClose("EURUSD",NULL,0,3,buf);
  
  }

Функции CopyXXXX() автоматически переопределяют размер переданного в них массива.

Если же вы сами заполняете массив, то, если он динамический, то озаботиться его правильным размером - задача программиста.

Вы можете при объявлении массива сделать его

  • динамическим - в этом случае задача переопределения его размера лежит на вас
  • не динамическим: buff[5] - в этом случае требуется его инициализация нужными значениями
  • не динамическим: buff[]={10,20,30,40,50}; - в этом случае он инициализирован значениями при объявлении
 
Artyom Trishkin:

Функции CopyXXXX() автоматически переопределяют размер переданного в них массива.

Если же вы сами заполняете массив, то, если он динамический, то озаботиться его правильным размером - задача программиста.

Вы можете при объявлении массива сделать его

  • динамическим - в этом случае задача переопределения его размера лежит на вас
  • не динамическим: buff[5] - в этом случае требуется его инициализация нужными значениями
  • не динамическим: buff[]={10,20,30,40,50}; - в этом случае он инициализирован значениями при объявлении
спасибо за пояснение
 
Кто знает что означают числа в графе прогон при генетической оптимизации? Числа два, например 0,637 или 7,27. И как при этом выбрать нужный прогон. Например меня интересует прогон номер 5381. Как его выбрать?
 
кто знает что за знак между скобками? GHPR=(BalanceClose/BalanceOpen)^(1/N)
 
Roma Ivanov:
кто знает что за знак между скобками? GHPR=(BalanceClose/BalanceOpen)^(1/N)
Побитовая операция исключающее ИЛИ
 

Да ну? Правда?

А я всегда думал, что сиё (^) есть возведение в степень.

 
Roma Ivanov:
кто знает что за знак между скобками? GHPR=(BalanceClose/BalanceOpen)^(1/N)
Возведение в степень.
Причина обращения: