Бета-версия платформы MetaTrader 5 build 1995: Экономический календарь, MQL5-программы в виде сервисов и API для языка R

 

15 февраля 2019 года будет выпущена обновленная версия платформы MetaTrader 5 в бета-режиме. Призываем всех трейдеров присоединиться к тестированию новой версии платформы, чтобы самостоятельно опробовать все ее возможности и помочь разработчикам в исправлении найденных ошибок.

Для обновления на новый 1995 билд платформы MetaTrader 5 достаточно нажать "Помощь \ Проверить обновления десктопа \ Последняя бета-версия":

После окончания данного этапа бета-тестирования будет выпущен финальный билд новой платформы MetaTrader 5.

Обновление содержит следующие изменения:

  1. Terminal: Полностью обновлен встроенный экономический календарь.

    Экономический календарь — наша собственная разработка. В нем доступны более 600 показателей и индикаторов 13 крупнейших экономик мира: США, Евросоюза, Японии, Великобритании, Канады, Австралии, Китая и т.д. Все данные собираются в режиме реального времени из открытых источников.

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

    В ближайшее время появится доступ к данным календаря из MQL5-программ.



  2. Terminal: Добавлен новый тип MQL5-программ — Сервисы. Они позволяют создавать собственные источники ценовых данных для терминала — передавать цены от внешних систем в режиме реального времени так, как это делают торговые серверы брокеров.

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

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





    Создание сервисов
    Для создания шаблона сервиса используйте соответствующий пункт в Мастере MQL5. Сервисы имеют одну точку входа OnStart, аналогично скриптам. В ней вы можете организовать бесконечный цикл получения и обработки данных при помощи сетевых функций.

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

    Выберите в навигаторе сервис и нажмите "Добавить сервис" в его контекстном меню. Будет открыт стандартный диалог MQL5-программы, где вы можете разрешить/запретить торговлю и доступ к сигналам, а также задать параметры.




    Для запуска и остановки экземпляра сервиса используйте его меню. Для управления всеми экземплярами, используйте меню самого сервиса.

  3. Terminal: Добавлена система обучения.

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

    • Советы не будут отвлекать от работы с платформой — они аккуратно встроены на панель инструментов в виде прогресс-бара.
    • Советы показываются только для действий, которые вы еще не выполняли в платформе.
    • В советы встроены интерактивные ссылки для перехода к определенным элементам интерфейса платформы. Например, прямо из совета можно открыть торговый диалог или меню с нужной командой.

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




  4. Terminal: История торгового счета может быть представлена в виде позиций — платформа собирает данные по сделкам, относящимся к позиции (открытие, наращивание, частичное и полное закрытие), и группирует эти данные в единую запись. Это позволяет легко посмотреть время открытия и закрытия позиции, ее объем, цену и суммарный результат. Теперь это представление доступно и в отчетах по истории, экспортируемых в файлы.




  5. Terminal: Добавлено API для запроса данных из терминала MetaTrader 5 через приложения, использующие язык R.

    Для работы мы подготовили специальный пакет MetaTraderR. В нем содержатся DLL для взаимодействия между R и терминалом MetaTrader 5, документация и вспомогательные r-файлы. Сейчас пакет находится в процессе регистрации в репозитории CRAN, и в ближайшее время станет доступен для скачивания и установки.




    Для установки пакета используйте следующую команду:
    R CMD INSTALL --build MetaTraderR
    На текущий момент для запроса данных доступны следующие команды:

    • MT5Initialize — инициализация и установка соединения с терминалом MetaTrader 5. При выполнении команды при необходимости происходит запуск терминала.
    • MT5Shutdown — деинициализация и разрыв соединения с терминалом MetaTrader 5.
    • MT5Version — получение версии терминала MetaTrader 5.
    • MT5TerminalInfo — получение состояния и параметров подключения терминала к серверу брокера (номер счета и адрес сервера).
    • MT5WaitTerminal — 2-минутное ожидание соединения терминала MetaTrader 5 с сервером брокера.
    • MT5CopyTicksFrom(symbol, from, count, flags) — копирование тиков с указанной даты в указанном количестве. Дата указывается в миллисекундах с 1970.01.01.
    • MT5CopyTicksRange(symbol, from, to, flags) — копирование тиков из указанного периода дат. Даты указываются в миллисекундах с 1970.01.01.
    • MT5CopyRatesFrom(symbol, timeframe, from, count) — копирование минутных баров с указанной даты в указанном количестве. Дата указывается в секундах с 1970.01.01.
    • MT5CopyRatesFromPos(symbol, timeframe, start_pos, count) — копирование минутных баров с указанной позиции от последнего бара.
    • MT5CopyRatesFromRange(symbol, timeframe, date_from, date_to) — копирование баров из указанного периода дат. Даты указываются в секундах с 1970.01.01.

    В будущем список поддерживаемых команд будет расширен.

  6. Terminal: Оптимизирован диалог закрытия торговой позиции встречной. Теперь его работа не замедляется при большом количестве открытых позиций.
  7. Terminal: Исправлены ошибки расчета синтетических инструментов, приводившие к образованию пропусков данных.
  8. Terminal: Теперь при удалении пользовательского инструмента удаляются файлы с его тиковой и баровой историей. Это позволяет избежать накапливания неиспользуемых данных на жестком диске.
  9. MQL5: Исправлена и значительно ускорена работа с тиковой и баровой историей.
  10. MQL5: Исправлены и значительно ускорены функции изменения тиковой и баровой истории у пользовательских торговых инструментов CustomTicks* и CustomRates*.
  11. MQL5: Добавлены новые функции преобразования данных.

    CharArrayToStruct — копирует массив типа uchar в POD-структуру.
    bool  CharArrayToStruct(
       void&         struct_object,    // структура
       const uchar&  char_array[],     // массив
       uint          start_pos=0       // начальная позиция в массиве
       );
    StructToCharArray — копирует POD-структуру в массив типа uchar.
    bool  StructToCharArray(
       const void&  struct_object,     // структура
       uchar&       char_array[],      // массив
       uint         start_pos=0        // начальная позиция в массиве
       );

  12. Добавлена функция MathSwap для смены порядка байт в значении ushort, uint и ulong.
    ushort MathSwap(ushort value);
    uint   MathSwap(uint   value);
    ulong  MathSwap(ulong  value);

  13. MQL5: Добавлены сетевые функции для создания TCP-соединений с удаленными хостами через системные сокеты:

    • SocketCreate — создает сокет с указанными флагами и возвращает его хэндл
    • SocketClose — закрывает сокет
    • SocketConnect — выполняет подключение к серверу с контролем таймаута
    • SocketIsConnected — проверяет, подключен ли сокет в текущий момент времени
    • SocketIsReadable — получает количество байт, которое можно прочитать из сокета
    • SocketIsWritable — проверяет, возможна ли запись данных в сокет в текущий момент времени
    • SocketTimeouts — устанавливает таймауты получения и отправки данных для системного объекта сокета
    • SocketRead — читает данные из сокета
    • SocketSend — записывает данные в сокете
    • SocketTlsHandshake — инициирует защищенное TLS (SSL)-соединение с указанным хостом по протоколу TLS Handshake
    • SocketTlsCertificate — получает данные о сертификате, используемом для защиты сетевого соединения
    • SocketTlsRead — читает данные из защищенного TLS-соединения
    • SocketTlsReadAvailable — читает все доступные данные из защищенного TLS-соединения
    • SocketTlsSend — отправляет данные через защищенное TLS-соединение

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

    Для работы с сетевыми функциями добавлены новые коды ошибок:

    • ERR_NETSOCKET_INVALIDHANDLE (5270) — в функцию передан неверный хэндл сокета
    • ERR_NETSOCKET_TOO_MANY_OPENED (5271) — открыто слишком много сокетов (максимум 128)
    • ERR_NETSOCKET_CANNOT_CONNECT (5272) — ошибка соединения с удаленным хостом
    • ERR_NETSOCKET_IO_ERROR (5273) — ошибка отправки/получения данных из сокета
    • ERR_NETSOCKET_HANDSHAKE_FAILED (5274) — ошибка установления защищенного соединения (TLS Handshake)
    • ERR_NETSOCKET_NO_CERTIFICATE (5275) — отсутствуют данные о сертификате, которым защищено подключение

  14. MQL5: Добавлены новые функции для работы со строками:

    StringReserve — резервирует в памяти для строки буфер указанного размера.
    bool  StringReserve(
       string&        string_var,          // строка
       uint           new_capacity         // размер буфера для хранения строки
       );
    StringSetLength — устанавливает для строки указанную длину в символах.
    bool  StringSetLength(
       string&        string_var,          // строка
       uint           new_length           // новая длина строки
       );

  15. MQL5: Добавлены новые функции для работы с массивами:

    ArrayRemove — удаляет из массива указанное число элементов, начиная с указанного индекса.
    bool  ArrayRemove(
       void&         array[],              // массив любого типа
       uint          start,                // с какого индекса начинаем удалять
       uint          count=WHOLE_ARRAY     // количество элементов
       );
    ArrayInsert — вставляет в массив-приемник из массива-источника указанное число элементов, начиная с указанного индекса.
    bool  ArrayInsert(
       void&         dst_array[],          // массив-приемник
       const void&   src_array[],          // массив источник
       uint          dst_start,            // индекс в массиве-приемнике для вставки
       uint          src_start=0,          // индекс в массиве-источнике для копирования
       uint          count=WHOLE_ARRAY     // количество вставляемых элементов
       );
    ArrayReverse — разворачивает в массиве указанное число элементов, начиная с указанного индекса.
    bool  ArrayReverse(
       void&         array[],              // массив любого типа
       uint          start=0,              // с какого индекса начинаем переворачивать массив
       uint          count=WHOLE_ARRAY     // количество элементов
       );

  16. MQL5: В функции CustomRatesUpdate, CustomRatesReplace, CustomTicksAdd и CustomTicksReplace добавлен параметр "uint count" для указания количества элементов передаваемого массива, которые будут использованы. По умолчанию для параметра используется значение WHOLE_ARRAY. Оно означает, что будет использован весь массив.
  17. MQL5: Добавлена функция CustomBookAdd — передает состояние стакана цен по пользовательскому инструменту. Функция позволяет транслировать стакан цен так, как если бы он приходил от сервера брокера.
    int  CustomBookAdd(
       const string        symbol,            // имя символа
       const MqlBookInfo&  books[]            // массив с описаниями элементов стакана цен
       uint                count=WHOLE_ARRAY  // количество элементов, которые будут использованы
       );
  18. MQL5: Добавлена перегрузка функции CustomSymbolCreate, позволяющая создать пользовательский торговый инструмент на основе уже имеющегося. После создания любое свойство символа можно поменять на нужное значение соответствующими функциями.
    bool  CustomSymbolCreate(
       const string        symbol_name,       // имя пользовательского символа
       const string        symbol_path="",    // название группы, в которой будет создан символ
       const string        symbol_origin=NULL // имя символа, на основе которого будет создан пользовательский символ
       );
    Имя символа, из которого будут скопированы свойства создаваемого пользовательского символа, указывается в параметре "symbol_origin".

  19. Обновлена функция StringToTime, преобразующая строку с датой/временем в значение типа datetime. Теперь она поддерживает следующие форматы дат:

    • yyyy.mm.dd [hh:mi]
    • yyyy.mm.dd [hh:mi:ss]
    • yyyymmdd [hh:mi:ss]
    • yyyymmdd [hhmiss]
    • yyyy/mm/dd [hh:mi:ss]
    • yyyy-mm-dd [hh:mi:ss]

  20. MQL5: В перечисление ENUM_TERMINAL_INFO_INTEGER добавлено свойство TERMINAL_VPS — признак того, что терминал запущен на виртуальном сервере MetaTrader Virtual Hosting (MetaTrader VPS). Если программа запущена на хостинге, вы можете отключать все ее визуальные функции, поскольку на виртуальном сервере отсутствует графический пользовательский интерфейс.
  21. MQL5: В перечисление ENUM_SYMBOL_INFO_INTEGER добавлено новое свойство SYMBOL_EXIST — признак того, что символ с таким именем существует.
  22. MQL5: Исправлена типизация при использовании предварительного объявления шаблонной функции.
  23. MQL5: Добавлена переинициализация индикаторов при смене торгового счета.
  24. MQL5: Оптимизирована работа функции StringSplit.
  25. MQL5: Исправлены ошибки в стандартной библиотеке.
  26. Tester: Добавлена функция TesterStop — штатное досрочное завершение работы советника на агенте тестирования. Теперь вы можете принудительно остановить тестирование при достижении заданного количества убыточных сделок, заданного уровня просадки или по любым другим критериям.

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

  27. Tester: Отключена возможность тестирования и оптимизации экспертов через MQL5 Cloud Network в режиме использования реальных тиков. Такой режим можно использовать только на локальных агентах и фермах в локальной сети.
  28. Tester: Улучшена работа с индикаторами при визуальном тестировании. Теперь ценовой график и индикаторные линии отрисовываются синхронно даже при максимальной скорости визуализации.
  29. Tester: Оптимизированы и значительно ускорены тестирование и оптимизация.
  30. Tester: Исправлена отладка индикаторов на исторических данных. Теперь функции OnInit и OnDeinit индикаторов можно отлаживать корректно.
  31. Tester: Ускорен доступ к историческим данным при тестировании мультивалютных экспертов.
  32. Tester: Исправлены ошибки, приводящие к зависанию визуального тестера при отладке на исторических данных.
  33. Tester: Ускорен запуск проходов оптимизации при обработке агентом пакета заданий.
  34. Tester: Изменена политика раздачи пакетов заданий агентам тестирования. Размер пакета был увеличен, что привело к значительному снижению накладных расходов на сетевые операции.
  35. Tester: Изменено поведение опции использования локальных, сетевых и облачных агентов. Теперь при отключении этих опций уже выданные задания обрабатываются до конца, а новые перестают выдаваться. Ранее эти опции работали аналогично команде "Отключить", которая останавливала работу агентов сразу.




  36. MetaEditor: Добавлена поддержка не-ANSI символов в отладчике. Теперь наблюдаемые выражения отображаются корректно, даже если имя переменной указано кириллицей.
  37. Добавлен перевод пользовательского интерфейса на Хорватский язык.
  38. Обновлена документация.
Обновление будет доступно через систему LiveUpdate.
 

Спасибо за проделанную работу, приятно, что некоторые мои пожелания были учтены!

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

А обратной связи от R в терминал не планируется?

 


    • ERR_NETSOCKET_INVALIDHANDLE (5270) — в функцию передан неверный хэндл сокета
    • ERR_NETSOCKET_TOO_MANY_OPENED (5271) — открыто слишком много сокетов (максимум 128)
    • ERR_NETSOCKET_CANNOT_CONNECT (5272) — ошибка соединения с удаленным хостом
    • ERR_NETSOCKET_IO_ERROR (5273) — ошибка отправки/получения данных из сокета
    • ERR_NETSOCKET_HANDSHAKE_FAILED (5274) — ошибка установления защищенного соединения (TLS Handshake)
    • ERR_NETSOCKET_NO_CERTIFICATE (5272) — отсутствуют данные о сертификате, которым защищено подключение


Опечатка в коде ошибки.

 

MetaQuotes Software Corp.:

Terminal: Добавлен новый тип MQL5-программ — Сервисы. Они позволяют создавать собственные источники ценовых данных для терминала — передавать цены от внешних систем в режиме реального времени так, как это делают торговые серверы брокеров.

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

Как избежать пропуска тиков?

 

MetaQuotes Software Corp.:

Terminal: История торгового счета может быть представлена в виде позиций — платформа собирает данные по сделкам, относящимся к позиции (открытие, наращивание, частичное и полное закрытие), и группирует эти данные в единую запись. Это позволяет легко посмотреть время открытия и закрытия позиции, ее объем, цену и суммарный результат. Теперь это представление доступно и в отчетах по истории, экспортируемых в файлы.

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

 

25. MQL5: Исправлены ошибки в стандартной библиотеке.

Можно где-то список исправлений увидеть?

 

MetaQuotes Software Corp.:

MQL5: Добавлены новые функции для работы со строками

StringReserve — резервирует в памяти для строки буфер указанного размера.

StringSetLength — устанавливает для строки указанную длину в символах.

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


Чем новые функции отличаются от StringBufferLen и StringInit?

 
Artyom Trishkin:

Можно где-то список исправлений увидеть?

Любой Compare-сервис покажет разницу.

 
fxsaber:

Любой Compare-сервис покажет разницу.

В хранилище добавить всю СБ пока не поздно?

 
Возможно ли статью с примером трансляции синтетических стаканов со стороны и использования для этого сокетов?
 
Artyom Trishkin:

В хранилище добавить всю СБ пока не поздно?

Просто скопировать в другую папку, а после обновления (возможно, они уже в 1985 имеются) сравнить.

Причина обращения: