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

 
Artyom Trishkin:

Папка для хранения файлов: Файл --> Открыть каталог данных --> MQL4\Experts\Сюда.ex4

Если же всё так, но советник не виден в навигаторе, то ... поздравляю - у вас закончилось возможное количество программ в навигаторе. Нужно что-то удалить. К сожалению, в MetaTrader4 есть ограничение на количество программ, которые видит Навигатор. Я сталкивался с этим при создании большого количества индикаторов. Чтобы не удалять много нужного, я просто копировал код в тестовый файл и компилировал и запускал всегда его - таким образом тестировал нужные мне индикаторы всегда в одном файле - стёр содержимое файла, вставил в него новый код, откомпилировал, оттестировал - готово. Потом следующий - стёр содержимое файла, вставил в него новый код .., и далее по кругу...

спасибо.Посмотрю... сюда отпишусь... В принципе прог не много...
 
Artyom Trishkin:

Папка для хранения файлов: Файл --> Открыть каталог данных --> MQL4\Experts\Сюда.ex4

Если же всё так, но советник не виден в навигаторе, то ... поздравляю - у вас закончилось возможное количество программ в навигаторе. Нужно что-то удалить. К сожалению, в MetaTrader4 есть ограничение на количество программ, которые видит Навигатор. Я сталкивался с этим при создании большого количества индикаторов. Чтобы не удалять много нужного, я просто копировал код в тестовый файл и компилировал и запускал всегда его - таким образом тестировал нужные мне индикаторы всегда в одном файле - стёр содержимое файла, вставил в него новый код, откомпилировал, оттестировал - готово. Потом следующий - стёр содержимое файла, вставил в него новый код .., и далее по кругу...

скопировал в каталог данных  - программ экспов, индикаторов, скриптов - мало. В НАВИГАТОРЕ ...июля - нет.

в папке - откуда по ярлыку запускаю терминал - он также есть. В НАВИГАТОРЕ - нет.




АРТЕМ - СПАСИБО.  ПЕРЕЗАПУСТИЛ ТЕРМИНАЛ - В НАЛИЧИИ.



 

Такой вопрос я хочу создать массив и сразу в созданный массив засунуть значения,но значения я хочу подать через переменные функции и т.д.Пример.

int q=8,w=9;

int mas[2]={q,w}.Если так сделать то будет ошибка. Нужно делать так mas[0]=q,mas[1]=w. Можно ли каким-то способом сразу при создании массива подставить переменные которые уже хранят нужные расчёты и засунуть это дело в массив, с++ поддерживает подобное а вот mql нет, можно ли так сделать можно ли сделать это с помощью макросов?

 
Seric29:

Такой вопрос я хочу создать массив и сразу в созданный массив засунуть значения,но значения я хочу подать через переменные функции и т.д.Пример.

int q=8,w=9;

int mas[2]={q,w}.Если так сделать то будет ошибка. Нужно делать так mas[0]=q,mas[1]=w. Можно ли каким-то способом сразу при создании массива подставить переменные которые уже хранят нужные расчёты и засунуть это дело в массив, с++ поддерживает подобное а вот mql нет, можно ли так сделать можно ли сделать это с помощью макросов?

нельзя, в начале недели в топике "Ошибки, баги, вопросы" кто то обсуждал это - результат нельзя

 
Igor Makanu:

нельзя, в начале недели в топике "Ошибки, баги, вопросы" кто то обсуждал это - результат нельзя

Понятно. Я видел кто-то через макрос присвоил количество столбцов при объявлении массива, хотя передавать значение столбцов или строк при инициализации массива  через переменную запрещено в mql а через макрос кто-то провернул это. Вот тема  https://www.mql5.com/ru/forum/95351.

#define ODD 5

double Max_D1[ODD];

double Low_D1[ODD];

 
Seric29:

Понятно. Я видел кто-то через макрос присвоил количество столбцов при объявлении массива, хотя передавать значение столбцов или строк при инициализации массива  через переменную запрещено в mql а через макрос кто-то провернул это. Вот тема  https://www.mql5.com/ru/forum/95351.

#define ODD 5

double Max_D1[ODD];

double Low_D1[ODD];

и смысл в этом действии? вопрос Вы как задавали? : можно ли инициализировать массив переменными, а не константами? - ответ нет

Ваш макрос сделает за Вас ручную работу по присвоению каждому элементу массива значения переменной, но суть от этого не изменится

 
Igor Makanu:

и смысл в этом действии? вопрос Вы как задавали? : можно ли инициализировать массив переменными, а не константами? - ответ нет

Ваш макрос сделает за Вас ручную работу по присвоению каждому элементу массива значения переменной, но суть от этого не изменится

Ну я думал можно что-то намутить накрутить.

 
Igor Makanu:

и смысл в этом действии? вопрос Вы как задавали? : можно ли инициализировать массив переменными, а не константами? - ответ нет

Ваш макрос сделает за Вас ручную работу по присвоению каждому элементу массива значения переменной, но суть от этого не изменится

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

 
Seric29:

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

нет нельзя

Вы путаете понятия инициализация и присваивание значения, суть у них одна, но моменты ( когда ) использования разные, инициализация это в той строке где описали массив - там и инициализировали константами, а присваивание, это после описания массива Вы в произвольном месте присваиваете произвольные значения массиву ( элементам массива)

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

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

Я иногда, чтобы не "плодить" переменные могу использовать массив, если массив больше 3-4 элементов, высока опасность в ходе написания программы перепутать номер элемента массива, я использую для этого константные значения задаваемые через #define - код получается читаемым и ошибиться просто невозможно, примерно так:

#define open   0
#define take   1
#define loss   2
#define profit 3
void OnStart()
  {
  double order[4];
  order[open] =  OrderOpenPrice();
  order[take] =  OrderTakeProfit();
  order[loss] =  OrderStopLoss();
  order[profit]= OrderProfit();
  }

возможно я не понимаю однозначность Вашего вопроса:
Seric29:

Такой вопрос я хочу создать массив и сразу в созданный массив засунуть значения,но значения я хочу подать через переменные функции и т.д.Пример.

int q=8,w=9;

int mas[2]={q,w}.Если так сделать то будет ошибка. Нужно делать так mas[0]=q,mas[1]=w. Можно ли каким-то способом сразу при создании массива подставить переменные которые уже хранят нужные расчёты и засунуть это дело в массив, с++ поддерживает подобное а вот mql нет, можно ли так сделать можно ли сделать это с помощью макросов?

при описании массива? - нужно инициализировать переменными? - ответил 2 раза выше

или присвоить массиву несколько значений переменных? - ответ тоже нельзя, но по причине недопустимого синтаксиса:

нельзя в фигурных скобках применять переменные, т.е. {1,2,3} - это компилятор пропустит, а {a,b,c} - так нельзя, т.к. компилятор обнаружив имя переменной будет ожидать или арифметическую(логическую) операцию или оператор = (lvalue, rvalue) ... т.е. Вам бы синтаксис языка изучить, а дело может быть и не в возможностях языка

 
Igor Makanu:

нет нельзя

Вы путаете понятия инициализация и присваивание значения, суть у них одна, но моменты ( когда ) использования разные, инициализация это в той строке где описали массив - там и инициализировали константами, а присваивание, это после описания массива Вы в произвольном месте присваиваете произвольные значения массиву ( элементам массива)

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

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

Я иногда, чтобы не "плодить" переменные могу использовать массив, если массив больше 3-4 элементов, высока опасность в ходе написания программы перепутать номер элемента массива, я использую для этого константные значения задаваемые через #define - код получается читаемым и ошибиться просто невозможно, примерно так:

Ну как бы да тут получается гибридное использование элементов объявленных в программе. Например я объявляю входные параметры, и из этих параметров мне нужно взять глобальные переменные и их просмотреть, но возникает проблема входные параметры не могут быть массивом, 2ой пример пишу функцию и начинается обработка через циклы здесь тоже лучше использовать массив я начинаю аргументы перебрасывать в массив и опять инциализация массива переменными невозможна и приходится как вы выше написали по одному значению в каждую ячейку писать, 3ий пример было бы класно иметь возможность в качестве аргументов фукции использовать массив(тут он будет структурный потому что аргументы же разные) и опять проблема использовать массивы в качестве аргументов функции тоже нельзя. А что касается использования массивов вместо переменных то да это делает программы компактными и я тоже делаю так. В с++ вписывать переменные в момент инициализации можно в 12ой версии может ниже нельзя, а тут удешевили это всё дело что и привело к таким последствиям. В общем понятно спасибо за ответы.