Изучаем MQL5.

Программирование прибыли: от азов к секретам мастерства. Читайте, спрашивайте, делитесь опытом.
Бонус за сообщение 0.5$
Ответственный Модератор - Haos

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

Сообщение Рэндом » 01 авг 2013, 00:57

Арифметические операции относятся к целым и к вещественным типам, но не все. Те операции которые относятся только к целым будут выделены. Помните о том что тип datatime может соответствовать целому типу без знака.
Код: выделить все
Сумма величин                           i = j + 2;
Вычитание величин                       i = j - 3;
Изменение знака                         x = - x;
Умножение величин                       z = 3 * x;
Частное от деления                      i = j / 5;
Остаток от деления (только для целых)    minutes = time % 60;
Добавление 1 к значению переменной      i++;
Добавление 1 к значению переменной      ++i;
Вычитание 1 от значения переменной      k--;
Вычитание 1 от значения переменной      --k;

Операции добавления и вычитания единицы (i++) применяются только к переменным. Важно помнить о том что если плюсы или минусы в операция добавления стоят после переменной, то сначала выполняются другие действия, а затем сама операция.
Пример:
Код: выделить все
h=i++;

Здесь сначала будет выполнена операция присваивания, а затем i будет увеличено на 1.
Если плюсы или минусы идут перед переменной, то сначала будет выполнено увеличение или уменьшение на 1, а затем другие операции.
Аватар пользователя
Рэндом
Специалист MQL
 
Сообщений: 13700
Зарегистрирован: 18 июл 2013, 08:05
Средств на руках: 31.45 Доллар
Группа: Администраторы
Благодарил (а): 1131 раз.
Поблагодарили: 3174 раз.
Каждый заблуждается в меру своих возможностей.

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

Сообщение Рэндом » 02 авг 2013, 03:45

Кроме простой операции присваивания (x=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 <<= x;
Побитовая операция И двоичных представлений y и x      y &= x;
Побитовая операция ИЛИ двоичных представлений y и x    y |= x;
Побитовая операция исключающее ИЛИ
          двоичных представлений y и x                 y ^= x;

Некоторые операции вам не знакомы, но мы познакомимся с ними позже. А теперь давайте рассмотрим смысл этих операций. Легче всего он объясняется на примерах. Так выражение у += x эквивалентно y=y+x.
И последний тип присваивания. Множественное присваивание:
Код: выделить все
x=y=3;

Здесь переменным x и y присваивается значение 3. Переменных может быть больше двух, а 3 можно заменить выражением.
Аватар пользователя
Рэндом
Специалист MQL
 
Сообщений: 13700
Зарегистрирован: 18 июл 2013, 08:05
Средств на руках: 31.45 Доллар
Группа: Администраторы
Благодарил (а): 1131 раз.
Поблагодарили: 3174 раз.
Каждый заблуждается в меру своих возможностей.

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

Сообщение Рэндом » 05 авг 2013, 03:47

Операции отношения тесно связанны с типом bool, который может принимать два значения Истина (true) и Лож (false). Но это относиться к результату вычислений операций отношения, т.е. их результат имеет тип bool, а сами операции выполняются над числовыми типами. Эти операции используются при ветвлении программ, т.е. выполнения разных участков кода в зависимости от условия. А так же в операциях цикла, повторного выполнения ( от 0 до бесконечности) некоторого участка программы.
Операции:
Код: выделить все
Истина, если a равно b                       a == b;
Истина, если a не равно b                    a != b;
Истина, если a меньше b                      a < b;
Истина, если a больше b                      a > b;
Истина, если a меньше или равно b            a <= b;
Истина, если a больше или равно b            a >= b;
 

Одно важное замечание. Нельзя использовать операцию равенства с вещественными числами. Для сравнения этих чисел необходимо нормализовать их разницу (функция NormalizeDouble) и сравнить с 0. Что такое функция вы узнаете позже.
Аватар пользователя
Рэндом
Специалист MQL
 
Сообщений: 13700
Зарегистрирован: 18 июл 2013, 08:05
Средств на руках: 31.45 Доллар
Группа: Администраторы
Благодарил (а): 1131 раз.
Поблагодарили: 3174 раз.
Каждый заблуждается в меру своих возможностей.

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

Сообщение Рэндом » 06 авг 2013, 02:12

Логические операции применяются к типу bool и возвращают тип bool.

Логическое отрицание (НЕ).
Операция обозначается как !. Это операция с одним операндом (значение или переменная), которая ставиться перед ним. Если операция применяется к true, то ее результат будет false. Если к false, то результат true.
Пример:
Код: выделить все
!x
!(x==y)


Логическое И.
Операция обозначается как &&. Это операция с двумя операндами, которая ставиться между ними.
Смысл операции:
Код: выделить все
true && true == true
false && false == false
true && false == false
false && true == false

Пример:
Код: выделить все
k<x && x>y


Логическое ИЛИ.
Операция обозначается как ||. Это операция с двумя операндами, которая ставиться между ними.
Смысл операции:
Код: выделить все
true || true == true
false || false == false
true || false == true
false || true == true

Пример:
Код: выделить все
x==1 || x==2


При вычеслении цепочки логических операция их вычесление прекращается как только можно однозначно сказать каким будет результат всего выражения.
Аватар пользователя
Рэндом
Специалист MQL
 
Сообщений: 13700
Зарегистрирован: 18 июл 2013, 08:05
Средств на руках: 31.45 Доллар
Группа: Администраторы
Благодарил (а): 1131 раз.
Поблагодарили: 3174 раз.
Каждый заблуждается в меру своих возможностей.

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

Сообщение Рэндом » 07 авг 2013, 03:13

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

Сдвиг вправо.
Операция обозначается как >>. Сдвиг числа x на y разрядов. Если сдвигается безнаковое число, то старшие (левые) биты заполняются нулями. Если сдвигается знаковое число, то старший разряд распростроняется влево.
Пример:
Код: выделить все
k=x>>y;


Сдвиг влево.
Операция обозначается как <<. Сдвиг x влево на y разрядов, младшие разряды заполняются нулями.
Пример:
Код: выделить все
k=x<<y;


Побитовое НЕ.
Операция обозначается как ~. Значение каждого бита операнда меняется на противоположный. Т,е. 0 меняется на 1, а 1 на 0.
Пример:
Код: выделить все
k=~x;


Побитовое И.
Операция обозначается как &. Операция применяется к каждому биту по отдельности.
Смысл операции:
Код: выделить все
0&0==0
1&1==1
0&1==0
1&0==0

Пример:
Код: выделить все
k=x&y;


Побитовое ИЛИ.
Операция обозначается как ^. Операция примкеняется к каждому биту по отдельности.
Смысл операции:
Код: выделить все
0^0==0
1^1==1
0^1==1
1^0==1

Пример:
Код: выделить все
k=x^y;
Аватар пользователя
Рэндом
Специалист MQL
 
Сообщений: 13700
Зарегистрирован: 18 июл 2013, 08:05
Средств на руках: 31.45 Доллар
Группа: Администраторы
Благодарил (а): 1131 раз.
Поблагодарили: 3174 раз.
Каждый заблуждается в меру своих возможностей.

Выражения

Сообщение Рэндом » 08 авг 2013, 02:55

Выражения - это основной элемент программы. Выражения состоят из одного или нескольких операндов и операций. Операнд это число или переменная. Каждое выражение заканчивается точкой с запятой. В выражениях так же можно использовать круглые скобки, что меняет порядок выполнения операций. О порядке выполнения операций мы поговорим далее. Операции в скобках выполняются раньше других.
Пример:
Код: выделить все
k=(x+y)/2;

Смысл этого выражения в следующем сложить x и y, поделить результат на 2, и присвоить его k.
Выражения могут записываться в несколько строк, только важно не забывать в конце выражения ставить точку с запятой.
Аватар пользователя
Рэндом
Специалист MQL
 
Сообщений: 13700
Зарегистрирован: 18 июл 2013, 08:05
Средств на руках: 31.45 Доллар
Группа: Администраторы
Благодарил (а): 1131 раз.
Поблагодарили: 3174 раз.
Каждый заблуждается в меру своих возможностей.

Операции ветвления.

Сообщение Рэндом » 09 авг 2013, 03:22

Используя то что вы изучили ранее можно написать последовательную программу. Но случаи когда программа работает последовательно крайне редки. Часто возникает необходимость выполнить те или иные действия в зависимости от условия. Для этого существуют специальный оператор if. Он имеет следующий синтаксис:
Код: выделить все
if(условие)
    выражение1;
else
    выражение2;

Условие должно иметь тип bool. Если условие true, то выполняется выражение1, иначе выражение2. Ключевое слово else не обязательно. Если оно отсутствует, то при true выполняется только выражение1.
Важно помнить что в местах где должно быть выражение, можно записать только одно выражение. Но это можно обойти если записать последовательность выражений в фигурных скобках.
Пример:
Код: выделить все
if(x>0)
   {
        k=x+10;
        g=k/2;
   }
else
   {
      k=x-10;
      g=k*2;
   }
Аватар пользователя
Рэндом
Специалист MQL
 
Сообщений: 13700
Зарегистрирован: 18 июл 2013, 08:05
Средств на руках: 31.45 Доллар
Группа: Администраторы
Благодарил (а): 1131 раз.
Поблагодарили: 3174 раз.
Каждый заблуждается в меру своих возможностей.

Циклы.

Сообщение Рэндом » 12 авг 2013, 03:00

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

Код: выделить все
while(условие)
      выражение;

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

Код: выделить все
do
выражение;
while(условие)

Здесь выполняется выражение пока условие истинно. Сначала выполняется выражение, затем проверяется условие. В этом цикле выражение будет выполнено как минимум один раз.
Помните о том что выражения можно объединять в блоки.
Аватар пользователя
Рэндом
Специалист MQL
 
Сообщений: 13700
Зарегистрирован: 18 июл 2013, 08:05
Средств на руках: 31.45 Доллар
Группа: Администраторы
Благодарил (а): 1131 раз.
Поблагодарили: 3174 раз.
Каждый заблуждается в меру своих возможностей.

Цикл for

Сообщение Рэндом » 13 авг 2013, 03:11

Этот тип цикла используется для организации цикла со счетчиком.
Код: выделить все
for(выражение1;выражение2;выражение3)
            оператор;

Выражение1 это инициализация цикла. Оно состоит из объявления переменной или присвоения ей значения.
Пример:
Код: выделить все
int i;
for(i=1;;)
for(int i=0;;)

Выражение2 это условие завершения цикла. Если оно истинно, то выполняется оператор.
Пример:
Код: выделить все
for(int i=1;i<=1000;)

Выражение3 предназначено для изменение переменной цикла.
Пример:
Код: выделить все
for(int i=1;i<=100;i++)
    Buf[i]=high[i];

Этот цикл будет выполняться сто раз.
Аватар пользователя
Рэндом
Специалист MQL
 
Сообщений: 13700
Зарегистрирован: 18 июл 2013, 08:05
Средств на руках: 31.45 Доллар
Группа: Администраторы
Благодарил (а): 1131 раз.
Поблагодарили: 3174 раз.
Каждый заблуждается в меру своих возможностей.

Оператор break

Сообщение Рэндом » 14 авг 2013, 04:20

Этот оператор предназначен для выхода из цикла. Т.е. используя этот оператор, можно прекратить выполнение цикла. Самое логичное, если будет сделана проверка на какое-нибудь условие, а как результат этой проверки будет вызван оператор break. В случае вложенных циклов, выход происходит из того цикла, в котором вызван этот оператор.
Пример:
Код: выделить все
for(int i=0;i<1000;i++)
{
      double h=high[i];
      if(h>1.3200) break;
}
Аватар пользователя
Рэндом
Специалист MQL
 
Сообщений: 13700
Зарегистрирован: 18 июл 2013, 08:05
Средств на руках: 31.45 Доллар
Группа: Администраторы
Благодарил (а): 1131 раз.
Поблагодарили: 3174 раз.
Каждый заблуждается в меру своих возможностей.


Вернуться в MQL – теория и практика

Кто сейчас на форуме?

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 36

Права доступа к форуму

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

cron