Изучаем MQL5.

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

Изучаем MQL5.

Сообщение Рэндом » 19 июл 2013, 01:42

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

Введение.

Сообщение Рэндом » 19 июл 2013, 02:02

MQL5 - это язык программирования для терминала MetaTrader 5. Это чрезвычайно мощный и гибкий язык. Он почти в 20 раз превосходит по быстродействию MQL4 и по своему синтаксису и возможностям очень похож на С++. На нем можно писать очень сложные советники, индикаторы и скрипты. При этом нет необходимости переносить код в библиотеки DLL, как это делается в MQL4 для критичного по времени выполнения кода. А если вам не будет хватать производительности MQL5, то в нем предусмотрена возможность использовать OpenCL. OpenCL - это компонент параллельных вычислений на видио картах последнего поколения. На нем можно добиться 100 кратного и более увеличения производительности по сравнению C++ (одним из самых быстрых языков).
Программировать на MQL5 можно с разным уровнем знаний. Например вы умеете программировать на MQL4. Этих знаний вам будет достаточно чтобы начать программировать на МQL5, правда придется немного подучиться. MQL4 и MQL5 не совместимы. На начальном этапе вы можете не использовать такие сложные конструкции как классы. Однако освоение всех возможностей MQL5 выведет вас на новый уровень по сравнению с MQL4.
Аватар пользователя
Рэндом
Специалист MQL
 
Сообщений: 11558
Зарегистрирован: 18 июл 2013, 08:05
Средств на руках: 93.20 Доллар
Группа: Администраторы
Благодарил (а): 1013 раз.
Поблагодарили: 2843 раз.

Типы данных.

Сообщение Рэндом » 22 июл 2013, 01:50

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

Тип char Целое со знаком.
1 байт
мин -128
макс 127

Тип uchar Целое без знака
1 байт
мин 0
макс 255

Тип bool Логическое значение
1 байт
мин 0(false)
макс 1(true)


Тип short Целое со знаком
2 байта
мин -32 768
макс 32 767

Тип ushort Целое без знака
2 байта
мин 0
макс 65 535

Тип int Целое со знаком
4 байта
мин - 2 147 483 648
макс 2 147 483 647

Тип uint Целое без знака
4 байта
мин 0
макс 4 294 967 295

Тип color Обозначает цвет.
4 байта
мин -1
макс 16 777 215


Тип long Целое со знаком
8 байт
мин -9 223 372 036 854 775 808
макс 9 223 372 036 854 775 807

Тип ulong Целое без знака.
8 байт
мин 0
макс 18 446 744 073 709 551 615

Тип datetime Дата и время
8 байт
мин 0 (1970.01.01 0:00:00)
макс 32 535 244 799 (3000.12.31 23:59:59)

Тип float Вещественное одинарной точности
4 байта
мин 1.175494351e-38
макс 3.402823466e+38
7 значащих цифр

Тип double Вещественное двойной точности
8 байт
мин 2.2250738585072014e-308
макс 1.7976931348623158e+308
15 значащих цифр

Тип string предназначен для хранения строк теста.

Что такое байт? Байт - это фундоментальная ячейка памяти компостера. Он состоит из 8 бит. Бит может принимать всего 2 значения 0 и 1.

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

Целые числа.

Сообщение Рэндом » 23 июл 2013, 03:15

Целые числа состоят из набора цифр и могут содержать перед собой знак минуса (для целых со знаком). Важно при объявлении типа учитывать минимально и максимальное значение. Если в результате работы программы значение выйдет за эти пределы, это будет ошибкой. С каждым типом, в том числе и с целыми числами ассоциируется некоторый набор операций которые вы можете с ними совершить. Операции будут рассмотрены после рассмотрения переменных.

Примеры целых чисел:
3678
-125

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

Вещественные числа.

Сообщение Рэндом » 24 июл 2013, 01:35

Вещественные числа - это дробные числа.
Примеры:
1.3450
12.6
-1.623589e12
С первыми двумя примерами думаю все понятно, а вот третий давайте рассмотрим подробней. Его смысл заключается в следующем -1.623589 умножить на 10 в степени 12. Как само число, так и степень могут быть отрицательными. Еще важный момент при определении типа вещественного числа нужно помнить о количестве значимых знаков. Они показывают сколько цифр можно записать до символа е. Как вы могли заметить символ е не обязателен. При помощи вещественных чисел можно записать очень большие значения, но ограничение на количество значимых знаков делает их не точными в некоторых случаях. А именно если значимых знаков должно быть больше. С дробными числами можно использовать округление и это не сильно повлияет на программу. Но с большими числами такое влияние может быть ощутимо.
Аватар пользователя
Рэндом
Специалист MQL
 
Сообщений: 11558
Зарегистрирован: 18 июл 2013, 08:05
Средств на руках: 93.20 Доллар
Группа: Администраторы
Благодарил (а): 1013 раз.
Поблагодарили: 2843 раз.
Каждый заблуждается в меру своих возможностей.

Тип color

Сообщение Рэндом » 25 июл 2013, 02:23

Тип color предназначен для задания цвета. Тип состоит из 4 байт, но использует только 3, по байту для каждой из составляющих цвета (красный,зеленый,синий). Используя эти три цвета можно получить практически любой другой цвет.
Записать цвет можно тремя способами.
Целым числом без знака. Здесь стоит сделать отступление. Рассказать о шестнадцатиричных числах.
Шестнадцатеричная система счисления (шестнадцатеричные числа) — позиционная система счисления по целочисленному основанию 16.
Обычно в качестве шестнадцатеричных цифр используются десятичные цифры от 0 до 9 и латинские буквы от A до F для обозначения цифр от 10 до 15.
Записываются шестнадцатиричные числа так:
0xFFFFFF - где 0x специальные символы сообщающие что число шестнадцитиричное.
Записать цвет в этой системе можно так 0x00BBGGRR, где RR красная составляющая, GG зеленая, BB синия.
Так же можно записать цвет в виде литерала (Литералы представляют собой константы, непосредственно включаемые в текст программы в отличие от прочих данных — констант и переменных, обращение к которым осуществляется посредством ссылок. Это может быть все что угодно число, строка, дата и т.д). Выглядит это так:
C'128,128,128'
C'0x00,0x00,0xFF'
Сначала идет красный цвет, затем зелены, затем синий.
И последний, самый удобный вариант. Константы (константа - это постоянное значение, которое не меняется на всем протяжении выполнения программы).
clrRed // красный
clrYellow // желтый
clrBlack // черный
Список констант цвета можно найти в справке.
Аватар пользователя
Рэндом
Специалист MQL
 
Сообщений: 11558
Зарегистрирован: 18 июл 2013, 08:05
Средств на руках: 93.20 Доллар
Группа: Администраторы
Благодарил (а): 1013 раз.
Поблагодарили: 2843 раз.
Каждый заблуждается в меру своих возможностей.

Дата и время.

Сообщение Рэндом » 26 июл 2013, 01:47

Тип datetime предназначен для хранения даты и времени в виде количества секунд, прошедших с 01 января 1970 года. Занимает в памяти 8 байт.

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

Диапазон значений от 1 января 1970 года до 31 декабря 3000 года. Может опускаться либо дата (год, месяц, число), либо время (часы, минуты, секунды), либо все вместе.

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

datetime NY=D'2015.01.01 00:00'; // время наступления 2015 года
datetime d1=D'1980.07.19 12:30:27'; // год месяц день часы минуты секунды
datetime d2=D'19.07.1980 12:30:27'; // равнозначно D'1980.07.19 12:30:27';
datetime d3=D'19.07.1980 12'; // равнозначно D'1980.07.19 12:00:00'
datetime d4=D'01.01.2004'; // равнозначно D'01.01.2004 00:00:00'
datetime compilation_date=__DATE__; // дата компиляции
datetime compilation_date_time=__DATETIME__; // дата и время компиляции
datetime compilation_time=__DATETIME__-__DATE__;// время компиляции
//--- примеры объявлений, на которые будут получены предупреждения компилятора
datetime warning1=D'12:30:27'; // равнозначно D'[дата компиляции] 12:30:27'
datetime warning2=D''; // равнозначно __DATETIME__
Аватар пользователя
Рэндом
Специалист MQL
 
Сообщений: 11558
Зарегистрирован: 18 июл 2013, 08:05
Средств на руках: 93.20 Доллар
Группа: Администраторы
Благодарил (а): 1013 раз.
Поблагодарили: 2843 раз.
Каждый заблуждается в меру своих возможностей.

Строки.

Сообщение Рэндом » 29 июл 2013, 01:44

Тип string предназначен для хранения текстовых строк. Текстовая строка представляет собой последовательность символов в формате Unicode с завершающим нулем на конце. string-переменной может быть назначена строковая константа. Строковая константа представляет собой последовательность символов Unicode, заключенную в двойные кавычки: "Это строковая константа".

Если необходимо ввести в строку двойную кавычку ("), то перед ней надо поставить символ обратной косой черты (\). В строку могут быть введены любые специальные символьные константы, перед которыми стоит символ обратной косой черты (\).
новая строка (перевод строки)
\n


горизонтальная табуляция
'\t


возврат каретки
\r


обратная косая черта
\\


одинарная кавычка
\'


двойная кавычка
\"


шестнадцатеричный код
\xhhhh
от 1до 4 шестнадцатеричных знаков

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

Переменные.

Сообщение Рэндом » 30 июл 2013, 02:38

Данные нужно где-то хранить, к ним нужно получать доступ. Для этого существуют переменные. Переменные - это проименованые ячейки памяти. Доступ к данным происходит по имени переменой. Каждая переменная имеет тип. Объявление переменных начинается с типа, далее идет имя, затем точка с запятой. Точка с запятой имеет особый смысл, она обозначает окончание любого выражения программы.
Примеры:
Код: выделить все
int Num;
double Price;
string text;

С переменными тесно связана одна операция. Операция присваивания. Ее смысл в том чтобы назначить значение переменной. Обозначается эта операция знаком "=". Присваивание можно использовать как к уже созданной переменной, так и при ее создании. Причем к созданной переменной можно использовать присваивание сколько угодно раз, при этом переменной присваивается новое значение, а старое теряется.
Примеры:
Код: выделить все
int A;
A=123;
double F=1.3250;
Аватар пользователя
Рэндом
Специалист MQL
 
Сообщений: 11558
Зарегистрирован: 18 июл 2013, 08:05
Средств на руках: 93.20 Доллар
Группа: Администраторы
Благодарил (а): 1013 раз.
Поблагодарили: 2843 раз.
Каждый заблуждается в меру своих возможностей.

Операции с данными.

Сообщение Рэндом » 31 июл 2013, 02:30

Смысл любой программы в выполнении операций с данными. Например рассмотрим простой индикатор. Он получает входные данные (историю котировок) и преобразовывает в выходные данные (показание индикатора). При этом могут быть использованы различные операции с входными данными. Например нам необходимо вычислить среднюю цену для каждого бара. Для этого мы сначала складываем максимум и минимум бара, а затем делим на два. При этом мы используем тип double, так как он позволяет работать с дробными числами, так как цена выражается дробным числом. И у этого типа есть набор операций. Набор операций для разных типов может быть разным. Хотя для некоторых типов некоторые операции совпадают. Например тип int и double имеют некоторые одинаковые операции. Такие ка сложить, вычесть, делить и т.д.
Далее будут подробно рассмотрены операции для каждого типа.
Аватар пользователя
Рэндом
Специалист MQL
 
Сообщений: 11558
Зарегистрирован: 18 июл 2013, 08:05
Средств на руках: 93.20 Доллар
Группа: Администраторы
Благодарил (а): 1013 раз.
Поблагодарили: 2843 раз.
Каждый заблуждается в меру своих возможностей.


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

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

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

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

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