Новая версия MetaTrader 4 Client Terminal build 416 - страница 4

 
Renat:

Если терминал не отвечает, значит дело в зависшем (не желающем выгружаться или просто тормозном) скрипте/эксперте или индикаторе.

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

Обычно пользователи знают, который из скриптов тормозит.



А теперь повторю свой вопрос в другом виде: Почему некоторые прежние индикаторы начали тормозить всю программу?
 
Vahrameev_A_A:

А теперь повторю свой вопрос в другом виде: Почему некоторые прежние индикаторы начали тормозить всю программу?

Прошу прощения, что вмешиваюсь. Я не разработчик МТ4. Но вопрос поставлен так, что конкретного ответа вы на него не дождетесь. Что за индикатор вы используете? Каков его код? Видя реальную проблему, можно о чем-то говорить. Вполне возможно, в новом билде что-то не учли, но эта неучтенность не может быть выявлена, пока не будет приведена конкретная ситуация.
 
Vahrameev_A_A:

А теперь повторю свой вопрос в другом виде: Почему некоторые прежние индикаторы начали тормозить всю программу?

Проверьте код своих индикаторов - их ведь не мы писали.

Может на что-то закладывались.

 

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

 

Уважаемые разработчики, почему вы не упомянули о том, что в компилятор внесены изменения по приведению типов констант?

Раньше например константа 4294967188 (unsigned int) автоматически приводилась к типу int, т.е. соответствовала значению -108. А теперь она всегда приравнивается к максимально возможному значению int, т.е. 2147483647. По сути её значение просто обрезается, и соответственно результат полностью искажается. Это как понимать?

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

Если в С++ например ввести: ShowMessage((int) 4294967188), то он выдаст -108, но никак не 2147483647. Так может не стоит огород городить?

 

Непонятная ситуация работы тестера.

 
Meat:

Уважаемые разработчики, почему вы не упомянули о том, что в компилятор внесены изменения по приведению типов констант?

Раньше например константа 4294967188 (unsigned int) автоматически приводилась к типу int, т.е. соответствовала значению -108. А теперь она всегда приравнивается к максимально возможному значению int, т.е. 2147483647. По сути её значение просто обрезается, и соответственно результат полностью искажается. Это как понимать?

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

Если в С++ например ввести: ShowMessage((int) 4294967188), то он выдаст -108, но никак не 2147483647. Так может не стоит огород городить?


В документации MQL4 явно указано

Внутреннее представление - длинное целое число размером 4 байта. Целые константы могут принимать значения от -2147483648 до 2147483647. Если константа превышает указанный диапазон, то результат не определен.

Мы не вносили никаких изменений в компилятор. Новый билд компилятора (как и клиентского терминала, и редактора) был получен более новым компилятором C++ от фирмы Microsoft. Начиная с Visual C++ 2005 в случае переполнения при преобразовании константной строки в целое число соответствующая функция (в компиляторе MQL4 для этих целей используется функция atoi) возвращает INT_MAX (или INT_MIN)

In Visual C++ 2005, in the case of overflow with large negative integral values, LONG_MIN is returned. atoi and _wtoi return INT_MAX and INT_MIN on these conditions. In all out-of-range cases, errno is set to ERANGE.

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

Ваш случай чётко подпадает под предупрежедние о неопределённости результата.

 

Повторюсь по поводу некорректного открытия файлов:

В архиве скрины с разьяснениями

Файлы:
416.zip  105 kb
 

Заметил сегодня такое явление, хочу открыть график пары, а открывает ту, которая выше, причем по всем парам так

 
stringo:

В документации MQL4 явно указано

Мы не вносили никаких изменений в компилятор. Новый билд компилятора (как и клиентского терминала, и редактора) был получен более новым компилятором C++ от фирмы Microsoft. Начиная с Visual C++ 2005 в случае переполнения при преобразовании константной строки в целое число соответствующая функция (в компиляторе MQL4 для этих целей используется функция atoi) возвращает INT_MAX (или INT_MIN)

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

Ваш случай чётко подпадает под предупрежедние о неопределённости результата.

Вероятно Вы нашли способ как помочь ДЦ вывести из работы прибыльные советники? На 409 билде мой советник работает без проблем, а на 416 происходит закрытие терминала по прошествии

5-7 секунд. Я не программист, а обычный пользователь МТ4, и мне должно быть абсолютно одинакова работа старого и обновленного билда. А таким образом приходится сворачивать работу

советника, что в свою очередь, не оставляет положительного мнения о работе терминала.