Изучаем MQL5.

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

Оператор continue

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

Этот оператор используется при работе с циклами. Он предназначен для завершения текущей итерации цикла. Т.е. если идет например 10 проход цикла и встретился этот оператор, то сразу же начинается 11 проход. Этот оператор используется как правило с оператором ветвления.
Пример:
Код: выделить все
for(int i=0;i<1000;i++)
{
     double h=high[i];
     if(h>1.3200) continue;
     Buf[i]=h;
}

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

Оператор switch

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

Это оператор выбора из множества значений.
Код: выделить все
switch(выражение)
  {
   case константа: операторы
   case константа: операторы
      ...
   default: операторы
  }

Выражение это как правило переменная. Выражение должно быть целого типа. Константа - это выражение значение которого остается постоянным. Константа должна иметь целый тип или быть символьной константой (отдельный символ в одинарных кавычках, например 'A'). Если выражение и константа совпадают, то выполняется соответствующий оператор. Если ни одна константа не соответствует выражению, выполняется блок default. Этот блок не является обязательным. Операторы - несколько выражений. В конце таких выражений как правило ставиться оператор break. Если этого не сделать, то будут выполнены операторы для соответствующей константы и все последующие операторы.
Пример:
Код: выделить все
switch(x)
  {
   case 'A':
      Print("CASE A");
      break;
   case 'B':
   case 'C':
      Print("CASE B or C");
      break;
   default:
      Print("NOT A, B or C");
      break;
  }
Аватар пользователя
Рэндом
Специалист MQL
 
Сообщений: 13700
Зарегистрирован: 18 июл 2013, 08:05
Средств на руках: 31.45 Доллар
Группа: Администраторы
Благодарил (а): 1131 раз.
Поблагодарили: 3174 раз.
Каждый заблуждается в меру своих возможностей.

Оператор ?:

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

Этот оператор по смыслу похож на оператор if. Он так же является условным.
Код: выделить все
выражение1 ? выражение2 : выражение3

Выражение1 - это условие, он должно иметь тип bool. Если это выражение истинно, то выполняется выражение2, иначе выражение3. Выражение 2 и 3 должны иметь один тип и не должны иметь тип void. Тип void означает отсутствие значения. Чаще всего он используется при объявлении функций. О функциях будет рассказано далее.
Пример:
Код: выделить все
double true_range = (High==Low)?0.0:(Close-Open)/(High-Low);
Аватар пользователя
Рэндом
Специалист MQL
 
Сообщений: 13700
Зарегистрирован: 18 июл 2013, 08:05
Средств на руках: 31.45 Доллар
Группа: Администраторы
Благодарил (а): 1131 раз.
Поблагодарили: 3174 раз.
Каждый заблуждается в меру своих возможностей.

Приоритет операций

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

Приоритет операций опредиляет в каком порядке они выполняются при их комбинировании.
Давайте рассмотрим выражение:
Код: выделить все
x=f+k*2;

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

Код: выделить все
()
[]
.
 
!
~

++
--
(тип)
sizeof

*
/
%

+

 
<<
>>
 
<
<=
>
>=

==
!=
 
&

^
 
|

&&
 
||

?:

=
*=
/=
%=
+=
-=
<<=
>>=
&=
^=
|=

,
 

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

Функции

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

Функции - это проименовонанный участок кода который можно использовать многократно в программе. Функции могут возващать значение и принимать параметры.
Правила объявления функций:
Код: выделить все
тип Имя(параметр1,параметр2,параметрN)
{

}

Тип - это тип возвращаемого значения функции, может быть любым типом. Тип void означает что функция не возвращает значения. Объявление типа обязательно.
Имя - имя функции. Вы можете придумать любое имя функции.
Параметры - это объявление переменных которые будут доступны внутри функции. Через параметры можно передать функции значения.
Параметр объявляется так:
Код: выделить все
тип Имя

Если функция имеет тип отличный от void, то она возвращает значение. В этом случае в функции обязательно должен присутствовать оператор return. Этот оператор предназначен для возврата значения и имеет следующий синтаксис:
Код: выделить все
return выражение;

Пример объявления функции:
Код: выделить все
int Add(int x,int y)
{
      int z=x+y;
      return z;
}
int Add1(int x,int y)
{
    return x+y;
}


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

Массивы

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

Массивы - это блок проиндексированных данных определенного типа. Доступ к элементам массива осуществляется по индексу.
Объявление массива:
Код: выделить все
int f[];
double g[10];

При объявлении массива в квадратных скобках задается количество элементов массива. В первом случае количество элементов не определено. Такие массивы используются как правило для задания буфера индикатора или копирования данных из тайм серий (данные индикатора или ценовые данные). Также для таких массивов можно задать размер функцией ArrayResize, а после этого использовать как обычный массив. Это полезно если размер массива нужно определить на этапе выполнения.
Доступ к элементам массива:
Код: выделить все
double g[10];
g[0]=1;
g[1]=3;
....
g[9]=19;

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

Многомерные массивы.

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

Массив может быть многомерным.
Объявление многомерного массива
Код: выделить все
double g[10][10];

В данном случае объявляется двумерный массив.
Доступ к элементам массива:
Код: выделить все
double x=g[3][1];

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

Объекто ориентированное программирование

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

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

Опредиление классов.

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

При помощи класса можно объявить новый тип.
Код: выделить все
class Person
{
   private:
          string name;
          datatime bday;
          string phone;
   protected:
          int age;
   public:
          void SetName(string n);
          string GetName();
};

Объявление класса начинается с ключевого слова class, далее следует имя класса и члены класса в фигурных скобках. Замете что после закрывающей фигурной скобки обязательно следует ставить точку с запятой. Блок объявления переменных и функций класса делится на несколько секций обозначенных ключевыми словами private,protected и public. Эти секции следуют в произвольном порядке. В них определяются переменные класса и функции класса. Переменные класса определяются так же как и все остальные переменные, но с одним отличием им нельзя присваивать значения. Функции определяются путем задания заголовка функции с точкой с запятой.

Секция private.
Здесь определяются перемеренные и функции которые будут доступны только внутри реализации класса.

Секция protected.
В этой секции определения переменных и функций доступны как внутри класса, так и в производном классе (классе который наследует данный класс).

Секция piblic.
В этой секции доступно все вышеперечисленное и также к переменным и функциям этой секции можно получить доступ из пользовательского кода.

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

Реализация классов.

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

При реализации классов мы просто реализуем функции класса используя специальный синтаксис.
Код: выделить все
тип Имя_класса::Имя_функции(параметры)
{
    код;
}

Функция должна быть объявлена в определении класса.
Пример:
Код: выделить все
void Person::SetName(string n)
{
      name=n;
}

string Person::GetName()
{
      return name;
}

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


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

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

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

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

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