MetaTrader 4 TradingTerminal build 600 с обновленным языком MQL4 и Маркетом приложений

Что нового в MetaTrader 4?

3 февраля 2014

За последние 7 месяцев с момента выхода последнего публичного билда 509 была произведена огромная работа по улучшению клиентского терминала MetaTrader 4. Самым важным изменениям подвергся язык программирования торговых стратегий MQL4 - увеличилась скорость выполнения программ, а сам язык стал максимально близок к MQL5. Это значит, что теперь разработчикам торговых роботов на MQL4 также стали доступны все преимущества ООП: классы и структуры, наследование, Стандартная библиотека, ресурсы и многое-многое другое.

Новый редактор MetaEditor предоставит такие удобства, как отладка, профилировка, персональное хранилище, автоподстановка имен функций, сниппеты, вставка ресурсов и интеллектуальное управление кодом.

В новом терминале MetaTrader 4 появился Маркет - рынок защищенных приложений для терминала MetaTrader 4. Теперь любой разработчик может выставить на продажу на единой площадке собственные разработки для торговли и анализа рынка, а трейдеры могут прямо из терминала купить понравившийся им продукт. Все скачанные из Маркета EX4 файлы приложений имеют такую же высокую степень защиты, как и в MQL5. Разработчики MQL4 программ могут самостоятельно устанавливать количество активаций и цену на свои продукты, и не думать больше о технологических вопросах продаж - все это возьмет на себя MetaTrader 4 Маркет.

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

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


Торговый терминал

  1. Язык программирования торговых стратегий MQL4 существенно доработан и приближен по функционалу к языку MQL5. Добавлены классы и структуры, расширен до уровня С++ синтаксис языка, что позволило реализовать все преимущества объектно-ориентированного программирования. Это означает, что теперь писать торговых роботов и технические индикаторы стало гораздо проще и быстрее, а экспертописатели получили новые возможности в единой среде разработке MetaEditor - отладку, профилировку, автодополнение и т.д. Более подробно о новых возможностях можно прочитать в отдельном разделе MetaEditor статьи на сайте MQL5.




    Увеличена скорость работы MQL4-программ, встроена поддержка DLL и Visual Studio, появился доступ к MQL5 Storage и многое-многое другое.

  2. Добавлена вкладка "Маркет" для покупки и скачивания платных и бесплатных экспертов, сигналов и скриптов из MetaTrader 4 Маркет. Теперь любой разработчик MQL4-программ может стать Продавцом и предложить свои продукты миллионам трейдеров, торгующих через MetaTrader 4.




    Скачать демоверсию или купить полнофункциональное платное приложение на MQL4 из MetaTrader 4 Маркет можно прямо из терминала. Каждая покупка надежно защищена, разрешает от пяти активаций на разных компьютерах и не имеет никаких ограничений по времени работы, типу счета или брокеру. Любой платный индикатор или советник можно запустить перед покупкой в тестере стратегий MetaTrader 4 в визуальном режиме, чтобы получить представление о товаре.

  3. Начиная с 600 билда MetaTrader 4, изменилась структура, а также место хранения файлов клиентского терминала. Теперь MQL4-программы разнесены по отдельным каталогам в зависимости от типа программы (эксперты, индикаторы, скрипты). Данные терминала в большинстве случаев теперь хранятся в специальном каталоге данных отдельно от места установки терминала. В данной статье мы подробно опишем, каким образом осуществляется перенос данных, а также причины введения такой системы хранения.


    Почему была введена новая система хранения данных

    Система Microsoft Windows XP, выпущенная 13 лет назад, разрешает программам записывать собственные данные по месту установки, даже если она была произведена в системную папку Program Files. Для записи в любую папку пользователю достаточно иметь администраторские права на компьютере.

    При работе в 64-битных системах для 32 и 64-битных приложений предусмотрены отдельные каталоги установки: Program Files и Program Files (x86). Особенности работы, описанные в статье, относятся к обоим каталогам.

    Начиная с Windows Vista, компания Microsoft ввела ограничение на запись в каталог Program Files. Так, при включенной системе User Account Control (UAC) программам запрещается хранить собственные данные в каталоге Program Files. Все данные должны сохраняться в отдельном каталоге пользователя. Такое ограничение было введено с целью защиты от вредоносных программ, а также для того чтобы работа с программой под одной учетной записью никак не могла изменить или испортить данные этой же программы, необходимые для другой учетной записи. В дальнейшем требования безопасности в операционных системах Microsoft только усиливались, в частности, начиная с Windows 8, система UAC не отключается никогда, даже если в ее настройках установлена опция "Никогда не уведомлять".

    Для обеспечения совместимости старых программ при использовании UAC Microsoft ввела систему виртуализации. Если программа пытается сохранить свои данные в каталог Program Files, то фактически (физически) эти данные сохраняются в отдельном каталоге вида C:\Users\<имя-пользователя>\AppData\Local\VirtualStore\Program Files. При этом проводник Windows показывает файлы так, как будто они сохраняются в каталоге установки. Компания Microsoft заявляет, что данный режим предусмотрен только для совместимости и в последующем может быть убран.

    Для соответствия рекомендациям Microsoft, начиная с 600 билда, в клиентском терминале MetaTrader 4 изменена структура хранения данных. Терминал теперь также будет сохранять свои данные в каталоге пользователя.


    Каталог данных пользователя

    В новой версии все данные конкретного пользователя, работающего с определенной копией терминала MetaTrader 4, хранятся в специальном месте, называемом каталог данных терминала. Находится этот каталог на системном диске (диске, на котором установлена операционная система Windows) по пути следующего вида

    C:\Users\Имя_учетной_записи\AppData\Roaming\MetaQuotes\Terminal\Instance_id
    гдe:
    • С: - имя системного диска;
    • Имя_учетной_записи - учетная запись пользователя, под которой он работает в Windows;
    • Instance_id - уникальное имя папки, в которой хранятся данные этого пользователя для работы с конкретной копией терминала MetaTrader 4. Уникальное имя состоит из 16 символов. Имя генерируется на основе пути к каталогу установки терминала, поскольку путь к каталогу установки терминала в явном виде не может быть использован в качестве имени папки. Достаточно большая длина уникального имени обусловлена тем, что на одном компьютере может быть установлено множество копий терминала.

    В меню терминала "Файл" добавлена команда "Открыть каталог данных" для поиска и открытия каталога данных.


    В корне каждого каталога данных терминала также находится файл origin.txt, который содержит путь к папке установки терминала, к которой относятся эти данные. Это позволяет сопоставить каждый каталог данных терминала с конкретным каталогом установки терминала, например, если у пользователя установлено несколько копий терминала MetaTrader 4. Такой способ работы с терминалом, когда каталог данных находится отдельно от каталога установки, является основным режимом.

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

    2014.02.10 12:48:28.477 Data Folder: C:\Users\JohnSmith\AppData\Roaming\MetaQuotes\Terminal\9F86138A4E27C7218E9EC98A5F8D8CA1


    Перенос файлов MQL4-программ при обновлении на MetaTrader 4 build 600 и выше

    При запуске после обновления терминал проверяет, и если его нет, то создает каталог данных. Если этот каталог отличается от каталога установки, в него производится копирование штатных данных терминала - стандартные MQL4-программы, исторические данных, конфигурационные файлы, шаблоны и т.д. В каталоге установки остаются только те файлы, которые терминал не изменяет в процессе работы (исполняемые файлы, компилятор mql.dll, звуковые файлы и т.д.). Каталог данных терминала будет отличаться от каталога установки в следующих случаях:

    • Если включена система UAC. Исключением является случай, когда терминал установлен на переносном устройстве (внешний жесткий диск, usb флеш-накопитель и т.д.).
    • Если у текущего пользователя компьютера ограничены права на запись в каталог установки.
    • Если пользователь работает через удаленное соединение (RDP).

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

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

    Исходная папка в каталоге установки
    Содержимое Конечная папка в каталоге данных терминала
    \experts
    Эксперты (торговые роботы)
    Примечание: переносятся только файлы из корневого каталога \experts. Никакие подкаталоги не переносятся, поскольку невозможно достоверно определить их содержимое.
    \MQL4\Experts
    \experts\indicatorsПользовательские индикаторы
    \MQL4\Indicators
    \experts\scripts
    Скрипты (программы на MQL4 для однократного выполнения на графике)\MQL4\Scripts
    experts\includeВключаемые в другие программы файлы исходного кода с расширением MQH и MQ4\MQL4\Include
    experts\librariesБиблиотеки в виде исходного кода MQ4 и скомпилированные из них исполняемые файлы EX4 для динамического вызова собранных в них функций другими MQL4-программами\MQL4\Libraries
    experts\filesСпециальная "файловая песочница", только в пределах этой папки MQL4-программам разрешается выполнять файловые операции\MQL4\Files
    experts\logs
    Файлы журналов работы MQL4-программ
    \MQL4\Logs
    experts\presets
    Файлы наборов настроек для MQL4-программ
    \MQL4\Presets
    experts\images
    Файлы картинок для использования в ресурсах\MQL4\Images


    Далее проверяется, хранил ли клиентский терминал данные в каталоге виртуализации (виртуальное хранилище операционной системы, описанное выше). В большинстве случаев, когда терминал установлен в каталоге Program Files и операционной системой является Windows Vista и выше, данные терминала хранятся именно в этом каталоге. Если данные обнаружены, осуществляется их копирование по вышеописанной схеме.

    При миграции осуществляется копирование файлов, а не перенос. Скопированные файлы не удаляются из исходных каталогов.

    При копировании в процессе миграции в журнал терминала выводятся записи о том, откуда были скопированы файлы и куда. Для просмотра журналов целиком откройте вкладку "Журнал" в окне "Терминал" и выполните команду "Открыть" в контекстном меню. Будет открыт каталог, в котором хранятся файлы журнала терминала.

    Если процесс миграции успешно выполнен для данной копии терминала, то при последующих обновлениях терминала MetaTrader 4 миграция уже не производится. Если каталог данных отличается от каталога установки и при миграции были перенесены не только стандартные файлы, но и пользовательские MQL4-программы, показывается информационный диалог:



    Режим Portable

    Для работы терминала на съемных носителях, в несистемных каталогах, а также для работы в Windows XP в терминале предусмотрен режим запуска Portable. При запуске в данном режиме терминал будет пытаться сохранять свои данные в каталоге установки. В то же время запуск в режиме Portable не гарантирует того, что операционная система разрешит хранение данных в каталоге установки (например, если терминал установлен в каталог Program Files и включена система UAC).

    Для возможности работы в режиме Portable необходимо соблюдение следующих требований:

    Каталог установки
    Операционная система
    Требования
    Program Files или другой системный каталог (например, Windows)
    Windows XP
    Наличие прав на запись в каталог установки
    Другой несистемный каталог
    Windows XP
    Наличие прав на запись в каталог установки
    Внешний жесткий диск, usb флеш-накопитель и т.д.Windows XPТерминал всегда будет запускаться в режиме Portable
    Program Files или другой системный каталог (например, Windows)Windows Vista\Windows 7
    Запуск терминала от имени администратора и отключенная система UAC
    Другой несистемный каталогWindows Vista\Windows 7
    Наличие прав на запись в каталог установки
    Внешний жесткий диск, usb флеш-накопитель и т.д.Windows Vista\Windows 7Терминал всегда будет запускаться в режиме Portable
    Program Files или другой системный каталог (например, Windows)
    Windows 8 и выше
    Запуск в режиме Portable невозможен, поскольку система UAC не отключается
    Другой несистемный каталогWindows 8 и выше
    Наличие прав на запись в каталог установки
    Внешний жесткий диск, usb флеш-накопитель и т.д.Windows 8 и вышеТерминал всегда будет запускаться в режиме Portable


    • Если вы пользуетесь системой Windows Vista или выше и терминал установлен в Program Files, использование режима Portable не рекомендуется. Данный режим фактически предусмотрен для работы терминала на съемных носителях, а также для работы в Windows XP.
    • Если вы осуществили обновление терминала и все данные были скопированы в отдельный каталог данных пользователя, не рекомендуется пытаться перейти на использование режима Portable.
    • Для использования режима Portable после переноса данных в каталоге данных пользователя необходимо самостоятельно скопировать данные в каталог установки. Запуск терминала в режиме Portable не выполняет копирование данных из каталога данных в каталог установки.

    Чтобы запустить терминал в режиме Portable, необходимо использовать ключ "/portable". Для удобства на Рабочем столе можно создать дополнительный ярлык запуска терминала с нужным именем и добавить ключ прямо в ярлык:



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

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

    В связи с переходом на новую модель обработки запросов была убрана возможность отмены еще не принятых сервером торговых заявок (кнопка "Отмена" на диалоге состояния торгового запроса).

  5. Изменился формат хранения исторических данных RateInfo. В старой версии состав структуры RateInfo был представлен таким образом:
    struct RateInfo
      {
       unsigned int      ctm;  // дата открытия бара
       double            open; // цена открытия
       double            low;  // минимальная цена бара
       double            high; // максимальная цена бара
       double            close;// цена закрытия
       double            vol;  // объем
      };
    

    В новом формате в структура RateInfo добавлены поля для хранения спреда и торгового объема:

    //--- Стандартное представление котировки в новой версии терминала
    struct RateInfo
      {
       INT64             ctm;               // дата и время открытия
       double            open;              // цена открытия (абсолютное значение)
       double            high;              // минимальная цена бара
       double            low;               // максимальная цена бара
       double            close;             // цена закрытия
       UINT64            vol;               // тиковый объём
       INT32             spread;            // спред
       UINT64            real;              // торговый объём
      };

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

    Старые EX4 программы и DLL, основанные на старом формате RateInfo, работать в новом терминале не будут. Требуется приведение к новому формату.
  6. Добавлен глобальный поиск по клиентскому терминалу MetaTrader 4 и MQL4.com. Поиск в клиентском терминале позволяет быстро находить необходимую информацию во всех разделах клиентского терминала, в Code Base, а также на сайтах MQL4.com и MQL5.com в целом.

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




    Контекстное меню вкладки результатов поиска содержит дополнительные команды в зависимости от типа результата:




  7. Добавлена команда быстрого выставления заказа на разработку MQL4-программ в разделе "Работа". Теперь трейдер может не только скачать любой код из бесплатной библиотеки, но и найти исполнителя для создания нужного индикатора или робота по собственному алгоритму. Процедура выполнения заказа описана в статье "Как заказать торгового робота на MQL5 и MQL4" и позволяет защитить интересы обеих сторон заказа - как исполнителя, так и заказчика.






  8. Добавлена возможность отсылки Push-уведомлений о торговых транзакциях, происходящих на клиентском счете: добавление, изменение и удаление ордеров, активация отложенных ордеров и SL-TP, попадание счета под Margin Call и Stop Out. Push-уведомления приходят на мобильные терминалы, установленные на устройства под управлением iOS и Android, не зависят от номера мобильного телефона и доставляются при наличии интернет-подключения. Подробности можно прочитать в статье "MetaQuotes ID в мобильном терминале MetaTrader".






  9. Добавлены отображение алертов на чарте и управление ими с помощью drag'n'drop. Также появилась возможность установить время истечения алерта.




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

  10. В окне открытия демо-счетов добавлена возможность поиска сервера по имени компании.
    Достаточно указать имя компании (или фрагмент имени сервера), и терминал автоматически добавит в список все сервера, принадлежащие данной компании (сервера, имена которых включают в себя указанную строку):




  11. В "Навигатор" добавлено отображение вложенных каталогов и иерархии экспертов, скриптов и индикаторов.




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



  13. Повышена точность отображения времени последней котировки в окне обзора рынка и всплывающем окне обзора рынка - время последней котировки показывается с точностью до секунд (вместо точности до минут ранее).




  14. Добавлен автоматический запрос перезапуска терминала после смены языка интерфейса. Для того чтобы изменение языка интерфейса вступило в силу, требуется перезагрузка клиентского терминала. Ранее пользователю необходимо было самостоятельно закрывать и запускать терминал. Теперь после смены языка интерфейса сразу предлагается перезапустить терминал - нажатием одной кнопки он будет закрыт и запущен вновь.




  15. Исправлен показ всплывающих подсказок у торговых уровней при наличии на чарте индикаторов, использующих отдельное подокно. При наведении курсора мыши на уровень стоп-лосс или тейк-профит на графике показывается подсказка о сумме прибыли/убытка в пунктах и деньгах при срабатывании данного уровня. Ранее при наличии на графике индикатора, работающего в отдельном подокне (например, классический MACD), данная подсказка могла не показываться.

  16. Добавлена система автоматического обновления файлов встроенного справочного руководства клиентского терминала, аналогичная реализованной в MetaTrader 5. Теперь файлы помощи не входят в установочный пакет терминала и пакет обновления LiveUpdate, что сокращает объем трафика. Закачка справочного руководства происходит при первом обращении к нему. В дальнейшем при вызове справки происходит проверка наличия ее новых версий. Если новая версия доступна, пользователю будет предложено обновление:




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

  17. Добавлен диалог быстрой регистрации на MQL5.community в случае отсутствия аккаунта. Теперь создать аккаунт на MQL5.community можно, не покидая терминал.





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

    Аккаунт в сообществе MQL5.community позволяет трейдеру пользоваться мощными дополнительными сервисами:
    • MetaTrader 4 AppStore - прямо из терминала можно приобретать, а также скачивать бесплатно приложения для MetaTrader 4. Магазин MetaTrader 4 AppStore предлагает сотни разнообразных приложений, ассортимент которых постоянно расширяется.
    • Сервис Сигналы - пользователь может подписаться на торговые сигналы профессиональных трейдеров и зарабатывать. Торговые операции со счета провайдера сигналов будут автоматически копироваться на счет трейдера. Сервис также позволяет продавать собственные торговые сигналы. Подключение торгового счета к системе мониторинга занимает несколько кликов.

  18. Торговые счета в окне "Навигатор" теперь отображаются гораздо нагляднее:
    • Счета сгруппированы по торговым серверам, на которых они открыты.
    • Если счет подписан на торговые сигналы, рядом с ним показывается пиктограмма с названием сигнала. При наведении курсора мыши на сигнал показывается срок действия подписки на него.




  19. Если текущий торговый счет подписан на сигнал, на вкладке "Торговля" окна "Инструменты" показывается соответствующая пиктограмма. При наведении курсора мыши на пиктограмму показывается информация о сигнале. Возникали ситуации, когда трейдеры забывали о том, что их счет подписан на сигнал. Например, когда подписка осуществлялась для проверки работы сервиса. Показ пиктограммы подписки делает работу с сигналами в терминале более наглядной и удобной.




  20. Добавлены новые графические объекты: "Button", "Bitmap","Bitmap Label", "Rectangle Label". Данные объекты не могут быть установлены на чарты вручную и предназначены для организации собственного пользовательского интерфейса для MQL5-программ: экспертов, скриптов и индикаторов.
  21. Оптимизирована работа с сервисами MQL5.community при медленном Интернет-соединении. Теперь работа с Торговыми сигналами, библиотекой исходных кодов Code Base и версионным онлайн-хранилищем MQL5 Storage будет более комфортной даже при низкой скорости Интернета.
  22. Повышена точность представления времени в Журнале клиентского терминала - добавлен показ миллисекунд.
  23. Исправлено One Click-закрытиe позиций в списке открытых ордеров и позиций (по нажатию на крестик) - теперь в режиме Instant Execution используется значение приемлемого отклонения цены из настроек торговли.
  24. Добавлена возможность копирования в буфер обмена на вкладке "Company".
  25. Исправлено упорядочивание окон чарта по командам.
  26. Исправлено сохранение профилей при переключении между чартами, развернутыми на полный экран.
  27. Исправлено отображение ряда диалогов при использовании интерфейса на японском языке.
  28. Для обеспечения оптимальной работы и высокой производительности все компоненты клиентского термина требуют поддержки процессором компьютера набора инструкций SSE2.
  29. Оптимизировано сканирование наилучшей точки доступа.
  30. Исправлены ошибки зацикливания, возникавшие в процессе обновления при отказе от поднятия прав при использовании UAC.
  31. Исправлено отображение заголовка и тела новостей, а также писем внутренней почты, использующих кодировку UTF-8.
  32. Исправлена ошибка, возникавшая вследствие отказа в диалоге соглашения "One-Click Trading" и в некоторых случаях приводившая к неверному отображению полей "Margin" и "Free Margin" в списке открытых ордеров и позиций.
  33. Обновлен список стран в диалоге выбора при открытии демо-счета.
  34. Обновлены и дополнены переводы интерфейса на шведский, венгерский, японский, итальянский, болгарский языки.
  35. Исправлен показ времени в диалоге бара в Архиве котировок. Ранее при повторном открытии диалога бара время бара отображалось некорректно. Архив котировок позволяет управлять ценовыми данными терминала - загружать, изменять и удалять бары различных таймфреймов.
  36. Исправлена загрузка исторических данных через Архив котировок. Ошибка могла проявляться, если количество знаков в котировках на текущем счете отличалось от количества знаков в закачиваемых котировках (например, если на текущем счете точность цен - четыре знака, а из архива котировок закачиваются цены с пятью знаками после запятой).
  37. Исправлено отображение значения хеджированной маржи в диалоге спецификации торгового инструмента. Ранее значение всегда округлялось до целой части:



Торговые сигналы

  1. Расширена информация о торговом сигнале:
    • добавлена информация о дате последней торговой операции и числе торговых операций за последнюю неделю.
    • добавлен график изменения средств "Equity" счета-источника торгового сигнала.
    • добавлена диаграмма "Distribution" распределения торговой активности по торговым инструментам.




  2. Добавлена опция безусловной синхронизации позиций между источником сигнала и счетом подписчика. Если данная опция включена, то синхронизация счетов подписчика и источника сигнала (в том числе закрытие уже имеющихся открытых позиций, не принадлежащих сигналу) производится без дополнительного подтверждения со стороны подписчика.




    Данная опция необходима при использовании сигналов на VPS (Virtual Private Server) и также может быть использована для повышения надежности синхронизации при работе с уже выбранным сигналом.

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




  4. На вкладке сигналов добавлено отображение числа новых торговых сигналов, добавленных за последние три дня.
  5. Добавлен учет минимального разрешенного объема и минимального шага объема при начальной синхронизации торговых позиций. Если размер локальной позиции меньше расчетного объема на стороне сигнала, то увеличение локальной позиции не производится, поскольку для этого необходимо переоткрыть позицию с потенциальной потерей спреда.
  6. Исправлено открытие и закрытие торговых позиций по инструментам с изменением типа исполнения с Instant Execution на Request Execution при превышении порогового значения объема ордера.
  7. При сопоставлении торговых инструментов между источником и подписчиком сигналов, при наличии нескольких подходящих символов у подписчика, теперь учитывается, разрешена ли торговля для этих символов.
  8. В информацию о торговом сигнале добавлены вкладки "History" и "Reviews".
  9. В списке сигналов добавлена колонка рейтинга сигнала.
  10. Из информации о торговых сигналах убран показ тикетов ордеров и позиций сигнала.
  11. Исправлена ошибка синхронизации торговых сигналов, возникавшая в некоторых случаях при большом количестве однонаправленных позиций одинакового объема.
  12. Добавлено автоматическое преобразование торговых инструментов GOLD <=> XAUUSD и SILVER <=> XAGUSD.
  13. Добавлен запрет подписки на торговые сигналы для счетов, работающих в режиме FIFO по требованиям NFA.
  14. Исправлена подписка на сигнал при работе в Wine (Linux и Mac).
  15. Убрана опция "Сигналы от всех брокеров" (Show full list of signals) из контекстного меню вкладки "Сигналы" окна "Инструменты". При выключении данной опции в витрине сигналов терминала показывались только сигналы, которые транслируются со счетов того же брокера, чей клиентский терминал использует трейдер. Теперь в витрине показываются все сигналы, независимо от брокера. В результате трейдер всегда имеет более широкий выбор сигналов для подписки, что позволяет не пропустить выгодные предложения.

Тестер стратегий

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

Язык MQL4

  1. Исправлена ошибка, в некоторых случаях не позволявшая открывать и закрывать торговые позиции из MQL4-программ. Такая ошибка могла возникать для торговых инструментов с типом исполнения Market Execution при отсылке ордеров больших объемов.

Исправления по сообщениям на форуме и крешлогам.


MetaTrader 4 MultiTerminal

  1. Исправлена ошибка, заключавшаяся в некорректном обновлении списка ордеров после их удаления для некоторых случаев.
  2. Исправлен показ текущей плавающей прибыли по счету - в прибыли не учитывалось значение накопленных свопов по открытым позициям.
  3. Повышена точность отображения времени последней котировки в окне обзора рынка и всплывающем окне обзора рынка.
  4. Исправлено отображение заголовка и тела новостей, а также писем внутренней почты терминала, использующих кодировку UTF-8.
  5. Повышена точность представления времени в журнале терминала - добавлен показ миллисекунд.
  6. Исправления по крешлогам.

Обновление на новый MetaTrader 4 build 600 доступно через систему LiveUpdate.


Что нового в MQL4

Язык программирования MQL4 полностью переработан и приведен к уровню MQL5 - теперь писать торговых роботов на MQL4/5 можно в единой среде разработке MetaEditor и используя единые стиль, библиотеки и инструменты отладки.

MQL4 пользуется заслуженной популярностью среди разработчиков автоматических торговых систем благодаря простоте изучения и огромному количеству кода, наработанного за многие годы использования терминала MetaTrader 4. Но вместе с тем, ему были присущи и некоторые недостатки, проистекающие из главного преимущества - простой язык программирования не позволял писать сложные системы и затруднял портирование отлаженных библиотек из языков высокого уровня. Поэтому мы решили перенести в него максимум функций и возможностей языка MQL5, полностью сохраняя функционал MQL4. То есть все мощные функции MQL5, включая ООП и компилятор в нативный код, станут доступны в MQL4.

Для этого мы разработали единый компилятор, который автоматически поддерживает оба языка MQL4 и MQL5. MetaEditor тоже становится единым для обеих платформ MetaTrader 4 и MetaTrader 5. С его помощью можно компилировать как MQL4, так и MQL5 из любой версии. Для работы также сразу становится доступным и MQL5 Storage.

Защита MQL4-программ поднимается на один уровень с MQL5, в новых EX4/EX5-файлах очень серьезная и полностью переработанная защита по сравнению со старым EX4. А это значит, что для MetaTrader 4 становится доступным и Маркет защищенных приложений на EX4.

Кроме того, в язык MQL4 добавлены новые графические объекты и новые функции по работе с графиками. Стандартная библиотека из MQL5 будет портирована и в MQL4, что предоставит для разработчиков программ новые возможности по созданию собственных графических интерфейсов и торговых библиотек. Теперь в MetaTrader 4 можно создавать полноценные приложения с использованием ресурсов.

Изменения в языке MQL4

  • Добавлены новые типы данных char, short, long, uchar, ushort, uint, ulong и double. Это позволит легко переносить коды из других C++ подобных языков. Данные разного типа обрабатываются с разной скоростью. Целочисленные данные обрабатываются быстрее всего. Для обработки данных двойной точности используется специальный сопроцессор. Однако из-за сложности внутреннего представления данных с плавающей точкой они обрабатывается дольше, чем целочисленные. Введена операция приведения типов.
  • Строки теперь представлены в формате Unicode, раньше они были в формате ANSI (однобайтовые). Это необходимо учитывать, если программа использует DLL и передает в них строковые переменные - при вызове функций Windows API нужно использовать Unicode-версии этих функций.
  • Предопределенная переменная Volume теперь имеет тип long, таймсерии для доступа к объемам также представлены массивами типа long. В старых программах MQL4 рекомендуется делать явное приведение данных этого типа к целевому типу, чтобы избежать ошибки переполнения типа.
  • Добавлены структуры и классы, указатели объектов, тип void и ключевое слово this для получения объектом ссылки на самого себя. Поддерживаются все стандарты объектно-ориентированного программирования:
  • ООП позволяет писать программы с использованием классов, что облегчает отладку и разработку больших программ, позволяет многократно использовать наработки благодаря наследованию. Но это не означает, что теперь нельзя писать на MQL4 в процедурном стиле, как это было раньше. Вы можете писать свои программы как и раньше, если вам не нужны новые возможности.

  • Предопределенные функции init(), deinit() и start() остались для совместимости, но вместо них теперь можно использовать OnInit(), OnDeinit(), OnStart(), OnCalculate(), OnTick(). Кроме того, добавились новые предопределенные функции-обработчики OnTimer(), OnChartEvent(), OnTester(). В старом MQL4 предопределенные функции могли иметь любые параметры и любой тип возврата, вызов этих функций осуществлялся не по сигнатуре, а по имени. В новом MQL4 все предопределенные функции должны точно соответствовать своим сигнатурам, то есть иметь четко определенный состав параметров и тип возврата.

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

  • Приоритет операций теперь приведен к стандартам языка Cи. В старых программах MQL4 для надежности вы можете расставить круглые скобки для явного указания приоритета, если не уверены.

  • В логических операциях теперь используется укороченная проверка условия. В старой версии MQL4 вычислялись все выражения, и только потом производилась проверка условия. Например, пусть есть проверка двух условий с использованием логического И
      if(condition1 && condition2)
        {
         // некоторый блок операций
        }
    Если выражение condition1 окажется равным false, то вычисление выражения condition2 проводиться уже не будет, так как результат false && true все равно будет равен false.

  • Изменилось поведение функции ArrayCopyRates() - в старой версии MQL4 эта функция производила копирование ценовых серий в массив double[][6]. Теперь для получения таймсерий необходимо использовать массив из элементов структуры MqlRates:

    //Структура для хранения информации о ценах, объемах и спреде.
    struct MqlRates
      {
       datetime time;         // время начала периода
       double   open;         // цена открытия
       double   high;         // наивысшая цена за период
       double   low;          // наименьшая цена за период
       double   close;        // цена закрытия
       long     tick_volume;  // тиковый объем
       int      spread;       // спред
       long     real_volume;  // биржевой объем
      };

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

    int  ArrayCopyRates(
       MqlRates&  rates_array[],   // массив MqlRates, переданный по ссылке
       string     symbol=NULL,     // инструмент
       int        timeframe=0      // таймфрейм
       );

    Для совместимости со старыми MQL4 программами сохранился и старый формат вызова, но теперь производится реальное копирование данных в массив типа double.

    int  ArrayCopyRates(
       void&     dest_array[][],    // массив, переданный по ссылке
       string    symbol=NULL,       // инструмент
       int       timeframe=0        // таймфрейм
       );
    Это означает, что при изменении значений в таймсерии (добавлении новых баров, перестройке, обновлении цены Close последнего бара), необходимо заново скопировать нужные данные в массив dest_array[][]. При этом массив-приемник будет автоматически распределен под требуемое количество копируемых баров, даже если он был объявлен статически.

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

  • Изменилась также работа с функциями, областью видимости переменных и освобождением памяти в локальных массивах. Так как изменений оказалось достаточно много, то для обеспечения максимальной совместимости со старым подходом к написанию программ MQL4 было решено ввести новое свойство #property strict. При создании новой программы MQL4 с помощью мастера MQL это свойство всегда добавляется в шаблон. Ниже в таблице перечислены все различия между старым MQL4, новым MQL4 без использования strict и новым MQL4 с указанием строгого режима компиляции
    #property strict
    Следует иметь ввиду, что преобразование типа datetime в строку теперь зависит от режима компиляции:
  •   datetime date=D'2014.03.05 15:46:58';
      string str="mydate="+date;
    //--- str="mydate=1394034418" - старый компилятор, новый компилятор без директивы #property strict
    //--- str="mydate=2014.03.05 15:46:58" - новый компилятор с директивой #property strict

Таблица отличий между компиляторами

Старый компилятор MQL4
Новый компилятор MQL4
Новый MQL4 с #property strict
Точки входа init(), start(), deinit() могут иметь любые параметры и любой тип возврата init(), start(), deinit(), оставленные для совместимости,
и новые OnInit(), OnStart(), OnCalculated, OnTick(), OnTimer(), OnChartEvent(), OnTester(), OnDeinit() должны точно соответствовать своим сигнатурам
Имена переменных практически любые (кроме зарезервированных слов), включая спецсимволы и точки
Имена переменных не могут иметь спецсимволы и точки.
Список зарезервированных слов расширен, поэтому именами не могут быть такие широко распространенные слова, как short, long, const и т.д.
Область видимости переменной - от объявления (даже во вложенном блоке) до конца функции
Область видимости переменной - от объявления до конца блока, в котором переменная объявлена
Неявная инициализация всех переменных (и глобальных, и локальных) нулями
Инициализация только глобальных переменных. Из локальных переменных неявно инициализируются только строки.
Локальные массивы при выходе из функции не освобождаются
Локальные массивы освобождаются при выходе из функции
Локальные массивы освобождаются при выходе из блока {}
Ошибка "Array out of range" (индекс за пределами массива) не приводит к критической ошибке *
То же. Кроме массивов структур и классов, для которых эта ошибка является критической
"Array out of range" - критическая ошибка и приводит к остановке программы
Структур и классов нет
Структуры и классы есть. Появились дополнительные типы данных
Строки - однобайтовые.
datetime - 32-битное целое.
Предопределенная переменная Volume имеет тип double
Строки - юникодные.
datetime - 64-битное целое.
Предопределенная переменная Volume имеет тип long
ArrayCopyRates() производит виртуальное копирование в массив double[][6] ArrayCopyRates() производит виртуальное копирование в массив MqlRates[]. Для совместимости осталось копирование в массив double[][6], но это копирование не виртуальное, а реальное
Функции могут не возвращать значения, даже если они имеют тип. Для этого в конце функции компилятором автоматически проставляется return(0)
Функции любого типа всегда должны возвращать значение
Количество одновременно открытых файлов - 32
Количество одновременно открытых файлов - 64
Файлы всегда открываются в режиме совместного использования **
Режим совместного использования нужно указывать явно с помощью FILE_SHARE_READ и/или FILE_SHARE_WRITE

* Следует обратить особое внимание на ошибку "Array out of range" - многие старые пользовательские индикаторы при запуске на графике будут выдавать эту ошибку в новом компиляторе в режиме strict. Желательно найти причину и устранить ее.

** В новом MQL4 и MQL5 за режим совместного использования файлов отвечают флаги FILE_SHARE_READ и FILE_SHARE_WRITE, которых не было в старом MQL4.


Автоматическое копирование MQL4 программ при обновлении со старых билдов

В предыдущих билдах клиентского терминала MetaTrader 4 (509 и ниже) все MQL4 программы хранились в корневой папке <каталог_установки_терминала>\experts\ в следующих подпапках:

  • \experts - эксперты (торговые роботы),
  • \experts\indicators - пользовательские индикаторы,
  • \experts\scripts - скрипты (программы на MQL4 для однократного выполнения на графике),
  • \include - включаемые в другие программы файлы исходного кода с расширением MQH и MQ4,
  • \libraries - библиотеки в виде исходного кода MQ4 и скомпилированные из них исполняемые файлы EX4, для динамического вызова собранных в них функций другими MQL4-программами,
  • \files - специальная "файловая песочница", только в пределах этой папки MQL4 программам разрешается выполнять файловые операции.

В новой версии MQL4 файловая структура для хранения исходных кодов изменилась. Теперь все программы на MQL4 должны находиться в папке <каталог_данных>\MQL4\ во вложенных соответствующих папках:

  • \Experts - эксперты (торговые роботы),
  • \Indicators - пользовательские индикаторы,
  • \Scripts - скрипты (программы на MQL4 для однократного выполнения на графике),
  • \Include - включаемые в другие программы файлы исходного кода с расширением MQH и MQ4,
  • \Libraries - библиотеки в виде исходного кода MQ4 и скомпилированные из них исполняемые файлы EX4 для динамического вызова собранных в них функций другими MQL4-программами,
  • \Images - файлы картинок для использования в ресурсах,
  • \Files - специальная "файловая песочница", только в пределах этой папки MQL4 программам разрешается выполнять файловые операции.

При обновлении терминала MetaTrader 4 с 509 билда на новую версию все файлы MQ4, MQH и EX4 из стандартных корневых папок старого местоположения автоматически копируются и раскладываются в соответствующие папки. Дополнительно созданные пользователем внутри стандартных папок дочерние папки с файлами никак не обрабатываются, их необходимо самостоятельно скопировать в новое место, если они необходимы.

Никакие файлы или папки при обновлении не удаляются! Все операции по копированию файлов при обновлении записываются в Журнал терминала с указанием подробных путей.

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

Возможно, в некоторых случаях в исходных файлах потребуется исправить пути в #property include для включаемых файлов (если относительные пути изменились). Важно запомнить, что сейчас корневой папкой для редактора MetaEditor является папка <каталог_данных>\MQL4\, все программы должны находиться в правильных дочерних подпапках.

Найти каталог данных (<каталог_данных>) на компьютере для каждой копии установленного терминала MetaTrader 4 можно из меню терминала или редакторе MetaEditor: "Файл" - "Открыть каталог данных".

Обновление на новый MetaTrader 4 build 600 доступно через систему LiveUpdate.