Урок №6: Операции и выражения

Виды операций

В языке MQL4 различают следующие виды операций:

  • арифметические операции;
  • операции присваивания;
  • операции отношения;
  • логические операции;
  • побитовые операции;
  • операция запятая;
  • вызов функции.

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

К символам арифметических операций относятся следующие:

Символ Операция Пример Аналог
+ Сумма величин x + 2
Вычитание величин или изменение знака x — 3, y = — y
* Умножение величин 3 * x
/ Частное от деления x / 5
% Остаток от деления minutes = time % 60
++ Добавление 1 к значению переменной y++ y = y + 1
Вычитание 1 из значения переменной y— y = y — 1

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

К символам операций присваивания относятся следующие:

Символ Операция Пример Аналог
= Присваивание значения x переменной y у = x
+= Увеличение значения переменной у на x у += x y = y + x
-= Уменьшение значения переменной y на x y -= x y = y — x
*= Умножение значения переменной y на x y *= x y = y * x
/= Деление значения переменной y на x y /= x y = y / x
%= Остаток от деления значения переменной y на x y %= x y = y % x

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

К символам операций отношения относятся следующие:

Символ Операция Пример
== Истина, если x равно y x == y
!= Истина, если x не равно y x != y
< Истина, если x меньше y x < y
> Истина, если x больше y x > y
<= Истина, если x меньше или равно y x <= y
>= Истина, если x больше или равно y x >= y

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

К символам логических операций относятся следующие:

Символ Операция Пример Пояснения
! НЕ (логическое отрицание) ! х ИСТИНА(1), если значение операнда ЛОЖЬ(0), и ЛОЖЬ(0), если значение операнда не ЛОЖЬ(0).
|| ИЛИ (логическое ИЛИ) x < 5 || x > 7 ИСТИНА(1), если истинно любое из значений
&& И (логическое И) x == 3 && y < 5 ИСТИНА(1), если истинны все значения

 

Итак, с простыми операциями мы разобрались, а вот что такое выражение? А выражение — это совместное использование операций и идентификаторов(переменных).

Пример:

int MyVar = X + 5; // Сложение значения из идентификатора X и числа 5 с последующим присвоением результата в переменную MyVar.

В данном случае MyVar и X — это идентификаторы, знак «+» — это операция, а целиком строка из нашего примера это и будет выражение. Смысл любого выражения в формировании результата, а затем присваивания этого результата левому операнду.

Давайте продолжим и рассмотрим выражения на примерах побитовых операций.

 

Побитовые операции

Побитовые операции выполняются только с целыми числами. К побитовым операциям относятся следующие:

Дополнение значения переменной до единицы. Значение выражения содержит 1 во всех разрядах, в которых значения переменной содержат 0, и 0 во всех разрядах, в которых значения переменной содержат 1.

b = ~n;

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

z = z >> x;

Двоичное представление x сдвигается влево на y разрядов; освобождающиеся справа разряды заполняются нулями.

d = d << k;

Побитовая операция И двоичных представлений d и k. Значение выражения содержит 1 (ИСТИНА) во всех разрядах, в которых и d, и k содержат не ноль; и 0 во всех остальных разрядах.

b = ((x & y) != 0);

Побитовая операция ИЛИ двоичных представлений x и y. Значение выражения содержит 1 во всех разрядах, в которых x или y не содержат 0, и 0 — во всех остальных разрядах.

b = x | y;

Побитовая операция «исключающее ИЛИ» двоичных представлений x и y. Значение выражения содержит 1 в тех разрядах, в которых x и y имеют разные двоичные значения, и 0 — во всех остальных разрядах.

b = x ^ y;

Операция запятая

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

for(i=0,j=99; i<100; i++,j--) 
   Print(my_array[i][j]); // Оператор цикла

 

Вызов функции

Теперь мы поговорим о функциях в языке программирования MQL.

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

  • Любая функция имеет тип, также, как и любая переменная.
  • Функция может возвращать значение, тип которого в большинстве случаев аналогично типу самой функции.
  • Если функция не возвращает никакого значения, то она должна иметь тип void (такие функции иногда называют процедурами)
  • При объявлении функции, после ее типа должно находиться имя функции и две круглые скобки — открывающая и закрывающая, внутри которых могут находиться один или несколько аргументов функции, которых также может не быть вообще.
  • После списка аргументов функции ставится открывающая фигурная скобка, после которой находится само тело функции.
  • В конце тела функции обязательно ставится закрывающая фигурная скобка.

Пример:

//+------------------------------------------------------------------+
//| Перенос уровня StopLoss                                          |
//| Параметры:                                                       |
//| ldStopLoss - уровень StopLoss                                    |
//+------------------------------------------------------------------+
void ModifyStopLoss(double ldStopLoss) 
{
   bool fm;

   fm = OrderModify(OrderTicket(), OrderOpenPrice(), ldStopLoss, OrderTakeProfit(), 0, CLR_NONE);
}

В этом примере мы объявили функцию ModifyStopLoss с типом void. Синтаксически тип void является фундаментальным типом наравне с типами bool, int, color, datetime и т.д. Этот тип используется либо для указания того, что функция не возвращает значения, либо в качестве параметра функции обозначает отсутствие параметров. Наша функция, состоит всего из двух строк, но тем не менее гораздо проще её вызвать с указанием всего одного параметра ldStopLoss, нежели в различных местах эксперта каждый раз вызывать функцию терминала OrderModify с передачей целой массы параметров.

В этом примере мы использовали функцию типа void, которые не возвращают никакого значения. Теперь давайте напишем функцию возвращающую результат. Оператор return используется для возвращения вычисляемого функцией значения.

Пример:

//+------------------------------------------------------------------+
//| Перенос уровня StopLoss                                          |
//| Параметры:                                                       |
//| ldStopLoss - уровень StopLoss                                    |
//+------------------------------------------------------------------+
bool ModifyStopLoss(double ldStopLoss) 
{
   bool fm;

   fm = OrderModify(OrderTicket(), OrderOpenPrice(), ldStopLoss, OrderTakeProfit(), 0, CLR_NONE);

   return(fm);
}

В этом варианте функция вернёт значение переменной fm, полученное в результате вызова функции OrderModify.

 

 

 

Written by 

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