Новая версия платформы MetaTrader 5 build 2007: Экономический календарь, MQL5-программы в виде сервисов - страница 54
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Результатом побитовой операции является число.
конечно число, в данном случае 0 или 1 (ложь или истина), только я говорю о реакции компилятора, код исполняется верно
конечно число, в данном случае 0 или 1 (ложь или истина), только я говорю о реакции компилятора, код исполняется верно
TICK_FLAG_BUY равен 32
TICK_FLAG_BUY равен 32
вы вообще о чем?
Идет ведь сравнение не числа, а бита, я же написал вначале, что логика работает нормально, но в отличии от других компиляторов, компилятор mql дает предупреждение !!! что излишне.
Для проверки скомпилируйте код с этим условием любым компилятором (с++, .net), предупреждений не будет, т.к. синтаксис языков именно и подразумевает поведение сравнение битов.
Просто кастовать в стиле Си уже как то архаично выглядит в данном варианте.
вы вообще о чем?
О том, что & - побитовая операция, а не логическая. Ее результат не является булевым. Вот компилятор и подсказывает. Это правильно. В тех случаях, когда вместо знака == по ошибке ставится = в логических операциях такое предупреждение очень помогает. Тут та же самая ситуация.
Идет ведь сравнение не числа, а бита,
Нет там сравнения, только побитовая операция. Если утрировать, то в коде написано следующее:
то есть не хватает логической операции. В данном случае наиболее правильное решение приведено тут.
вы вообще о чем?
Идет ведь сравнение не числа, а бита, я же написал вначале, что логика работает нормально, но в отличии от других компиляторов, компилятор mql дает предупреждение !!! что излишне.
Для проверки скомпилируйте код с этим условием любым компилятором (с++, .net), предупреждений не будет, т.к. синтаксис языков именно и подразумевает поведение сравнение битов.
Просто кастовать в стиле Си уже как то архаично выглядит в данном варианте.
О том, что & - побитовая операция, а не логическая. Ее результат не является булевым. Вот компилятор и подсказывает. Это правильно. В тех случаях, когда вместо знака == по ошибке ставится = в логических операциях такое предупреждение очень помогает. Тут та же самая ситуация.
Нет там сравнения, только побитовая операция. Если утрировать, то в коде написано следующее:
то есть не хватает логической операции. В данном случае наиболее правильное решение приведено тут.
& в побитовых операциях это логическое И, конечно в синтаксисе языка это побитовая операция с результатом ложь либо истина, поведение компилятора связанного с предупреждением не логично
Ps. спорить не хочу, я лишь подсказал разработчикам, что в подобных ситуациях компиляторы с++ и C# не дают предупреждений
Я упростил до нельзя то, что вы 32 сравниваете с 1 или 0 без знака сравнения
В индикаторах перестала работать функция ObjectsDeleteAll:
Пробовал как с префиксом, так и без. Результат один и тот же.
Билд 2025, Win7x64 SP1
UPD. После более глубоких проверок оказалось, что причина в функции ObjectsTotal. Она всегда возвращает 0 при любом количестве объектов на графике. Через ObjectDelete при прямом указании имени объекта удаление происходит.в МТ5 2007 если вызывать в OnInit() функцию UninitializeReason(), она всегда возвращает 0?
в МТ4 можно было отследить ТФ сменили еще чего...
в МТ5 2007 если вызывать в OnInit() функцию UninitializeReason(), она всегда возвращает 0?
Только в индикаторах. В советниках работает.
Дело в том, что в МТ5 принцип работы индикаторов изменен. При переключении ТФ текущая копия полностью удаляется. Затем к графику присоединяется абсолютно новая копия, которая знать ничего не знает о предыдущей копии.
В индикаторах перестала работать функция ObjectsDeleteAll:
Было где-то уже... Заплатку предложили: если перед ней сделать вызов ObjectsTotal(), то срабатывает. MQ сказали, что поправили.