[АРХИВ!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 4. - страница 269
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Спасибо, там по ссылке, указан вариант программного решения вопроса, а я не не знаю, что делать. С чем это связано и как мне решить этот вопрос? Почему целый месяц советник работал нормально, а теперь глючит? Если ошибка была в коде? Получается, ветка не для новичков, если обременяет ответы на вопросы. Я расстроен.
Я в своём советнике сразу же после старта написал такое:
Попробуйте, может пригодится и вам кое-что из этого.
1. Ок. Объявлена int start(). Я всегда возвращал ноль. В кодах видел и команду return(-1), и даже return(-2). Как правильно выбирать этот код?
2. Ну и возникает естественный впрос, можно ли объявлять start() советника/индикатора/скрипта не типа int(), а произвольного другого и что потом возвращать в терминал? Иными словами, что делает терминал со значением, которое ему возвращает return() ?
1. Как Вы решаете, что должна возвратить обычная функция?
2. Можно любой тип, как у обычной функции. Терминал ничего не делает с возвращемыми значениями. Он их игнорирует.
Специальные функции
1. А как Вы решаете, что должна возвратить обычная функция?
2. Можно любой тип, как у обычной функции. Терминал ничего не делает с возвращемыми значениями. Он их игнорирует.
1. Чтоб решить что именно должна возвратить обычная функция, я должен знать, зачем основному коду именно такая величина. Напрмер, если нужно принять решение об окрытии бай-ордера при наличии сигнала, я напишу функцию, которая возвратит количество уже открытых бай-ордеров. В зависимости от того сколько их там, код будет принимать решение следуя вложенной в код логике. Я не знаю, какая логика обработки кода возврата вложена в терминал. Сегодня просматривал статью про создание семафора и наткнулся на код возврата (-2). Удивился, задал тут вопрос. Только и всего. ( https://www.mql5.com/ru/articles/1412 - статья тут).
2. Терминал игнорирует возвращаемые значения. Это точно? Если это так, то тогда опять возникает законный вопрос, почему при создании советника/индикатора/скрипта разработчик вложил в шаблон именно int, ведь логичнее было вложить туда void - тогда терминалу и игнорировать ни чего бы не пришлось - мы бы тогда выиграли 1 такт процессорного времени? Может всё же есть какая-то логика, в том, ЧТО возвращать в ретурне из функций int init(), int deinit() и int start()? По моему, Рош где-то кому-то это уже объяснял - там помнится было описание когда нужно возвращать ноль, а когда (-1). Вот это-то объяснение я и искал. Жаль найти не удалось...
P.S.
return(-2) автор статьи использует в своих целях. Но факт остаётся фактом - иногда функция start() завершается кодом возврата величины, отличной от нуля. И это делает далеко не 1 человек. Вот эту то логику и хотелось бы понять.
Специальные функции
Похоже, что там в тексте
Предопределенные функции могут иметь параметры. Однако при вызове этих функций клиентским терминалом никакие параметры переданы извне не будут, а будут использованы умолчательные значения.
речь идёт о параметрах, поступающих в функцию, а не о параметрах, возвращаемых ею.
Это счётчик ордеров. Ну, бывает так, например, что нужно узнать в коде, есть ли в рынке, например, бай-ордера по определённой валютной паре и с определёным магикнумбером. Если есть, например, то открывать ещё бай-ордер, например нельзя. То есть счётчик ордеров нужен для принятия решения.
Я в своём советнике сразу же после старта написал такое:
Попробуйте, может пригодится и вам кое-что из этого.
как можно понять эти строки:
return orders volume
if(buys>0) return(buys);
else return(-sells);
} ?
Пишем скрипт:
кидаем на график и смотри журнал:
2012.07.20 12:04:11 111 NZDUSD,M15: removed
2012.07.20 12:04:11 111 NZDUSD,M15: uninit reason 0
2012.07.20 12:04:11 111 NZDUSD,M15: Попытка ретурна 136
2012.07.20 12:04:11 111 NZDUSD,M15: loaded successfully
(тут 111 - это имя скрипта). Видим строку " uninit reason 0 " - по всей видимости терминал ждал нуля!
Пробуем то же самое с (-1) :
Результат тот же самый:
2012.07.20 12:08:19 111 NZDUSD,M15: removed
2012.07.20 12:08:19 111 NZDUSD,M15: uninit reason 0
2012.07.20 12:08:19 111 NZDUSD,M15: Попытка ретурна -1
2012.07.20 12:08:19 111 NZDUSD,M15: loaded successfully
Видать терминалу не безразлично, ноль возвращается, или нет.
P.S.
А вообще в инете наткнулся на такой ответ:
return 0 - программа закончила свою работу без ошибок
return 1 - или выше номер, программа закончала свою работу с ошибкой и возвращает код ошибки для обработки далее.
В любой операционной системе любая программа всегда возвращает код ошибки.
Беда лишь в том, что наш ретурн возвращает код не в операционку, а в терминал. Это оставляет вопрос открытым.
Пишем скрипт:
кидаем на график и смотри журнал:
(тут 111 - это имя скрипта). Видим строку " uninit reason 0 " - по всей видимости терминал ждал нуля!
Пробуеем то же самое с (-1) :
Результат тот же самый:
Видать терминалу не безразлично, ноль возвращается, или нет.uninit reason это - код причины завершения эксперта
https://docs.mql4.com/ru/constants/uninit