Основы MQL5 программирования
Разработка технических индикаторов и торговых советников
Александр Вадимович Нечаев

© Александр Вадимович Нечаев, 2021

ISBN 978-5-0053-8758-5

Создано в интеллектуальной издательской системе Ridero

Глава 1. Введение

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

В целом, учебник будет разделен на три части.

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

– Основы языка MQL5 – описание нюансов языка программирования, которых будет достаточно для форматирования базы или фундамента, на основе которых возможно самостоятельное углубление в особенности и возможности MQL5. В главах посвященных языку мы изучим основы, которых будет достаточно, чтобы переключиться на практическую разработку алгоритмов.

– Практика разработки – Что разумеется самое важное. Мы изучим основные особенности разработки технических индикаторов, автоматизированных торговых систем, а также разработаем торгово информационную панель, которая даст понимание по разработки утилит, содержащих графические модули, а также позволит улучшать ваши разработки качественными информационными элементами.

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

Данный труд актуален для разработчиков, переходящих с C++ или других популярных языков, которые решили осваивать данное направление с нуля. Также данная работа актуальна для разработчиков торговых алгоритмов, планирующих осуществлять перенос своих разработок с MQL4 или других более старых и несовершенных языков программирования торговых алгоритмов.

Мы считаем язык MQL5 и терминал MetaTrader5 наиболее качественными и производительными инструментами для профессиональных спекуляций и будем рады предоставить информацию, которая поможет вам освоить данный инструментарий.

С уважением Нечаев А. В.

Глава 2. Основы компилятора

Первый запуск компилятора

Для простоты понимания взаимодействия с компилятором мы разделим его интерфейс на основные блоки. Далее разберем из чего эти блоки состоят. После понимания их состава мы настроим компилятор под наиболее подходящую нам стилистику.

На данном скриншоте приведен стартовый вид компилятора.

СКРИНШОТ 1. ОБЩИЙ ВИД КОМПИЛЯТОРА

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

Блок 1. Навигатор

СКРИНШОТ 2. БЛОК НАВИГАТОРА КОМПИЛЯТОРА

Первоначально мы видим в Навигаторе 11 папок желтого цвета и 1 папку синего цвета. В них хранится весь объем кода, встроенные изображения, там-же мы будем хранить наши подключаемые файлы и многое другое. Давайте разберемся, что находится в этих папках и что может быть нам актуально в рамках данного курса.

Если говорить упрощенно, то папки Experts, Indicators, Scripts – это папки в которых находятся основные файлы соответствующих алгоритмов, основная работа будет вестись в них и в папке Include – в ней хранятся стандартные библиотеки, которые мы будем подключать к нашим продуктам. Остальные папки в рамках данного курса нас не сильно интересуют, но все же я приведу их полный перечень с комментариями к каждой:

– Experts – Папка с данными торговых экспертов, все новые эксперты, которые будут нами создаваться будут храниться в ней.

– Files – первоначально пустая, хранит создаваемые алгоритмами файлы. То есть если вы например создаете текстовые файлы из советника для переноса торговой статистики из текстового файла в Excel – то данная папка будет хранить в себе все первичные текстовые файлы.

– Images – Первоначально пустая. Используется для хранения подключаемых изображений. Наиболее распространенный пример – это изображения значков для кнопок торговых панелей.

– Include – Хранит файлы стандартных библиотек. Стандартные библиотеки позволяют серьезно сэкономить время разработки и их освоение является весьма важным элементом обучения работы с терминалом.

– Indicators – Папка данных технических индикаторов. хранит коды стандартных индикаторов. Также в ней будут располагаться все создаваемые нами торговые индикаторы.

– Logs – файлы записей журналов. При работе терминала при возникновении различных событий производятся записи в Journal или во вкладку Experts, они расположены в терминале, это то окно, в котором вы смотрите данные по открытым позициям или торговую историю вашего счета. В разработке данная папка не участвует, но если у вашего эксперта или индикатора появится ошибка выполнения – то она будет записана во вкладку Experts торгового терминала и будет видна в лог файлах из обсуждаемой в данном пункте папки. Относится к торговому терминалу, в данном курсе не рассматриваются.

– Presets – хранит. set файлы. То есть файлы сохраненных настроек советников. Относится к торговому терминалу, в данном курсе не рассматриваются.

– Profiles – в данной папке хранятся профили. Это перечни открытых символов в окне market watch, а также перечни открытых окон. Относится к торговому терминалу, в данном курсе не рассматриваются.

– Scripts – Хранящиеся в данной папке скрипты это программы, которые совершают одно действие и отключаются. Пример скрипта – программа закрывает все открытые позиции и отключается. В данном курсе мы не будем рассматривать скрипты ввиду простоты и сходства с созданием советников.

– Services – MetaTrader 5 предусматривает возможность подключения дополнительных подписок. Их рассмотрение не является частью данного курса.

– Shared Projects – В данной папке хранятся ваши проекты, которые могут разрабатываться совместно с другими разработчиками. Командная работа над выполнением масштабных проектов сильно упрощена с добавлением возможности работы над совместными проектами. В рамках данного курса мы не будем работать над проектами, поэтому данная папка также не будет использована.

Блок 2. Toolbox

СКРИНШОТ 3. БЛОК TOOLBOX КОМПИЛЯТОРА

– Errors – Вкладка Errors будет отображать результаты каждой компиляции. Какие файлы были объединены, сколько времени заняла их компиляция в. ex5 программу. Также в данной вкладке отображаются ошибки и предупреждения. Если ваш файл содержит ошибку – компиляция не пройдет и файл с ошибкой не будет запущен терминалом. Если у вас есть предупреждение – файл будет запущен, но лучше его не запускать, постольку поскольку предупреждения чаще всего появляются в местах генерирующих некорректный результат расчетов или преобразований.

– Search – Вкладка файлового поиска или поиска на mql5.com. Неактуальна для данного курса.

– Отладка, Профилировщик – Мы не будем рассматривать профилирование и отладку программ в рамках этой книги. Этот функционал следует изучать после завершения данного курса. Функционал этот важен для освоения. Его описание может быть найдено в справочнике к компилятору.

– Articles – Статьи по различным категориям. При клике открываются в браузере.

– Code Base – открытые коды сайта mql5.com, открываются в браузере.

– Public Projects – Список публичных проектов, в которые можно вступить. Подразумеваются проекты для совместной разработки. Могут быть полезны для обучения.

– Journal – Журнал обновлений компилятора, проектов, хранилища.

Блок 3. Toolbar.

СКРИНШОТ 4. TOOLBOX КОМПИЛЯТОРА

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

– Terminal – для открытия торгового терминала в один клик

– Toolbox, MQL Navigator – для возможности скрыть/отобразить часть блоков компилятора

– Compile – компиляции исходного кода в. ex5 программу

Для настройки наполнения Toolbar нажмите на него правой кнопкой мышки и кликните на «Customize», в окне редактирования Toolbar можно добавить или удалить необходимые элементы

Скриншот 5. Настройки вида Toolbar компилятора

Блок 4. Поиск

СКРИНШОТ 6. ПОИСК КОМПИЛЯТОРА

Для поиска просто введите запрос в поле ввода и нажмите на лупу или Enter.

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

СКРИНШОТ 7. ФУНКЦИИ ПОИСКА КОМПИЛЯТОРА

– Поиск в документе – программа будет искать данные запроса только внутри конкретного документа.

– Поиск в файлах – поиск будет произведен по всем файлам в папке.

– Поиск в MQL5 – программа будет осуществлять поиск по выбранным страницам сайта.

– Поиск на GitHub, MSDN, Stack Overflow – это возможность искать необходимую информацию на популярных внешних ресурсах.

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

Результаты вашего запроса будут отображены во вкладке Инструменты, с разделением на вкладки: Документация, Статьи, Библиотека, Форум, GitHub, MSDN, Stack Overflow. В случае поиска в документе, найденные результаты будут выделены в тексте.

Справа от поля ввода для поиска находится кнопка нажав на которую вы выполните переход на сайт MQL5.community.

Блок 5. Главное меню

СКРИНШОТ 8. ГЛАВНОЕ МЕНЮ КОМПИЛЯТОРА

Главное меню расположено сразу под названием программы. В этой строке вы можете найти все основные функции компилятора. Многие из наиболее необходимых элементов главного меню можно найти в Toolbar (его мы рассматривали ранее).

– Файл – под этой кнопкой расположено выпадающее меню для создания нового файла или проекта и тд., а также возможность открыть уже созданную программу.

– Правка – выпадающее меню для редактирования кода программы. Например: копировать, вставить, отменить, повторить и т. д.

– Поиск – кнопка для поиска необходимых запросов внутри одного или нескольких файлов. Я советую использовать поиск который мы уже рассматривали в предыдущем блоке, на мой взгляд он удобнее.

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

– Отладка – в данном курсе нам не понадобится это выпадающее меню, так как мы не будем рассматривать отладку в данном курсе.

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

– Справка – в этой вкладке вы можете найти:

– Вызов справки – это руководство пользователя по MetaEditor.

– Справочник MQL5 – это справочник по языку программирования MQL5.

– Далее в выпадающем списке вы можете выполнить переход на сайт MQL5.community, скачать приложения на ваш смартфон. Работу со справочниками более подробно рассмотрим в разделе 5.1.

– Сервис – В выпадающем списке вы можете открыть торговый терминал или перейти в настройки. Вкладку «настройки» рассмотрим более подробно в разделе 5.2.

5.1. Справочник торгового терминала

В справочнике имеется 2 абсолютно разных справочника:

– Первый открывается через нажатие на вызов справки, в выпадающем меню вкладки справка.

– Второй открывается через нажатие на Справочник MQL5, также в выпадающем меню.

СКРИНШОТ 9. ОТОБРАЖЕНИЕ СПРАВОЧНИКОВ

Верхняя справка (1) – это руководство пользователя по MetaEditor. В этом справочнике вы можете найти много полезной информации о функционале программы MetaEditor.

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

Справочник MQL5 (2) – это справочник по языку программирования MQL5. Данный справочник содержит огромный объем информации разбитый на два блока.

СКРИНШОТ 10. ВКЛАДКИ СПРАВОЧНИКА MQL5

– Вкладка Содержание – это по сути дела обучающий помощник с примерами того, как работают те или иные элементы кода.

– Вкладка Указатель – Этот раздел справочника уже необходим не в обучении, а в ежедневной работе разработчика.

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

СКРИНШОТ 11. УКАЗАТЕЛЬ СПРАВОЧНИКА

Также вы можете искать необходимую информацию в графе поиска во вкладе указатель.

Например, рассмотрим вариант с поиском объекта. Вводим в графе поиска object, нажимаем enter и ниже в списке видим результаты поиска по нашему запросу. Двойным щелчком левой кнопки мыши выбираем ObjectCreate, переходим с правое окно и видим всю информацию о создании объектов. Проматываем ниже до таблицы с вариантами объектов и выбираем к примеру прямоугольник OBJ_RECTANGLE. Далее открывается окно с информацией об объекте прямоугольник и готовый код о том, как создать готовый прямоугольник, пример готовой работы с созданием данного графического объекта.

СКРИНШОТ 12. ПОИСК ЧЕРЕЗ УКАЗАТЕЛЬ СПРАВОЧНИКА

Также, если в справочнике открыта вкладка «Содержание» – данные откроются не только в рамках самой страницы, но и будут развернуты соответствующие разделы содержания, что весьма удобно.

СКРИНШОТ 13. ПОИСК ДАННЫХ ЧЕРЕЗ СОДЕРЖАНИЕ СПРАВОЧНИКА

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

5.2. Стилизация и настройка компилятора

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

Для стилизации настройки внешнего вида переходим Сервис -> Настройки

СКРИНШОТ 14. НАСТРОЙКИ КОМПИЛЯТОРА

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

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

Табуляция – в стандартном варианте одно нажатие на кнопку Tab на вашей клавиатуре это три пробела.

Список имен после – в стандартном варианте 2 символа. Это значит при вводе текста после ввода двух символов, компилятор предложит вам всплывающие подсказки. Очень полезная функция на мой взгляд.

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

Я использую следующую комбинацию:

СКРИНШОТ 15. ПРИМЕР ЦВЕТОВОЙ СХЕМЫ В КОМПИЛЯТОРЕ

– Текст: Текст = 248,248,242. Фон = 40,41,35

– Выбранный текст: Текст = Black. Фон = Gold

– Рамки: Текст =Default. Фон = 100,100,100.

– Отступ выделения: Текст = Default. Фон = 40,41,35.

– Ключевые слова: Текст = 249,36,114. Фон =Default.

– Комментарии: Текст = 116,112,93. Фон = Default.

– Числа: Текст = 172,128,255. Фон = Default.

– Операторы: Текст = 248,248,242. Фон = Default.

– Строки: Текст = 231,219,116. Фон = Default.

– Строки: Текст = 231,219,116. Фон = Default.

– Макросы: Текст = 103,216,239. Фон = Default.

– Функции и точки входа: Текст = 166,226,43. Фон = Default.

– Индикаторы: Текст = OrangeRed. Фон = Default.

– Предопределенные типы и переменные: Текст = 253,150,34. Фон = Default.

– Input переменные: Текст = Teal. Фон = Default.

– Не ASCII символы: Текст = Yellow. Фон = Default.

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

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

– Стилизатор – здесь вы можете выбрать стиль оформления для форматирования кода. Стандартно предложен вариант MetaQuotes, при необходимости вы можете заменить его на любой из предложенных вариантов, например, Mozilla или Java.

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

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

Вставлять пробелы после запятых и точек с запятой – при включении стилизатор добавит пробелы после каждого нажатия запятой или точки с запятой.

Вставлять пробелы вокруг операторов объявления – при включении стилизатор добавит пробелы после некоторых операторов (равенства, сравнения и т.д.)

Это довольно второстепенная вкладка, я обычно не использую это редактирование.

– Компиляторы – MQL5 имеет возможность для подключения сторонних компиляторов, это настраивается в данной вкладе. При подключении других компиляторов вы сможете работать с проектами, выполненными на безе других языков программирования таких как Python, C++ также как программами, выполненными в этом компиляторе. Однако в рамках данного курса мы не будем использовать сторонние компиляторы.

– Отладка – в рамках данного курса мы не будем использовать и изучать отладку профилирования.

– Community – эта вкладка нужна исключительно для хранилища и общих проектов. Если вы не используете общие объекты и хранилище, то эта вкладка для вас не актуальна.

Блок 6. Полезные комбинации кнопок

В данном разделе я пропишу некоторые комбинации кнопок, которые на мой взгляд могут облегчить жизнь разработчику, в целом это то, что я сам использую чаще всего. Полный перечень комбинаций кнопок можно найти в справочнике к компилятору. Кстати крайне рекомендую его к ознакомлению ввиду его высокой информативности. Например, если я использую около 10 комбинаций клавиш клавиатуры в своей разработке, то в справочнике вы найдете перечень в несколько раз больший и возможно там будет полезная для вас информация.

– F1 – самая важная кнопка в работе с компилятором. Вызов справочника. При активной разработке объем взаимодействия со справочником будет всегда большим.

– Клик левой кнопки мышки на номер строки – При клике левой кнопки мыши на номер строки вся строка будет выделена, при необходимости выделить одну или более строк это бывает очень полезно. Чтобы выделить одновременно несколько строк зажмите левую кнопку мышки на первой и протяните вниз до номера последней строки. Компилятор выделит все выбранные строки полностью.

– Ctrl + Клик левой кнопки мышки на номер строки — выделить весь код полностью. В некоторых случаях может понадобиться выделять для переноса весь код, либо комментировать его целиком для определенных действий, эта комбинация в них может быть вам полезна.

– Клик левой кнопки мыши на начало нужного кода, далее зажать Shift + клик левой кнопки мыши на конец нужного кода – выделит данный объем нужного кода.

– Ctrl + / – Добавить "// – -" и сместить код на одну строку вниз. Данный комментарий очень актуален для того, чтобы добавлять комментарии к блокам кода. Я использую их для разделения элементов разделов кода, тогда как сами разделы отделяю строкой кода из «Коробки» либо самой «Коробкой»

– Ctrl +> – Добавить «Коробку» комментария. Она может использоваться, например для разделения больших разделов кода. Она занимает первые строки при создании нового файла.

– Ctrl + F – Найти необходимый текст.

– Ctrl + G – Перейти к строке с соответствующим номером.

– Ctrl + J – Найти нужные сочетания и заменить их на выбранные. Полезно при копировании и добавлении однотипных обработчиков.

– Ctrl + " – Закомментировать текущую строку.

– Ctrl + Z – Отменить последнее действие,

– Ctrl + Y – Вернуть последнее действие, данная комбинация противоположна комбинации "– Ctrl + Z».

Глава 3. Типы данных и переменные

MQL5 – это C-образный язык. Он основывается на языке C++, для изучения MQL5 также актуальны знания по C++. Для разработчиков C++ изучение MQL5 будет даваться проще благодаря весьма похожему синтаксису.

В данной главе мы рассмотрим основы языка MQL5.

3.1 Основные типы данных

Для получения различных свойств, совершения любых действий в программе, используются различные типы данных. Например, данные с плавающей точкой «double, float» используются для получения цены или объема текущей позиции, данные даты и времени datetime могут быть использованы для определения времени открытия или закрытия позиций, а целые значения int, uin… обозначают количество открытых позиций.

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

Перечень основных типов данных, с комментариями:

– Целые – типы данных используемые для получения каких-либо целых значений, например, количество открытых позиций.

– char – занимает меньше всего памяти среди всех целочисленных типов данных, 1 байт. Может иметь положительное и отрицательное значение в пределах от -128 до 127.

– unchar – Также занимает всего 1 байт памяти. Этот тип предназначен только для положительных значений, соответственно минимальное значение, это 0, максимальное это 255.

– short – Этот тип данных занимает 2 байта, может иметь как положительное так и отрицательное значение, в диапазоне от -32 768, до 32 767.

– ushort – Размер равен предыдущему типу, 2 байта. Может иметь только положительно значение от 0 до 65 535.

– Int – наиболее популярный целочисленный тип, имеет размер 4 байта. Диапазон значений от 2 147 483 648 до 2 147 483 647.

– uint – также как и все предыдущие варианты с написанием через U, этот тип может иметь только положительное значение. Размер равен 4 байта, используется для выражения от 0 до 4 294 967 295.

– long – самый объемный тип данных из целочисленных. Имеет размер 8 байт, диапазон значений от -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807.

– ulong – используется для положительных выражений от 0 до 18 446 744 073 709 551 615, размер 8 байт.

– Логические – это тип данных для выражения логических значений.

– bool – единственный тип логических данных. С помощью этого типа данных можно выразить значения ложь false или истина true, использующие 0 или 1 в качестве числового выражения. Это целое число размеров 1 байт.

Пример 1. Варианты значений переменных типа bool

bool var_a = false;
bool var_b = true;
bool var_c = 0;

Обратите внимание! В логических выражения вы можете применять другие целочисленные значения, компилятор не сочтет это ошибкой, в этом случае 0 будет использован как false, а остальные значения как true.

– Литералы – Как говорит нам официальная документация к компилятору «Литеральное представление состоит из трех частей, представляющих числовые значения интенсивности трех основных компонент цвета: красной (red), зеленой (green), синей (blue). Константа начинается с символа C и обрамляется одинарными кавычками. Числовые значения интенсивности компоненты цвета лежат в диапазоне от 0 до 255.»(Ссылка из справочника MQL5/Основы языка/Типы данных/Целые типы/Тип color)

– Строки – Тип данных для обозначения текстовых строк.

– string – текстовые строки в программе. Может быть применен, например, для записи комментария у ордера, для текстовых меток в панелях, для текста в кнопках и т. д.

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

– double / float – рассмотрим одновременно оба типа, та как разница исключительно в размерах этих типов данных. float – занимает 4 байта памяти, double – занимает 8 байт в памяти. Тип double применяется чаще чем float, я советую использовать этот тип.

– Цвет – тип данных для хранения информации о цвете.

– color – тип данных для обозначения цвета любого элемента, занимает 4 байта памяти, обозначается в RGB формате. Могут быть представлены: литерально, целочисленно и с помощью имени web-цветов. Я обычно использую набор web-цветов. Вы можете найти его в справочнике MQL5.

Пример 2. Варианты значений переменных типа color

// – - литералы
C«192,192,192» – Серебряный

//названия цветов
clrSilver – Серебряный

// – - целочисленные представления
c0c0c0 – Серебряный

– Дата и время – тип данных для хранения информации о дате и времени.

– datetime – обозначение даты или времени в программе, начиная с 1 января 1970 года. Занимает 8 байт в памяти. Может использоваться для определения времени открытия или закрытия ордера, экспирации отложенных ордеров (то есть время истечения отложенного ордера, можно создать отложенный ордер с существованием ограниченного времени). Также этот тип данных может использоваться для регулирования свеч, то есть время открытия и закрытия.

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

– enum – тип данных всегда имеет размер 4 байта в отличие от С++, поэтому количество перечислений может быть отграничено объемом переменной. Используется для перечисления вариантов, например, выбор таймфрейма. Для того чтобы что бы выбрать один из вариантов все возможные варианты должны быть перечислены.

Пример 3. Варианты значений переменных типа enum

// – -Пример 1.Перечисление ENUM_TIMEFRAMES хранит в себе список таймсерий торгового терминала.

ENUM_TIMEFRAMES SignalPeriod = PERIOD_D1;

// – -Пример 2. Если тип позиции определен как длинная позиция, закроем ее.
POSITION_TYPE_BUY – это значение enum POSITION_TYPE для функции PositionGetInteger (…);

// – —

(PositionGetInteger (POSITION_TYPE) == POSITION_TYPE_BUY) {

ClosePosition (PositionTicket);

}

3.2 Область видимости и время жизни переменных

Переменные в рамках MQL5 программ могут быть разделены на три типа

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

Пример 4. Пример локальной переменной

void Function ()
{
int Variable = 12345;
double SecondVariable = 1.23;
bool ThirdVariable = true;
}

– Глобальные переменные – это переменные, которые созданы на одном уровне с функциями, то есть на глобальном уровне. Они будут существовать до момента деинициализации приложения.

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

3.3 Операции и выражения

– Выражения – Выражения оканчиваются точкой с запятой. Выражения могут быть длинными или короткими и не зависимо от величины выражения, любое будет оканчиваться точкой с запятой. Одно выражение может занимать несколько строк или наоборот в одной строке может быть несколько выражений.

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

– Арифметические операции – это любые арифметические операции, связанные с умножением или делением, а также сложением или вычитанием.

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

Сумма величин a = b + c;
Вычитание величин a = b – 10;
Умножение величин a = b * 2;
Частное от деления a = b / c;
Остаток от деления minutes = time % 60;

– Инкремент (увеличение на единицу) и декремент (уменьшение на единицу), этот тип операций также можно отнести к арифметическим, однако они заслуживают, чтобы мы рассмотрели этот тип операций отдельно. Это очень популярные операции, они легко заменяются арифметическими или операциями присваивания, однако использование инкремента и декремента обычно удобнее.

Пример 6. Инкременты

//синтаксис операций инкремента и декремента
++a// префиксный инкремент (преинкремент)

a++; // постфиксный инкремент (постинкремент)

– a; // префиксный декремент (предекремент)

a – ; // постфиксный декремент (постдекремент)

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

Пример 7. Присваивание

Присваивание значения a переменной b a = b;

Следующие операции объединяют арифметические или побитовые операции с операцией присваивания:

Пример 8. Арифметика с присваиванием

Увеличение значения переменной a на b a += b;
Уменьшение значения переменной a на b a -= b;
Умножение значения переменной a на b a *= b;
Деление значения переменной a на b a /= b;
Остаток от деления значения переменной a на b a %= b;

– Операции отношения – отношения используются для сравнения двух значений между собой. Этими значениями могут быть числа, переменные, константы, результаты вычислений выражений. В операциях отношений может быть два варианта: true, представлено любым ненулевым значение (ИСТИНА); false, представлено значением 0 (ЛОЖЬ).

Пример 9. Отношение переменных

true, если a равно b a == b;
true, если a не равно b a!= b;
true, если a меньше b a <b;
true, если a больше b a> b;
true, если a меньше или равно b a <= b;
true, если a больше или равно b a> = b;

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

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

— Логическое отрицание – обозначается с помощью восклицательного знака»!».

Пример 10. Логическое отрицание

if (a!= b) DoSomething ();

if (!MQLInfoInteger (MQL_TESTER)) DoSomething ();

– Логическая операция «или» – обозначается с помощью двух вертикальных линий "||». Возвращает true или выполняет последующее действие в случае выполнения одного из указанных условий. То есть необходимо выполнение хотя бы одного из условий.

Пример 11. Логическая операция «или»

if (a == 0 || b == 0) OpenNewPosition ();

– Логическая операция «и» – обозначается с помощью "&&». Используется в случаях, когда несколько условий должны быть соблюдены одновременно. То есть необходимо одновременное выполнение всех поставленных условий.

Пример 12. Логическая операция «и»

if (a == 0 && b == 0) DoSomething ();

Глава 4. Операторы

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

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

Конец ознакомительного фрагмента.

Текст предоставлен ООО «ЛитРес».

Прочитайте эту книгу целиком, купив полную легальную версию на ЛитРес.

Безопасно оплатить книгу можно банковской картой Visa, MasterCard, Maestro, со счета мобильного телефона, с платежного терминала, в салоне МТС или Связной, через PayPal, WebMoney, Яндекс.Деньги, QIWI Кошелек, бонусными картами или другим удобным Вам способом.