Новые сообщения · Участники · Правила форума · Поиск · RSS · Вход · Регистрация ·

Страница 1 из 11
Форум трейдеров » Скрипты Советники Индикаторы для Metatrader4/Metatrader5 » MT 4 MQL программирование, помощь. » Новый язык программирования MQL5 (Основные характеристики и отличия языка от MQL4)
Новый язык программирования MQL5

expforexДата: Понедельник, 10.08.2009, 11:36 | Сообщение # 1
Главный Администартор
Группа: Администраторы
Сообщений: 9079
Награды: 29
Статус: Offline


[Бонусы за сообщения ]

Переход с 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()

{

//--- вызовем функцию при инициализации

init();

}

void OnDeinit()

{

//--- вызовем функцию при деинициализации

deinit();

//---

}

Функция start заменяется на OnStart только в скриптах, а для эксперта и индикатора необходимо ее переименовать соответственно в OnTick и OnCalculate. Именно в этих трех функциях необходимо размещать код, который должен выполняться во время работы mql5-программы:

mql5-программа
основная функция

скрипт
OnStart

индикатор
OnCalculate

эксперт
OnTick

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

Если в коде индикатора отсутствует функция OnCalcultae, то компиляция такого индикатора невозможна.

Предопределенные переменные

В 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 – событие таймера;

· OnChartEvent – события ввода от клавиатуры и мышки, события перемещения графического объекта, событие окончания редактирования текста в поле ввода объекта LabelEdit;

· OnBookEvent – событие изменения состояния стакана цен (Depth of Market).

Пользовательские индикаторы

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

Кроме того, в MQL4 было всего 6 типов отрисовки пользовательского индикатора, в MQL5 теперь 18 стилей рисования. И хотя названия видов отрисовки не изменились, сама идеология графического отображения индикаторов изменилась существенно.

Единственная функция по работе с пользовательскими индикаторами, которая сохранилась из MQL4 – это SetIndexBuffer. Но и ее вызов изменился, теперь требуется указать тип данных, которые будут храниться в массиве, связываемом с индикаторным буфером.

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

Графические объекты

Количество графических объектов в MQL5 существенно расширилось, но при этом появилось одно ограничение – нельзя использовать функции по работе с графическими объектами в пользовательских индикаторах.

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

Для объектов Arrow, Text и Label появилась возможность указывать способ привязки, а для объектов Label, Button, Chart, Bitmap Label и Edit есть возможность задавать угол графика, к которому привязан объект.



Программирование на заказ || Наши Разработки

 
СообщениеПереход с 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()

{

//--- вызовем функцию при инициализации

init();

}

void OnDeinit()

{

//--- вызовем функцию при деинициализации

deinit();

//---

}

Функция start заменяется на OnStart только в скриптах, а для эксперта и индикатора необходимо ее переименовать соответственно в OnTick и OnCalculate. Именно в этих трех функциях необходимо размещать код, который должен выполняться во время работы mql5-программы:

mql5-программа
основная функция

скрипт
OnStart

индикатор
OnCalculate

эксперт
OnTick

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

Если в коде индикатора отсутствует функция OnCalcultae, то компиляция такого индикатора невозможна.

Предопределенные переменные

В 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 – событие таймера;

· OnChartEvent – события ввода от клавиатуры и мышки, события перемещения графического объекта, событие окончания редактирования текста в поле ввода объекта LabelEdit;

· OnBookEvent – событие изменения состояния стакана цен (Depth of Market).

Пользовательские индикаторы

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

Кроме того, в MQL4 было всего 6 типов отрисовки пользовательского индикатора, в MQL5 теперь 18 стилей рисования. И хотя названия видов отрисовки не изменились, сама идеология графического отображения индикаторов изменилась существенно.

Единственная функция по работе с пользовательскими индикаторами, которая сохранилась из MQL4 – это SetIndexBuffer. Но и ее вызов изменился, теперь требуется указать тип данных, которые будут храниться в массиве, связываемом с индикаторным буфером.

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

Графические объекты

Количество графических объектов в MQL5 существенно расширилось, но при этом появилось одно ограничение – нельзя использовать функции по работе с графическими объектами в пользовательских индикаторах.

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

Для объектов Arrow, Text и Label появилась возможность указывать способ привязки, а для объектов Label, Button, Chart, Bitmap Label и Edit есть возможность задавать угол графика, к которому привязан объект.


Автор - expforex
Дата добавления - 10.08.2009 в 11:36
Форум трейдеров » Скрипты Советники Индикаторы для Metatrader4/Metatrader5 » MT 4 MQL программирование, помощь. » Новый язык программирования MQL5 (Основные характеристики и отличия языка от MQL4)
Страница 1 из 11
Поиск:


WebMoney Яндекс цитирования.