- Основы языка
- Константы, перечисления и структуры
- Программы MQL5
- Предопределенные переменные
- Общие функции
- Операции с массивами
- Методы матриц и векторов
- Преобразование данных
- Математические функции
- Строковые функции
- Дата и время
- Информация о счете
- Проверка состояния
- Обработка событий
- Получение рыночной информации
- Экономический календарь
- Доступ к таймсериям и индикаторам
- Пользовательские символы
- Операции с графиками
- Торговые функции
- Управление сигналами
- Сетевые функции
- Глобальные переменные терминала
- Файловые операции
- Пользовательские индикаторы
- Графические объекты
- Технические индикаторы
- Работа с результатами оптимизации
- Работа с событиями
- Работа с OpenCL
- Работа с базами данных
- Работа с DirectX
- Python интеграция
- ONNX модели
- Стандартная библиотека
- Переход с MQL4
- Список функций языка MQL5
- Список констант языка MQL5
Переход с MQL4
Язык MQL5 является развитием своего предшественника – языка MQL4, на котором написано огромное множество индикаторов, скриптов и экспертов. Несмотря на то, что новый язык программирования максимально совместим с языком предыдущего поколения, все же есть ряд отличий между этими языками. И при переносе программ эти отличия нужно знать.
В этом разделе собрана информация, которая призвана облегчить адаптацию своих кодов тем программистам, которые хорошо знают MQL4, к новому языку MQL5.
Прежде всего необходимо отметить:
- Функции start(), init() и deinit() отсутствуют;
- Количество индикаторных буферов не ограничено;
- Загрузка dll происходит сразу после загрузки эксперта (или любой другой mql5-программы);
- Укороченная проверка логических условий;
- При выходе за пределы массива текущее выполнение прекращается (критически - с выводом ошибки);
- Приоритет операций как в С++;
- Работает неявное приведение типов (даже из строки в число);
- Локальные переменные автоматически не инициализируются (кроме строк);
- Обычные локальные массивы уничтожаются автоматически.
Специальные функции init, start и deinit
В языке MQL4 было только три предопределенные функции, которые могли присутствовать в коде индикатора, советника или скрипта (не принимая во внимание включаемые файлы *.mqh и файлы библиотек). Этих функций нет в MQL5, но есть их аналоги. В таблице представлено примерное соответствие функций.
MQL4 |
MQL5 |
---|---|
init |
OnInit |
start |
OnStart |
deinit |
OnDeinit |
Функции OnInit и OnDeinit выполняют ту же роль, что и функции init и deinit в MQL4 – они предназначены для размещения кода, который должен выполняться при инициализации и деинициализации mql5-программ. Вы можете либо просто переименовать эти функции соответствующим образом, либо оставить их как есть, но добавить вызов этих функций в соответствующих местах.
Пример:
void OnInit()
|
Функция start заменяется на OnStart только в скриптах, а для эксперта и индикатора необходимо ее переименовать соответственно в OnTick и OnCalculate. Именно в этих трех функциях необходимо размещать код, который должен выполняться во время работы mql5-программы:
Если основная функция отсутствует в коде индикатора или скрипта, или название этой функции отличается от требуемого, то вызов такой функции не производится. То есть, если в исходном коде скрипта не будет содержаться функции OnStart, то такой код будет скомпилирован как советник.
Если в коде индикатора отсутствует функция OnCalculate, то компиляция такого индикатора невозможна.
Предопределенные переменные
В MQL5 нет таких предопределенных переменных как Ask, Bid, Bars. Переменные Digits и Point немного изменились в написании, как показано в таблице.
MQL4 |
MQL5 |
---|---|
Digits |
_Digits |
Point |
_Point |
|
_LastError |
|
_Period |
|
_Symbol |
|
_StopFlag |
|
_UninitReason |
Доступ к таймсериям
В MQL5 нет предопределенных таймсерий Open[], High[], Low[], Close[], Volume[] и Time[]. Необходимую глубину таймсерии теперь можно задавать самостоятельно с помощью соответствующих функций для доступа к таймсериям.
Советники (эксперты)
Эксперты в MQL5 не обязательно должны иметь функцию-обработчик события поступления нового тика OnTick, как это было в MQL4 (функция start в MQL4 вызывается на выполнение при поступлении нового тика), потому что теперь эксперты в MQL5 могут содержать предопределенные функции-обработчики несколько типов событий:
- OnTick – поступление нового тика;
- OnTimer – событие таймера;
- OnTrade - торговое событие;
- OnChartEvent – события ввода от клавиатуры и мышки, события перемещения графического объекта, событие окончания редактирования текста в поле ввода объекта LabelEdit;
- OnBookEvent – событие изменения состояния стакана цен (Depth of Market).
Пользовательские индикаторы
В MQL4 количество индикаторных буферов ограничено и не может быть более 8. В MQL5 такого ограничения нет, но следует помнить, что каждый индикаторный буфер требует выделения определенного объема оперативной памяти под его размещение в терминале, поэтому злоупотреблять открывшейся новой возможностью все же не следует.
Кроме того, в MQL4 было всего 6 типов отрисовки пользовательского индикатора, в MQL5 теперь 18 стилей рисования. И хотя названия видов отрисовки не изменились, сама идеология графического отображения индикаторов изменилась существенно.
Отличается также и направление индексации в индикаторных буферах. В MQL5 все буфера по умолчанию ведут себя как обычные массивы, то есть элемент с индексом 0 является самым старым в истории, при увеличении индекса мы продвигаемся от самых старых данных к самым последним.
Единственная функция по работе с пользовательскими индикаторами, которая сохранилась из MQL4 – это SetIndexBuffer. Но и ее вызов изменился, теперь требуется указать тип данных, которые будут храниться в массиве, связываемом с индикаторным буфером.
Кроме того, изменились и расширились свойства пользовательских индикаторов, появились функции доступа к таймсериям, поэтому необходимо полностью переосмыслить весь алгоритм расчета.
Графические объекты
Количество графических объектов в MQL5 существенно расширилось. Кроме того, позиционирование графических объектов во времени стало возможным с точностью до секунды на графике любого периода – теперь не производится округление точек привязок графических объектов с точностью до времени открытия бара на текущем ценовом графике.
Для объектов Arrow, Text и Label появилась возможность указывать способ привязки, а для объектов Label, Button, Chart, Bitmap Label и Edit есть возможность задавать угол графика, к которому привязан объект.