Скачать MetaTrader 5

Мжет подскажет кто?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Forex Trader
114293
Forex Trader  
Почему выражение
if(Hour()!=16 || Hour()!=0)return(0);
и в 16 часов и в 0 часов всё время возвращает 0 ?


В таком виде на том же самом месте в коде- работает.
if(Hour()!=16)return(0);
или
if(Hour()!=0)return(0);


Может я чего то не допонимаю или не дочитал в синтаксисе??
Forex Trader
114293
Forex Trader  
Почему выражение
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 в обоих случаях.
Forex Trader
114293
Forex Trader  
По идее он и не должен быть равен в 16 0
и в 0 16
достаточно что бы сработало хотябы одно из логических условий
потому и ставится не "и" а "или"

например в 16 часов одно из условий станеовится ложным
и оператор return(0) не должен выполняться
не так ли?
MetaQuotes Software Corp.
Модератор
187116
MetaQuotes Software Corp.  
Вероятнее всего вместо ИЛИ (||), Вы имели в виду И (&&).
То есть, если время не равно 16 и 0 часам, то вернуть 0.
Forex Trader
114293
Forex Trader  
По идее он и не должен быть равен в 16 0
и в 0 16
достаточно что бы сработало хотябы одно из логических условий
потому и ставится не "и" а "или"

например в 16 часов одно из условий станеовится ложным
и оператор return(0) не должен выполняться
не так ли?


Не так: по стандарту проверяются все условия по очереди до окончания или первого сработавшего. "Логическое ИЛИ" = ИСТИНА, если верно одно из условий.
Пример в 16 часов - не работает первое условие, но работает второе. Для 0 часов аналогично.

Удачи и попутных трендов.
Forex Trader
114293
Forex Trader  
Не так: по стандарту проверяются все условия по очереди до окончания или первого сработавшего. "Логическое ИЛИ" = ИСТИНА, если верно одно из условий.

Если я правильно помню, в MQL нет "короткого замыкания" - логическое условие проверяется целиком.
Forex Trader
114293
Forex Trader  
Почему выражение
if(Hour()!=16 || Hour()!=0)return(0);
и в 16 часов и в 0 часов всё время возвращает 0 ?
Надо написать:
if(Hour()!=16 && Hour()!=0) return(0);
// сюда код, который должен работать только в эти 2 часа

ИЛИ

if(Hour()==16 || Hour()==0)
{
// сюда тот же код
}




Если я правильно помню, в MQL нет "короткого замыкания" - логическое условие проверяется целиком.
Да, так и есть. Проверка не останавливается

Forex Trader
114293
Forex Trader  

Если я правильно помню, в MQL нет "короткого замыкания" - логическое условие проверяется целиком.
Да, так и есть. Проверка не останавливается


Смотрите стандарт С\С++ - разные логические операции ( И и ИЛИ ) обрабатываются по-разному.

Удачи и попутных трендов.
Forex Trader
114293
Forex Trader  
Большое Спасибо всем ответившим
на мой вопрос.
И за помощь.
Forex Trader
114293
Forex Trader  
Смотрите стандарт С\С++ - разные логические операции ( И и ИЛИ ) обрабатываются по-разному.

Так никто и не утверждает, что MQL дословно подчиняется стандарту С.
И вам - удачи и попутных трендов!
Forex Trader
114293
Forex Trader  
Смотрите стандарт С\С++ - разные логические операции ( И и ИЛИ ) обрабатываются по-разному.

Так никто и не утверждает, что MQL дословно подчиняется стандарту С.
И вам - удачи и попутных трендов!


Спросите у разработчиков ;). А что до обработки логических выражений, то все языки их так обрабатывают: для логического И проверяются ВСЕ условия, для логического ИЛИ или первое сработавшее или окончание перечня условий и это вполне оправдано, исходя из свойства этих операций. Думаю, что это в любом случае знать полезно - было время сам путался :).

Удачи и попутных трендов.
12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий