Ошибки, баги, вопросы - страница 439

 
Помогите плз,делаю визардом советник в MEditor5,компилирую,ставлю на график ,а он (советник ) вылетает,т.е. значек появляется и пропадает
 
cokfx:
Помогите плз,делаю визардом советник в MEditor5,компилирую,ставлю на график ,а он (советник ) вылетает,т.е. значек появляется и пропадает

На какой символ и ТФ сову ставим? Что в лог пишет?
 
Renat:

То есть, никаких ошибок тестера или среды исполнения MQL5 нет, а есть явная ошибка программиста.

Гм. Программист обнаружил неожиданное для него поведение программы, выявил суть этого поведения, явно воспроизвёл его, привёл простейший наглядный пример с доведением до абсурда (Sleep с отрицательными значениями), а ему - это ошибка программиста :) Хотя "ошибка программиста" - это, например, явное утверждение, что функция Sleep в тестере не работает.

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

 
Yedelkin:

Гм. Программист обнаружил неожиданное для него поведение программы, выявил суть этого поведения, явно воспроизвёл его, привёл простейший наглядный пример с доведением до абсурда (Sleep с отрицательными значениями), а ему - это ошибка программиста :) Хотя "ошибка программиста" - это, например, явное утверждение, что функция Sleep в тестере не работает.

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

А Вы видимо ожидали, что при отрицательном значении задержки, выйдете из Sleep раньше чем зайдёте?
 

Yedelkin, как Вы представляете себе контроль параметров функций компилятором? А ведь таких функций, у которых надо бы контролировать значения параметров - не один десяток.

Здесь одно из двух - либо скорость компиляции, либо тотальный параноидальный контроль.

Мы пошли по первому пути. При этом исполнительная подсистема не пропускает неверные параметры на этапе выполнения, формируя код ошибки, который можно взять при помощи функции GetLastError

Документация по MQL5: Проверка состояния / GetLastError
Документация по MQL5: Проверка состояния / GetLastError
  • www.mql5.com
Проверка состояния / GetLastError - Документация по MQL5
 
Будьте добры, посчитайте результат своего отрицательного значения, соотнесите его с 32 битами инта, потом почитайте про арифметическое переполнение и найдите свои 17 дней.

Добро пожаловать в мир реального программирования.
 
uncleVic:
А Вы, видимо, ожидали, что при отрицательном значении задержки выйдете из Sleep раньше чем зайдёте?

Предположение об ожиданиях - неверное. 

Работа с отрицательными значениями вообще не предполагалась. См. мой пост выше: "из описания функции ("...задерживает выполнение текущего эксперта или скрипта на определенный интервал") трудно предположить, что интервал задержки может исчисляться отрицательными числами". И речь идёт не о том, что я "мог бы ожидать", а о том, что, фактически, функция SLeep позволяет работать с отрицательными значениями. Когда это выяснилось - отправил сообщение. Если считаете такую работу функции Sleep() допустимой - так оно и останется.

 
Yedelkin:

а о том, что, фактически, функция SLeep позволяет работать с отрицательными значениями.

Что Вы предлагаете? Аварийно завершать программу?
 
Yedelkin:

Предположение об ожиданиях - неверное. 

Работа с отрицательными значениями вообще не предполагалась. См. мой пост выше: "из описания функции ("...задерживает выполнение текущего эксперта или скрипта на определенный интервал") трудно предположить, что интервал задержки может исчисляться отрицательными числами". И речь идёт не о том, что я "мог бы ожидать", а о том, что, фактически, функция SLeep позволяет работать с отрицательными значениями. Когда это выяснилось - отправил сообщение. Если считаете такую работу функции Sleep() допустимой - так оно и останется.

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

Можете потребовать изменения типа параметра на uint.

 
stringo:

Yedelkin, как Вы представляете себе контроль параметров функций компилятором? А ведь таких функций, у которых надо бы контролировать значения параметров - не один десяток.

Здесь одно из двух - либо скорость компиляции, либо тотальный параноидальный контроль.

Мы пошли по первому пути. При этом исполнительная подсистема не пропускает неверные параметры на этапе выполнения, формируя код ошибки, который можно взять при помощи функции GetLastError

Да джентльмены, я всегда на вашей стороне! :) И знаю в программировании только малую часть того, что знаете вы (ориентируюсь только по Справочнику MQL5). Но если вижу некие моменты, не понятные для меня лично - пишу об этом. Стараюсь привести наглядный пример "непонятного момента", если получится. Попутно объясняю, почему данный момент непонятен именно для меня. Соответственно, если вы считаете, что "тревога ложная", то получается, что либо я неправильно понял справочные материалы, либо справочные материалы не отражают всю информацию, необходимую для понимания момента. В данном случае мне было бы достаточно наличия в разделе "Функция Sleep" указания (предупреждения), что (1) "компилятор не контролирует значение параметра функции, в связи с чем функция может работать с отрицательными значениями" и (2) "Функция Sleep() полностью поддерживается тестером".

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

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