Почему выражение
if(Hour()!=16 || Hour()!=0)return(0);
и в 16 часов и в 0 часов всё время возвращает 0 ?
В таком виде на том же самом месте в коде- работает.
if(Hour()!=16)return(0);
или
if(Hour()!=0)return(0);
Может я чего то не допонимаю или не дочитал в синтаксисе??
if(Hour()!=16 || Hour()!=0)return(0);
и в 16 часов и в 0 часов всё время возвращает 0 ?
В таком виде на том же самом месте в коде- работает.
if(Hour()!=16)return(0);
или
if(Hour()!=0)return(0);
Может я чего то не допонимаю или не дочитал в синтаксисе??
Ознакомься с работой логической операцией "ИЛИ" и всё станет понятно. В 16 часов часы не равны 0, и соответственно в 0 часов часы не равны 16. Вот и будет тебе 0 в обоих случаях.
По идее он и не должен быть равен в 16 0
и в 0 16
достаточно что бы сработало хотябы одно из логических условий
потому и ставится не "и" а "или"
например в 16 часов одно из условий станеовится ложным
и оператор return(0) не должен выполняться
не так ли?
и в 0 16
достаточно что бы сработало хотябы одно из логических условий
потому и ставится не "и" а "или"
например в 16 часов одно из условий станеовится ложным
и оператор return(0) не должен выполняться
не так ли?
Вероятнее всего вместо ИЛИ (||), Вы имели в виду И (&&).
То есть, если время не равно 16 и 0 часам, то вернуть 0.
То есть, если время не равно 16 и 0 часам, то вернуть 0.
По идее он и не должен быть равен в 16 0
и в 0 16
достаточно что бы сработало хотябы одно из логических условий
потому и ставится не "и" а "или"
например в 16 часов одно из условий станеовится ложным
и оператор return(0) не должен выполняться
не так ли?
и в 0 16
достаточно что бы сработало хотябы одно из логических условий
потому и ставится не "и" а "или"
например в 16 часов одно из условий станеовится ложным
и оператор return(0) не должен выполняться
не так ли?
Не так: по стандарту проверяются все условия по очереди до окончания или первого сработавшего. "Логическое ИЛИ" = ИСТИНА, если верно одно из условий.
Пример в 16 часов - не работает первое условие, но работает второе. Для 0 часов аналогично.
Удачи и попутных трендов.
Не так: по стандарту проверяются все условия по очереди до окончания или первого сработавшего. "Логическое ИЛИ" = ИСТИНА, если верно одно из условий.
Если я правильно помню, в MQL нет "короткого замыкания" - логическое условие проверяется целиком.
Почему выражение
if(Hour()!=16 || Hour()!=0)return(0);
и в 16 часов и в 0 часов всё время возвращает 0 ?
Надо написать:if(Hour()!=16 || Hour()!=0)return(0);
и в 16 часов и в 0 часов всё время возвращает 0 ?
if(Hour()!=16 && Hour()!=0) return(0); // сюда код, который должен работать только в эти 2 часа
ИЛИ
if(Hour()==16 || Hour()==0) { // сюда тот же код }
Если я правильно помню, в MQL нет "короткого замыкания" - логическое условие проверяется целиком.
Да, так и есть. Проверка не останавливается
Если я правильно помню, в MQL нет "короткого замыкания" - логическое условие проверяется целиком.
Да, так и есть. Проверка не останавливается Смотрите стандарт С\С++ - разные логические операции ( И и ИЛИ ) обрабатываются по-разному.
Удачи и попутных трендов.
Большое Спасибо всем ответившим
на мой вопрос.
И за помощь.
на мой вопрос.
И за помощь.
Смотрите стандарт С\С++ - разные логические операции ( И и ИЛИ ) обрабатываются по-разному.
Так никто и не утверждает, что MQL дословно подчиняется стандарту С.
И вам - удачи и попутных трендов!
Смотрите стандарт С\С++ - разные логические операции ( И и ИЛИ ) обрабатываются по-разному.
Так никто и не утверждает, что MQL дословно подчиняется стандарту С.
И вам - удачи и попутных трендов!
Спросите у разработчиков ;). А что до обработки логических выражений, то все языки их так обрабатывают: для логического И проверяются ВСЕ условия, для логического ИЛИ или первое сработавшее или окончание перечня условий и это вполне оправдано, исходя из свойства этих операций. Думаю, что это в любом случае знать полезно - было время сам путался :).
Удачи и попутных трендов.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
if(Hour()!=16 || Hour()!=0)return(0);
и в 16 часов и в 0 часов всё время возвращает 0 ?
В таком виде на том же самом месте в коде- работает.
if(Hour()!=16)return(0);
или
if(Hour()!=0)return(0);
Может я чего то не допонимаю или не дочитал в синтаксисе??