Посчитав себя уже достаточно опытным программистом в среде MQL4, решил, значит я, друзья, замахнуться на MQL5. Естественно, самой лучшей практикой является выполнение конкретной задачи.
Объектом моего внимания стал индикатор дивергенции MACD, имеющий наибольшее количество скачиваний и моих бесплатных товаров на маркете.
Сначала, естественно — установка платформы Meta Trader 5. Здесь ничего нового. Процесс абсолютно аналогичен MT4. В терминале внешне все похоже, в редакторе MetaEditor — все так же. Увидел разницу в том, что тестер стратегий вынесен из терминала. Удобно это или нет — пока не знаю, дальше посмотрим. Кстати, для того, чтобы иметь возможноть прогона индикатора или советника в тестере, нужно залогиниться в системе — вперед на регистрацию демо-счета.
Далее переходим к мета-редактору. В отличии от младшей версии, здесь есть возможность создать не пустой шаблон (в моем случае индикатора), а имеется мастер для подготовки индивидуального шаблона. Открываем меню Файл->Создать, выбираем «Пользовательский индикатор» и жмем на кнопку «Далее».
В следующем окне вводим параметры. Обязательно здесь ввести имя будущего индикатора. Остальное можно добавить после. Но как-кому. Если параметры уже известны, то удобно их ввести сейчас.
В следующем окне выбираем вид вид функции OnCalculate. Имеются 2 варианта с малым и расширенным набором параметров. Кстати, функция start() для пересчета индикатора в MQL5 не доступна. Так же можно выбрать обрабочкиков событий OnTimer и OnChartEvent — мастер добавит эти функции в шаблон.
Последнее окно позволяет выбрать где отображать индикатор — в окне графика или в дополнительном. Кстати, обидно, что нельзя выводить в оба — было бы интересно. Можно задать минимум/максимум и буферы индикатора.
После завершения получим заточенный под ваши требования шаблон — исходный файл будущей программы. Дальше коротко о самой программе и различиях ее с MQL4.
Первое, что бросается в глаза — неограниченное количество буферов и расширенный набор типов рисования. Буферы могут иметь 3 типа: данные индикатора, цветовые данные (можно задавать цвета для каждой точки) и расчетные данные. Общее количество буферов может отличаться от тех, что отображаются. Кстати, после, в окне настроек они будут проименованы, а не только указаны по индексу, как в MQL4.
Далее — использование индикаторов. В MQL4 каждая точка каждой серии индикатора высчитывается индивидуально. В MQL5 индикатор создается на старте программы, просчитывая инициализированные данные, после — обновляются только данные того требующие. Это заметное снижение нагрузки на каждом цикле программы. Но имеются и тонкости. На момент запуска цикла пересчета индикатор может быть еще не полностью просчитан — необходимо это контролировать. Данные из индикатора выбираются функцией CopyBuffer, которая их «переворачивает». Если в индикаторном буфере индекс ноль будет представлять значение на текущем цикле, то после выборки данных во внешний буфер — наоборот.
Если вы привыкли использовать буфер в формате тайм-серии, то необходима сменить в нем направление функцией ArraySetAsSeries. Это же самое касается буферов вашего индикатора и массивов high, low, time и т.д., передаваемых в параметры функции OnCalculate. Нужно менять привычные методы обработки массивов или переворачивать их указанной функцией.
Ну вобщем-то и все, в том, что касается различия MQL4 и MQL5 в контексте разработки индикатора. Есть некоторое различие в параметрах функции работы с графическими объектами, но это легко покажет встроенный файл помощи.
Кардинальное отличие между MQL4 и MQL5 имеется в области ведения торговых операций, но это совсем другая история.