Меню

Как конвертировать советник для MT4 в формат MT5 

Как конвертировать советник для MT4 в формат MT5

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

Другими словами, в статье объясняется, как преобразовать код MQL4 в код MQL5 максимально простым способом.

После многих лет застоя в развитии платформы MT5, компания Metaquotes Inc, стоящая за революционной серией MetaTrader, наконец решила сделать MT5 основной платформой для будущего.

Представители компании намекают, что, хотя её сверхпопулярная платформа MetaTrader 4 (MT4) продолжит работать, никаких дальнейших обновлений для MT4 больше не будет.

MetaQuotes Inc. планирует сосредоточить все свои усилия на платформе MetaTrader 5 (MT5).

Это заявление сделал во время Лондонского саммита финансовых магнатов Энтони Папаевагору, глава отдела продаж MetaQuotes.

С момента появления платформы MT5 в 2010 году, её продажи были незначительными по сравнению с MT4 – до недавних пор.

Начиная с июля 2016 года продажи MT5 стабильно опережают продажи MT4.

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

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

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

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

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

Самый большой вопрос, который встает перед трейдерами и программистами в связи с этим запланированным переходом, заключается в следующем: как заставить советники, написанные на языке MQL4 (на котором работает MT4), работать на платформе MT5, учитывая, что MT4 и MT5 не являются совместимыми.

Этот вопрос становится ещё более актуальным в связи со  следующими фактами

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

Ещё есть довольно много времени, в течение которого брокеры, трейдеры, пользователи кодовой базы и программисты должны полностью мигрировать с MT4 на MT5, но самые большие проблемы, связанные с переводом советников MT4 на MT5, нужно решить уже сейчас.

Разве такое возможно? В этой статье будут раскрыты все секреты.

Конвертация советника MT4 для работы в MT5

Технически говоря, невозможно использовать советник MT4 на MT5 в том виде, в котором он существует.

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

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

Сейчас мы продемонстрируем, как конвертировать советник MT4 в формат MT5, используя существующий советник для MT4, Moving Average.mq4.

Мы выбрали этот советник, потому что он предустановлен во всех MT4, и практически все программисты с ним знакомы.

Конвертация советника для MT4 в советник для MT5 на примере “Moving Average.mq4

  • Откройте исходный файл «MQL4\Experts\Moving Average.mq4» в MetaEditor 4, затем выделите и скопируйте весь текст (Ctrl + A, Ctrl + C). Открыть MetaEditor 4 можно нажатием клавиши F4 при запущенном клиентском терминале MT4.
  • Предполагается, что вы уже установили десктопную версию терминала МТ5, скачав её у выбранного брокера. Откройте экземпляр клиента MT5 и запустите MetaEditor 5 для создания нового советника (шаблона), как показано на иллюстрации ниже:

  • Присвойте название шаблону советника, заполнив поле “Name”. Например, вы можете использовать имя “SimpleEA” или просто назвать файл как-нибудь ещё. См. скриншот ниже:

После выполнения этого действия вы получите шаблон для своего будущего советника, который будет основан на коде MT5.

  • Выделите весь текст в шаблоне (Ctrl + A) и удалите его, затем вставьте недавно скопированный текст из MetaTrader 4 (Ctrl + V), как показано на изображении ниже:

Вы получите что-то вроде того, что показано на скриншоте ниже:

MetaTrader 5 использует другие системные методы размещения ордеров (select, send, open, close…), но для того, чтобы показать самый простой способ конвертации из MT4 в MT5, мы будем использовать только одну библиотеку – mq4.mqh.

Эта библиотека позволяет программисту или пользователю работать с ордерами в MQL5 (например, MT5-hedge) так же, как и в MQL4.

Другими словами, библиотека позволяет добиться того, что система Order language system (OLS) становится идентичной MQL4.

Эта библиотека охватывает только системы ордеров. Файлы mq4.mqh от лучших программистов доступны в интернете.

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

  • Убедитесь, что как минимум один экземпляр платформы MT5 открыт. После того, как вы запустите платформу MT5, вы можете открыть File -> Open data folder ” ……\MQL5\Include” и перетащить в неё файл библиотеки (mq4.mqh) в папку.

  • Обновите платформу MT5, закрыв её и снова открыв, затем откройте MetaEditor5. Откройте исходный код советника добавьте строку в исходный код SimpleEA.mq5: #include <mq4.mqh>

  • После добавления строки в исходный код, вы можете скомпилировать обновлённый исходный код SimpleEA.mq5, просто нажав на кнопку “F7” или на кнопку с надписью “Компилировать” на панели инструментов редактора MetaEditor 5:

После компиляции вы получите только 2 ошибки:

Это также подчёркивает ещё одно различие между платформами MT4 и MT5, и это различие заключается в особенностях вызова индикатора

  • В MetaEditor 4 вы просто пишете iMA(symbol,timeframe,”settings ma”, shift), где «shift» – это номер свечи, например, 0, последняя свеча на графике. iMA() – это возвращаемое значение скользящей средней на нулевой свече.
  • В MetaEditor5 нужно написать дескриптор для каждого индикатора или советника, а также функции для получения значений от советника или индикатора с помощью этого дескриптора.

Изменение исходного кода MT4 для получения работоспособной версии MT5. Пошаговое руководство

В этом кратком разделе объясняется, что вам нужно добавить в исходный код для MT4, чтобы он мог работать в MT5.

Эти изменения касаются только индикатора. Другими словами, изменить необходимо только одну строку в исходном коде.

Найдите строку:

ma=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0);

и замените на

int OnInit()

{

MAHandle = iMA(NULL, 0, MovingPeriod, MovingShift, MODE_SMA, PRICE_CLOSE);

if(MAHandle == INVALID_HANDLE)

{

Print(“Error creating MA indicator”).

Шаги по внедрению этих изменений описаны ниже

  • Для начала вам нужно создать переменную Integer (int) для дескриптора индикатора MA и присвоить ей значение INVALID_HANDLE. Это показано ниже:

int MAHandle = INVALID_HANDLE;

Советники и индикаторы имеют раздел OnInit() для инициализации во время работы. Она выглядит так:

int OnInit()

{

// ваш код

return(INIT_SUCCEEDED);

}

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

На веб-сайте сообщества MQL5 также есть документация, в которой содержится много полезной информации. Найти её можно в файле справки. Этот документ доступен по следующей ссылке:

https://www.mql5.com/en/docs/basis/function/events

  • Следующий шаг – добавить этот код в текст (то есть исходный код) нашего советника, если этот раздел не существует (нажмите Alt + M из MetaEditor 5).

В списке функций мы видим 5 пунктов. Однако по умолчанию функция OnInit() не существует, поэтому мы должны создать её сами, написав код вручную. Это показано на иллюстрации ниже.

Можете нажать (Alt + M) на клавиатуре компьютера, чтобы функция OnInit() была добавлена в исходный код.

  • В разделе OnInit() можно написать следующий код:

MAHandle = iMA(NULL, 0, MovingPeriod, MovingShift, MODE_SMA, PRICE_CLOSE);

if(MAHandle == INVALID_HANDLE)

{

Print(“Error creating MA indicator”);

return (INIT_FAILED);

}

Обычно в MetaEditor MT4 код пишется следующим образом:

Однако для MT5 код пишется аналогично дескриптору индикатора. Поэтому в MT5 код пишется следующим образом:

  • Следующим шагом вам нужно будет написать функцию для получения значения от скользящей средней с помощью дескриптора, как показано на изображении ниже:

Ранее мы упоминали, что при использовании MetaEditor5 необходимо создать функцию получения значения для индикатора или советника.

Эта функция содержит строку с названием CopyBuffer(). CopyBuffer копирует данные из индикатора в массив.

CopyBuffer получает данные в нужном количестве из специализированного буфера определённого индикатора.

Более подробную информацию о CopyBuffer можно получить, прочитав документ, доступный по этой ссылке:

https://www.mql5.com/en/docs/series/copybuffer

Код выглядит следующим образом:

CopyBuffer( indicator_handle

[in] Дескриптор индикатора, возвращаемый соответствующей функцией.

buffer_num

[in] Номер буфера индикатора.

start_pos

[in] Расположение первого копируемого элемента.

count

[in] Количество данных для копирования.

buffer[]

[out] Массив двойного типа.

)

MA имеет 1 буфер с номером «0«. Вам нужно скопировать из MA одно значение.

В редакторе MetaEditor MT4 это записано следующим образом:

Последний «0» соответствует значению MA на нулевой свече (последняя свеча на графике).

В редакторе MetaEditor MT5 это записано следующим образом:

Скопируйте одно значение из позиции индекса в массив MA.

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

После этого вы будете перемещены в место, где находится эта ошибка в исходном коде MT5 вашего советника. Код ошибки в этом примере находится в строке 114. См. изображение ниже:

Строка в исходном коде, которая содержит эту ошибку, удаляется и заменяется строкой, содержащей код MaGet(0).

Это показано на следующем изображении. Обратите внимание, что код ошибки подчеркнут красным, а код MaGet(0), который используется для его замены, показан внизу.

После того, как вы замените код ошибки на строку MaGet(0), нужно будет скомпилировать код ещё раз, нажав клавишу F7. После перекомпиляции исходного кода мы видим, что осталась только одна ошибка:

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

Дважды щёлкните по строке с кодом ошибки (140 в этом примере), закомментируйте её и замените, как показано на следующей иллюстрации.

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

Вот строка, которая используется для замены в этом случае:

if (Open[1]>MAGet(0) && Close[1]<MAGet(0).

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

Таким образом, вы ещё раз компилируете исходный код, нажав клавишу F7 на клавиатуре компьютера. Как видите, все ошибки были устранены. Ноль ошибок в коде, как показано на изображении ниже:

На следующем скриншоте показана разница между исходными кодами вызовов индикаторов MT4 и MT5, а также процесс конвертации из MT4 в MT5.

Теперь, когда мы закончили процесс преобразования нашего советника от MT4 в версию, которую можно использовать на MT5, можно запустить его на нашей платформе MT5, как показано ниже:

Заключение

Без использования библиотеки и шаблона, как показано выше, запустить советник от MT4 на MT5 было бы невозможно.

Скорее, программисту пришлось бы писать всю программу с нуля на интерфейсе программирования MetaEditor 5.

По мере роста количества пользователей МТ5 в 2017 году и далее, скорее всего, будут разработаны новые способы конвертации исходного кода индикаторов от МТ4 для использования на платформе МТ5.

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

Возможно вам также будет интересно прочитать статьи

Как исправить раздражающие проблемы MT4, связанные с подключением (5 способов)

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

Как запустить несколько советников (EA) на одном терминале MT4

Рекомендуемые брокеры:

Брокер Регуляция Открыть счет
CySEC ICF IFSC ЦРФИНОткрыть счет!
FCAОткрыть счет!
SVGFSAОткрыть счет!

Оставить комментарий