Наши рекомендации:

  1. Главная
  2. Уроки MQL4
  3. 1.5 Операции отношения, Условные оператор if-else, Логические операции

1.5 Операции отношения, Условные оператор if-else, Логические операции

Обучение программированию на языке MQL4

Доброго времени суток!

Спустя большое количество теоретического материала, изученного в предыдущих постах, мы приблизились к условным операторам, изучив которые, можно уже написать более-менее рабочий код.

Условные операторы if-else

Данные операторы используются в 99% любого программного кода MQL4, они есть в любом языке программирования и нужны, чтобы сделать выбор «Что если«. В первый раз я познакомился с ними, когда начинал более плотно изучать Excel. В строке функция указывалось условие: если одно число в ячейке больше другого, тогда выполняется первое действие, если же нет, то второе. Вот простая формула Excel, которая сравнивает 2 ячейки, при соблюдении условия возвращает true (истина), либо false (ложь):

По похожему принципу работа происходит и в языка программирования MQL4:

Мы объявили две переменные типа int, задав им необходимые значения. Третьей переменной типа bool мы объявляем result. Я уже говорил, что для всех переменных рекомендуется всегда задавать значения во время их объявления. Если вы еще не знаете, какой значение должно быть, просто ставьте ноль, для bool эквивалент нуля это false.

Далее пишется if, что значит Если, а в круглых скобках записывается условие A1 больше B1. Для условного оператора не нужно ставить знак (;), потому что его действие еще не завершено, поэтому после скобок ставится пробел и назначается переменная, которой нужно будет присвоить значение, и уже после ставится точка с запятой. В этом примере 4 больше 1, значит выражение истинно, результат будет равен true. В противном случае в работу вступает оператор else (Иначе) и результат будет равен false. Оператор else не может существовать отдельно, всегда вначале должно быть условие if.

Операции отношения

При работе с условными операторами обязательно должно выполняться одно из условий: истина или ложь. Для выявления результата нужна одна из шести операций отношения:

  • ==  знак равенства, когда одна переменная равна другой, либо когда результат работы функции равен заданному числу. Указывается именно два знака равно, не нужно путать с обычным знаком равенства, который присваивает значение переменным.
  • !=  операция обозначает «Не равно», когда между значениями есть отличия
Выше в принте я вывел значение разницы между двумя переменными, Так как нам не важно, какая из них больше, то вычитание возведено в степень. Чтобы корректно вывести данные, нужно привести тип double в строковое значение с округлением до 2 знаков после запятой. Более подробно я рассказывал в этом уроке.

  • <  знак обозначает, что одна переменная должна быть меньше, чем другая.
  • > знак обозначает, что одна переменная должна быть больше, чем другая.
  • <= знак обозначает, что одна переменная должна быть меньше, либо равна другой.
  • >= знак обозначает, что одна переменная должна быть больше, либо равна другой.
В первом случае a3 не может быть больше нуля, потому что значение и так равно нулю, поэтому условный оператор if является Ложью, значит далее идет проверка на следующий оператор elseу которого нет условия, поэтому выводится его принт в журнал.

Во втором примере используется операция отношения больше или равно, т.е. тут проверяется два условия в одном: значение либо должно быть больше 0, либо равно ему. Т.к. оно равно, ответ оператора Истина, поэтому выдается первый принт. На этом работа данного блока операторов заканчивается, программа автоматически пропускает второе условие else, потому что в нем уже нет нужды, нужное условие уже найдено.

Условию else можно прописать оператор if, когда нужно выполнить несколько сравнений:

В этом примере как первый, так и второй оператор являются ложью, поэтому check1 так и остается равный falseа так как у последнего выражения else нет условия, то значение check2 принимает вид true.

Данную структуру можно усложнить, сделав дополнительную проверку внутри каждого выражения. Для этого оператор if выделяется фигурными скобками и обрабатывает информацию только в них: 

Тут представлено два условия, внутри которых еще по два других вложенных оператора. Первое if отпадает сразу же, потому что а5 меньше нуля, значит условия внутри первых фигурных скобок уже не проверяется, код переходит к отработке условия elseв котором уже задает корректное значение переменной.

Количество операторов может быть много, но я не помню, чтобы писал else более 6-7 раз в одном блоке. Попробуем еще один более сложный пример, где вы сами должны посчитать вручную корректные значение, которое будет присвоено переменной, а потом проверить этот код в терминале.

Стоит сказать, что сравнение можно производить и с помощью математических функций:

Работать можно не только с переменными, но и с элементами массива или функциями:

Допустим вам нужно узнать, какой является закрытая свеча — бычьей или медвежьей, тогда мы сравниваем ее цены открытия и закрытия:

Условный оператор «

Данный оператор не является необходимым, но о его наличии нужно знать. По своей сути он полностью идентичен условному оператору if-else, но имеет немного другой формат записи. Я им пользуюсь только, чтобы сократить количество строк кода.

Рассмотрим простой код, где double переменной value мы задаем значение, в зависимости от условия:

Все тоже самое можно сделать с помощью условного оператора ?

Вместо четырех строк стало две, а результат вычислений одинаковый. В этом примере мы вначале объявили int переменную k0 а переменную double value объявили уже сразу с условием в этой строке. Первое выражение это условие k0 > 0если оно выполняется, т.е. Истина, тогда переменная value принимает значение k0, указанное во втором выражении, если Ложь,  тогда значение 15 в третьем выражении. Для этого нужно поставить два знака: (?) перед Истиной и (:) перед Ложью.

Другой пример:

Тоже самое вычисление делаем по новому методу:

Стоит уточнить, что такой метод можно использовать и для вложенных операторов, но чтобы не запутаться, лучше их прописывать как обычно.

Логические операции

Порой бывает необходимость сравнивать больше, чем одно условия в одном выражении if. В этом помогут логические операции:

  • && — операция И. Она отвечает за то, что проверяет, чтобы все условия были истиной.

К примеру у нас есть три оператора, два из которых вложенные:

Тут нет условия else, выражения простые, но занимают много места. Чтобы упростить эту конструкцию, мы воспользуемся логическим оператором И:

Естественно, мы знаем, что 50 больше 0, 20 и 30, и было бы достаточно проверить только одно из этих условий, но в данном примере не стоит обращать внимания на цифры, в работе с серьезным кодом у вас будет много переменных, значения которых вы можете не знать или не помнить.

  • || операция ИЛИ. С ним идет проверка на то, чтобы одно из двух условий было истиной.
Двадцать не равно сорока, но b8 равно c8, одно из условий выполнено, поэтому результат истина.

Данные логические операции можно использовать вместе, но они обязательно должны сопровождаться скобками. Все переменные, которые относятся в И должны отделяться от ИЛИ:

В данном выражение первое условие Ложь, но два в скобках выполняются, поэтому в сумме данный оператор возвращает Истину. Если забыть поставить скобки между операторами с &&, то расчет может пойти не так, как вы задумали.

Управлять и выстраивать цепочку операторов можно как угодно, тут все зависит только от сложности ваших вычислений. В примере ниже постарайтесь найти ответ сами. Для интереса можете записать результат переменной result2 в комментариях под этим постом, а уже после сделать проверку в терминале.

Небольшое отступление. Вы заметили, как увеличился в объеме код по сравнению с предыдущими уроками? И это только начало. Самый большой код без дополнительных библиотек, который я видел, был около 6000 строк, на форуме писали, что видели монстра в 20к строк. В свое время для изменения 2500 тысяч строк открытого кода новостного индикатора, который к тому времени морально устарел и не устраивал меня в целом я потратил добрые 3 недели, в итоге теперь люди по всему интернету пользуются нашим бесплатным индикатором Truly News Indicator.

Последняя логическая операция, которую мы рассмотрим, это восклицательный знак (!), обозначающий НЕ. Данный операнд является отрицанием и равняется истиной, если значение оператора ложь. Т.е. с ним проверяется противоположный результат. Немного сумбурно, давайте рассмотрим на примере:

Этот пример мы уже изучали выше, тут очевидно, что а больше нуля, поэтому ответ Истина. Но если мы добавим операнд НЕ, то результат будет полностью противоположный:

Такой прием используется в сложных операциях, когда легче справиться со знаком (!). Лично я его применяю в проверке функций и bool переменных.

В примере выше оба условных оператора одинаковы по смыслу, потому что в первом варианте мы задали сравнение через операцию отношения ==, а во втором через логическое отрицание !

Стоит также заметить, что для переменных типа bool не обязательно приписывать значения true или false, когда можно указать просто их наименование, либо наименование со знаком отрицания:

И последний пример для закрепления материала. В нем есть подсчет количества условий, которые оказались истиной:

 

Надеюсь данный урок был для вас полезным. Пришлось поломать голову, чтобы придумывать все эти условия для примеров. Если будут вопросы, пишите в комментариях, либо на почту поддержки, все данные есть в разделе «Команда». Все примеры, как всегда, во вложении.

2 комментария. Оставить новый

  • Я хочу научиться писать советники, а не скрипты и индикаторы. Могу я сразу перейти на 3 раздел курса?

    Ответить
    • Здравствуйте. К сожалению нет, вам необходимо пройти каждый урок последовательно. С каждым уроком количество кода увеличивается, а разжевывания основ становится все меньше. Обучение нужно проходить строго поэтапно.

      Ответить

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Заполните поле
Заполните поле
Пожалуйста, введите корректный адрес email.
Вы должны согласиться с условиями для продолжения

Меню