Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 2297

 
JRandomTrader #:

Результат компиляции будет одинаковым, в обоих случаях в результате инициализированный массив будет лежать в файле .ex4

Согласен с этим. В файле .ex4 скомпилированного Советника . И поэтому , до некоторой степени я согласен что инициализировать массив объявленный во включаемом файле , до некоторой степени, не имеет смысла. Но тем не менее , я хочу научиться инициализировать при помощи mql4 массив который объявлен в во вкл. файле, а не в теле советника .

 
ANDREY #:
Но тем не менее , я хочу научиться инициализировать массив который объявлен в во вкл. файле, а не в теле советника.

Вы можете в файле с исходным текстом тела советника присвоить значение каждому элементу массива.

Или вы можете загрузить содержимое массива из файла, как вам сразу было указано https://www.mql5.com/ru/forum/160683/page2292#comment_50001406

Если вы хотите загружать данные не из бинарного (подозреваю, тут ещё одна ключевая точка взаимонепонимания) файла, позволяющего сохранить/загрузить массив целиком, используя встроенные функции, а из текстового файла, подобного по формату тому, что вы писали в файле .mqh, вам придётся написать свою процедуру, которая будет читать текст из файла, разбирать его на элементы и записывать значения в массив.

 
JRandomTrader #:
Вы можете в файле с исходным текстом тела советника присвоить значение каждому элементу массива.

Правильно я Вас понял, что этот вариант предполагает инициализацию массива не во включаемом файле, а в теле Советника.
А второй  вариант инициализируют массив именно во включаемом файле, а не в теле Советника?

 
ANDREY #:

Спасибо. Но мне кажется , что это не заблуждение и тем более не ключевое. А просто моя не достаточно точная формулировка . Ведь если я не ошибаюсь, результат компиляции будет одинаковым  как в случае если инициализированный массив будет лежать в теле Советника , так и в случае если он будет лежать во включаемом файле. И поэтому , до некоторой степени я согласен что инициализировать массив во включаемом файле , до некоторой степени, не имеет смысла. Но тем не менее , я хочу научиться инициализировать массив который объявлен в во вкл. файле, а не в теле советника.

Да не будет инициализированного массива. При компиляции все необходимое из mqh будет прописано в код ex4 и mqh уже не нужен, а инициализация будет происходить при запуске советника.
 
ANDREY #:

Правильно я Вас понял, что этот вариант предполагает инициализацию массива не во включаемом файле, а в теле Советника.
А остальные варианты инициализируют массив именно во включаемом файле, а не в теле Советника?

Перестатьте разделять "включаемый файл" и "тело советника". После компиляции это одно и то же.

 
Tretyakov Rostyslav #:
а инициализация будет происходить при запуске советника.

Спасибо. То есть , инициализация массива будет происходить после компиляции Советника?

 
JRandomTrader #:

Перестатьте разделять "включаемый файл" и "тело советника". После компиляции это одно и то же.

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


Вот включаемый файл в котором только объявлен массив. Этот включаемый файл компилируется без ошибок.


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

 
ANDREY #:

Спасибо. То есть , инициализация массива будет происходить после компиляции Советника?

Упрощённо:

Если вы прописываете инициализацию массива при его объявлении, инициализация происходит во время компиляции https://www.mql5.com/ru/docs/basis/variables/initialization , и неважно в каком файле это объявление.

Если после объявления - во время запуска. И опять же, не важно, в каком файле, данные всё равно берутся те, которые были заложены при компиляции. Если хотите заполнить массив данными, отличеыми от тех, что были в исходных файлах на момент компиляции, вам придётся самостоятельно предпринять какие-то действия по получению этих данных из внешних источников, вроде тех, о которых я говорил выше.

 

После момента компиляции .ex4 файл и .mqh файл никак между собой не связаны, никакие действия советника, кроме явного открытия и перезаписи файла .mqh вашим собственным кодом (что не так-то просто, но, в принципе, возможно), не влияют на содержимое файла .mqh, точно также, как и любые изменения файла .mqh после компиляции никак не влияют на действия и данные советника.

 
JRandomTrader #:

Упрощённо:

Если вы прописываете инициализацию массива при его объявлении, инициализация происходит во время компиляции https://www.mql5.com/ru/docs/basis/variables/initialization , и неважно в каком файле это объявление.

Если после объявления - во время запуска. И опять же, не важно, в каком файле, данные всё равно берутся те, которые были заложены при компиляции. Если хотите заполнить массив данными, отличеыми от тех, что были в исходных файлах на момент компиляции, вам придётся самостоятельно предпринять какие-то действия по получению этих данных из внешних источников, вроде тех, о которых я говорил выше.

 


Я хочу объявить массив во включаемом файле как на скрине выше. А потом заполнить его значениями из Советника mql4.  А раньше я  заполнял его значениями путем их ручного копирования из ЕКСЕЛЯ.
В результате заполнения массива из Советника , я хочу что он стал таким как на скрине ниже. Это все что я хочу... но пока не могу.

 

Не обращайте внимания на то что объявлена 31 строка , а в скобках строк меньше. Это просто пример .... Сожалею что сразу не проиллюстрировал то что я хочу...

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