Как сделать условие одновременно с ИЛИ и И - страница 4

 
Попробовал визуализировать изначальный код Ивана:
if(last_order_type == "buy" || last_order_type == "notrade" && order_type == "sell"){ операторы... }

По-моему, так получается:

 
Yevhenii Levchenko:
Попробовал визуализировать изначальный код Ивана:

По-моему, так получается:

На входе у нас 3 условия?  Любое условие "0" или "1" ?  Может ли notrade , быть или 1 или 0 ?

 
Aleksey Popov:

На входе у нас 3 условия?  Любое условие "0" или "1" ?  Может ли notrade , быть или 1 или 0 ?

notrade это то, с чем сравнивают.  Идет проверка значения переменной last_order_type . И если значение переменной last_order_type равно "notrade", то это истина (то есть 1). Так же и с переменной order_type, которое проверяют, равно ли оно значению "sell" .  При таком варианте схемы проверка на соотвествие значения переменной last_order_type значению "buy" не имеет смысла. Схема будет блокирована, если значение переменной  last_order_type не будет соответствовать значению "notrade".


Если я все правильно понял

 
Yevhenii Levchenko:

notrade это то, с чем сравнивают.  Идет проверка значения переменной last_order_type . И если значение переменной last_order_type равно "notrade", то это истина (то есть 1). Так же и с переменной order_type, которое проверяют, равно ли оно значению "sell" .  При таком варианте схемы проверка на соотвествие значения переменной last_order_type значению "buy" не имеет смысла. Схема будет блокирована, если значение переменной  last_order_type не будет соответствовать значению "notrade".


Если я все правильно понял

В таком случае у нас на выходе должно быть 2 значения: BUY  1 или 0 (истина или ложь)

                                                                                              SELL 1 или 0 (истина или ложь)

 
Aleksey Popov:
В таком случае у нас на выходе должно быть 2 значения: BUY  1 или 0 (истина или ложь)

                                                                                              SELL 1 или 0 (истина или ложь)

Нет, на выходе либо истина (1, true) или ложь (0, false). Это не значит покупку или продажу. Возьмем опять код:

if(last_order_type == "buy" || last_order_type == "notrade" && order_type == "sell"){ - эта фигурная скобка сигнализирует о начале кода, который выполняется если условия истинны
        // если условия истинны следующий код будет выполняться
    int a = 5;
    int b = 3;
    int c = a + b;
 } - конец блока кода

Ключевое слово if говорит, что дальше будут условия. Условия прописывается в скобках (). В условиях могут быть операции отношения (равно "==", больше/меньше  ">/<", не равно "!=", меньше или равно  "<=", больше или равно  ">=") и логические операции (и "&", или "|" ). Если все условия истинны будет выполняться код, между фигурными скобками, иначе (если какое-то из условий ложное) ничего не произойдет.

То есть, выполнение условий это лишь повод для выполнения дальнейшей работы (какую пропишите, такая и будет)

Если мы меняем код (добавил скобки - выделен этот кусок):

if(  (last_order_type == "buy" || last_order_type == "notrade") && order_type == "sell"){ - эта фигурная скобка сигнализирует о начале кода, который выполняется если условия истинны
        // если условия истинны этот следующий код будет выполняться
    int a = 5;
    int b = 3;
    int c = a + b;
 } - конец блока кода

То у нас появляется как бы условие в условии. Поскольку внутри скобок между условиями (проверкой значения переменной last_order_type  на соответствие значению "buy" и проверкой значения переменной last_order_type  на соответствие значению "notrade") есть  операнд || (или), то необходимо чтобы хоть одно из условий в скобках выдало в результате истину, чтобы "скобки" выдали истину. Затем проверяется, соответствует ли значение переменной order_type значению "sell". И если значение "скобок" - истина и значение условия с order_type - истина, то дальше выполняется код внутри фигурных скобок

Документация по MQL5: Основы языка / Операции и выражения / Логические операции
Документация по MQL5: Основы языка / Операции и выражения / Логические операции
  • www.mql5.com
//| Script program start function                                    | "Операция &&: Результат первого выражения false, поэтому второе выражение не вычислялось" //| функция всегда возвращает false                                   | //| функция всегда возвращает true                                    |
 

Вот картинка (это если я сам все понял правильно):

 
Yevhenii Levchenko:

Вот картинка (это если я сам все понял правильно):

Возможно я путаю, но это только потому что я пытаюсь понять смысл из вырванного куска кода. Как я понимаю мы после логических операций (AND  ; OR) или операций сравнения (  =<     ==> )  должны получить  2 команды   BUY  или SELL или их отсутсятвие   ( 0 или ЛОЖЬ)

модераторы, не обижусь если перекинете в песочницу

 
Aleksey Popov:

Возможно я путаю, но это только потому что я пытаюсь понять смысл из вырванного куска кода. Как я понимаю мы после логических операций (AND  ; OR) или операций сравнения (  =<     ==> )  должны получить  2 команды   BUY  или SELL или их отсутсятвие   ( 0 или ЛОЖЬ)

модераторы, не обижусь если перекинете в песочницу

Я не понимаю, что именно вы путаете :)


В конце схемы только один сигнал (из двух возможных): это либо сигнал логической единицы (1 либо true) либо логического нуля (0 или false). И только один из них. Либо условия истинны, либо нет... Либо напряжение есть, либо его нет...

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