Найти тему
MQL-программирование

Синтаксис языка программирования MQL. Операции.

Оглавление

Для того, чтобы написать программу на любом языке программирования нужны данные, и обработка этих данных. Это касается и языка программирования MQL. Ведь для того, чтобы принять какое-либо торговое решение, нам нужно во-первых, получить текущие актуальные данные о торговом инструменте, с которым мы хотим работать и, во-вторых, провести анализ этих данных, чтобы выяснить, соответствует ли текущая рыночная ситуация условиям, при которых мы будем открывать позиции в рынке.

Операции с данными можно подразделить на различные виды взаимодействия с данными:

  • Арифметические операции.
  • Операции присваивания.
  • Операции отношения.
  • Логические операции.
  • Прочие операции.

Арифметические операции

Арифметические операции всем нам хорошо знакомы еще со школьной скамьи, и языке программирования они имеют тот же смысл, что и в математике:

Рис. 1. Основные арифметические операции.
Рис. 1. Основные арифметические операции.

Следует пояснить некоторые моменты. В частности, при делении двух чисел операцией / в качестве результата получаем не дробное число и не число с плавающей точкой, а результат операции "деления нацело". Т.е. в результате выполнения операции:

Рис. 2. Пример операции деления.
Рис. 2. Пример операции деления.

будет выведен результат i = 5, не смотря на то, что результирующая переменная i объявлена с типом данных double. Это связано с тем, что все операнды, участвующие в операции деления имею целый тип. Если нам нужно получить точный результат от операции деления, то нам необходимо явно привести один из операндов к вещественному типу либо, просто добавив десятичную точку, либо использовав операцию приведения типов:

Рис. 3. Операция деления с приведением типов операндов.
Рис. 3. Операция деления с приведением типов операндов.

При написании программ часто возникает потребность в последовательном переборе чисел в каком-либо диапазоне. Например, при организации цикла перебора всех баров на экране торгового терминала, с целью получить данные. Специально для таких случаев были введены специальные операторы инкремента и декремента переменной целого типа данных.

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

Различают два вида оператора инкремента и декремента:

  • префиксный;
  • постфиксные.
Рис. 4. Пример постфиксного оператора инкремента.
Рис. 4. Пример постфиксного оператора инкремента.

В результате выполнения данного кода в переменных i и j будут храниться различные значения. Переменная i =0, в то время, как j = 1. Это обусловлено тем, что вначале переменной i будет присвоено текущее значение переменной j, и только потом переменная j будет инкрементированна (увеличена на единицу).

Рис. 5. Пример префиксного оператора инкремента.
Рис. 5. Пример префиксного оператора инкремента.

В результате выполнение данного кода, обе переменные будут равны единице, т.к. вначале переменная j будет инкрементированна на единицу, и только потом будет присвоено новое ее значение переменной i.

Операции присваивания

Операция присваивания выполняет одну очень важную роль - изменяет значение переменной.

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

Рис. 6. Пример операции присваивания.
Рис. 6. Пример операции присваивания.

Для случаев, когда переменную нужно увеличить (либо уменьшить) на какое-либо значение (отличное от единицы), то можно использовать сокращенную форму оператора присваивания:

Рис. 7. Полная и сокращенная форма оператора присваивания.
Рис. 7. Полная и сокращенная форма оператора присваивания.

Существуют различные формы сокращенного оператора присваивания:

Рис. 8. Различные виды сокращенной формы оператора присваивания.
Рис. 8. Различные виды сокращенной формы оператора присваивания.

Операции отношения (сравнения)

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

Рис. 9. Операции отношения (сравнения) значений переменных.
Рис. 9. Операции отношения (сравнения) значений переменных.

Следует, однако, обратить внимание на то, что проверка на равенство обозначается двумя знаками равенства (==), этим она и отличается от операции присваивания. Следует внимательно записывать эти две операции, так пропуск одного знака равенства в операции сравнения не будет вызывать синтаксическую ошибку компилятора, но будет в корне менять логику выполнения программы.

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

Логические операции необходимы в том случае, если требуется проверить составное условие. Например, если цена актива находится не ниже определенной отметки и при этом объем торговли не превышает некоторого значения.

Существует три вида логических операций:

  • Отрицание (Логическое НЕ).
  • Конъюнкция (Логическое И).
  • Дизъюнкция (Логическое ИЛИ).

Логическое отрицание

Логическое отрицание НЕ(!) Операнд операции логического отрицания НЕ(!) должен иметь арифметический тип. Результат равен ИСТИНА(1), если значение операнда есть ЛОЖЬ(0), и равен ЛОЖЬ(0), если операнд не равен ЛОЖЬ(0).

Рис. 10. Пример использования логической операции отрицания.
Рис. 10. Пример использования логической операции отрицания.

Поясним приведенный выше код. В первой строке мы объявляем логическую переменную res и инициализируем ее значением false (ЛОЖЬ). В следующей строке мы проверяем значение этой переменной на соответствие значению ИСТИНА. Т.к. значением операнда res является ЛОЖЬ, то операция !res вернет значение ИСТИНА и будет выполнен следующий оператор Print.

Конъюнкция

Логическая операция И (&&) значений x и y. Значением выражения является ИСТИНА(1), если значения x и y истинны (не нуль). В противном случае - ЛОЖЬ(0).

Другими словами, если оба операнда (х и у) являются истинными (не равными нулю), то результат операции будет ИСТИНА.

Примечание. Если в операции конъюнкции значение первого операнда равно ЛОЖЬ, то значение второго операнда не вычисляется!

Это связано с тем, что если значение хотя бы одного из операндов есть ЛОЖЬ, то результат всей операции логического И будет ЛОЖЬ и проверка второго операнда теряет всякий смысл.

Дизъюнкция

Логическая операция ИЛИ (||) значений x и y. Значением выражения является ИСТИНА(1), если истинно (не нуль) значение x или y. В противном случае - ЛОЖЬ(0).

Другими словами, если истинно (не равно нулю) хотя бы одно выражение (либо х, либо у), то результат операции будет ИСТИНА.

Прочие операции

К прочим операциям можно отнести такие операции:

  • индексирование ([]);
  • вызов функции (с параметрами, или без них);
  • операция запятая (,);
  • операция точка (.);
  • операция разыменовывания (::).

Индексирование []

Операция индексирования применяется в случае, если требуется получить значение элемента массива.

Индексом массива может быть только целое число. Допускаются не более чем четырехмерные массивы. Индексация каждого измерения производится от 0 до размер измерения-1. В частном случае одномерного массива из 50 элементов обращение к первому элементу будет выглядеть как array[0], к последнему элементу - array[49].

При доступе за пределы массива исполняющая подсистема сгенерирует критическую ошибку, и выполнение программы будет остановлено.

Рис. 11. Пример операции индексирования.
Рис. 11. Пример операции индексирования.

Вызов функции с параметрами (или без них)

Для того, чтобы вызвать функцию на исполнение, необходимо указать ее имя. Если функция принимает параметры (аргументы), то их необходимо указать в круглых скобках после имени функции через запятую. Каждый аргумент может представлять собой константу, переменную или выражение соответствующего типа.

Значением выражения является значение, возвращаемое функцией.

Если тип возвращаемого значения функции есть void, то вызов такой функции нельзя помещать справа в операции присвоения. Обратите внимание, что порядок выполнения выражений x1,..., xn гарантируется.

Тип данных void применим только для функций и означает, что функция не возвращает никакого результата.

Рис. 12. Пример вызова функции с аргументами и без.
Рис. 12. Пример вызова функции с аргументами и без.

Операция запятая (,)

Выражения, разделенные запятыми, вычисляются слева направо. Все побочные эффекты вычисления левого выражения могут возникать до вычисления правого выражения. Тип и значение результата совпадают с типом и значением правого выражения. В качестве примера можно рассматривать список передаваемых параметров (см.выше).

Операция точка (.)

Операция точка используется для получения доступа к элементам структур и классов (классы будут рассмотрены позднее).

Рис. 13. Пример использования оператора точка.
Рис. 13. Пример использования оператора точка.

Операция разыменовывания (::)

Данная операция применима только в концепции объектно-ориентированного программирования и будет рассмотрена позднее.

Заключение

В данной статье мы рассмотрели основные арифметические, логические и прочие операции, без которых невозможно написать ни одной сколь-нибудь сложной программы.

Арифметические операции позволяют вычислять математические значения и на основе полученных данных строить логическую часть программы при помощи логических операций.