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

История обновлений десктопной, мобильной и веб-платформ

16 декабря 2022
MetaTrader 5 build 3550: улучшения и исправления

Terminal

  1. Terminal: Обновлены переводы пользовательского интерфейса.
  2. Исправления по крешлогам.

Web Terminal

9 декабря 2022
MetaTrader 5 build 3540: 2FA/TOTP аутентификация и улучшенный Обзор рынка в веб-терминале

Web Terminal

  1. Добавлена поддержка 2FA/TOTP-аутентификации с помощью Google Authenticator и других подобных приложений.

    Использование двухфакторной аутентификации позволяет дополнительно защитить ваш торговый аккаунт от неавторизованного доступа даже в случае утечки логина и постоянного пароля к нему. Существует множество мобильных приложений, которые позволяют проводить двухэтапную аутентификацию с помощью алгоритма Time-based One-time Password Algorithm (TOTP). Среди наиболее известных Google Authenticator, Microsoft Authenticator, LastPass Authenticator и Authy. Теперь в клиентском терминале MetaTrader 5 можно авторизоваться с помощью одноразовых паролей, получаемых из таких Authenticator-приложений.

    Чтобы включить двухэтапную аутентификацию, сначала авторизуйтесь в веб-терминале MetaTrader 5 обычным способом. Затем нажмите на свой счет в меню и выберите "Enable 2FA/TOTP " в открывшемся диалоге. Запустите Authenticator на мобильном телефоне, нажмите в нем кнопку "+" для добавления вашего торгового счета и отсканируйте QR-код из терминала. Введите полученный код в поле "One-time password" и нажмите кнопку "Enable 2FA" — секрет для вашего счета будет добавлен на торговом сервере брокера.


    Добавлена поддержка 2FA/TOTP-аутентификации с помощью Google Authenticator и других подобных приложений


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


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


    В диалоге с QR-кодом для привязки к генератору также отображается резервный код — сохраните его в безопасном месте. Если вы потеряете доступ к привязанному устройству, он позволит заново добавить счет в приложение Authenticator.

    Если вы решите удалить сохраненный секрет из приложения Authenticator, предварительно отключите использование 2FA/TOTP-аутентификации, используя соответствующую команду в меню счета. Если 2FA/TOTP-аутентификация недоступна на вашем счете, попросите брокера включить эту опцию.

  2. Расширено количество информации, отображаемой в Market Watch. Теперь помимо текущих цен Bid/Ask и процента изменения цены вы можете посмотреть:

    • Максимальную и минимальную цену Bid/Ask за текущую торговую сессию
    • Цены открытия текущей и закрытия предыдущей торговой сессии

    Для настройки отображаемой информации используйте контекстное меню:


    Дополнительная информация в Обзоре рынка


  3. Добавлен показ уведомления о рисках при включении соответствующей настройки на стороне брокера. Некоторые регуляторы требуют, чтобы трейдер прочел и принял уведомление перед тем, как приступить к торговле.
  4. Исправлено отображение верхней панели инструментов на моделях iPhone с "челкой" в верхней части экрана. В некоторых случаях она могла закрывать кнопки на панели.
  5. Исправлено отображение итоговых финансовых показателей счета (прибыль, эквити и т.д.) в браузере Google Chrome. В некоторых случаях значения могли не обновляться.

Terminal

  1. Оптимизировано и значительно ускорено открытие диалога для создания демо-счетов.
  2. Обновлены переводы пользовательского интерфейса.
  3. Исправления по крешлогам.

MQL5

  1. В класс COpenCL стандартной библиотеки добавлены новые методы:

    • BufferFromMatrix — заполнение буфера устройства данными из матрицы
    • BufferToMatrix — чтение данных из буфера устройства в матрицу
    • ContextCreate — создание контекста устройства (первая часть метода Initialize)
    • ProgramCreate — создание программы на основе исходного кода OpenCL (вторая часть метода Initialize)
    • ContextClean — освобождение всех данных, принадлежащих контексту устройства (аналог метода Shutdown, но без удаления контекста)
    • GetDeviceInfoInteger — получение целочисленного свойства устройства
    • GetKernelInfoInteger — получение целочисленного свойства кернела
    • GetDeviceInfo — получение любого одиночного целочисленного свойства устройства, не присутствующего в перечислении ENUM_OPENCL_PROPERTY_INTEGER

    Пример использования GetDeviceInfo:
    long preferred_workgroup_size_multiple=OpenCL.GetDeviceInfo(0x1067);
  2. Добавлены значения TERMINAL_CPU_NAME и TERMINAL_OS_VERSION в перечисление ENUM_TERMINAL_INFO_STRING. Они позволяют получить наименование процессора и операционной системы пользователя.
    void OnStart()
      {
       string cpu,os;
    //---
       cpu=TerminalInfoString(TERMINAL_CPU_NAME);
       os=TerminalInfoString(TERMINAL_OS_VERSION);
       PrintFormat("CPU: %s, OS: %s",cpu,os);
      }
    
    Результат:
    CPU: Intel Xeon  E5-2630 v4 @ 2.20GHz, OS: Windows 10 build 19045
  3. Исправлена работа параметра "table_or_sql" в функциях DatabasePrint и DatabaseExport. Теперь в нем можно передавать имя таблицы, а не только SQL-запрос.

MetaEditor

  1. Исправлена проверка на максимальное количество столбцов в базе данных, которые могут быть отображены. Теперь отобразить можно до 64 колонок.
  2. Исправлена работа точек останова в коротких конструкциях вида IF[ if(cond) break; ].
25 ноября 2022
MetaTrader 5 build 3520: добавлена 2FA/TOTP аутентификация с помощью Google Authenticator

Terminal

  1. Добавлена поддержка 2FA/TOTP-аутентификации с помощью Google Authenticator и других подобных приложений.

    Использование двухфакторной аутентификации позволяет дополнительно защитить ваш торговый аккаунт от неавторизованного доступа даже в случае утечки логина и постоянного пароля к нему. Существует множество мобильных приложений, которые позволяют проводить двухэтапную аутентификацию с помощью алгоритма Time-based One-time Password Algorithm (TOTP). Среди наиболее известных Google Authenticator, Microsoft Authenticator, LastPass Authenticator и Authy. Теперь в клиентском терминале MetaTrader 5 можно авторизоваться с помощью одноразовых паролей, получаемых из таких Authenticator-приложений.

    Чтобы включить двухэтапную аутентификацию, сначала авторизуйтесь в клиентском терминале MetaTrader 5 обычным способом. Затем правой кнопкой по торговому счету вызовите меню и выполните команду "Разрешить 2FA/TOTP". Запустите Authenticator на мобильном телефоне, нажмите в нем кнопку "+" для добавления вашего торгового счета и отсканируйте QR-код из терминала. Введите полученный код в поле "One-time password" и нажмите кнопку "Enable 2FA" — секрет для вашего счета будет добавлен на торговом сервере брокера.


    Добавлена поддержка 2FA/TOTP-аутентификации с помощью Google Authenticator и других подобных приложений

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



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

    Если вы решите удалить сохраненный секрет из приложения Authenticator, предварительно отключите использование 2FA/TOTP-аутентификации, используя соответствующую команду контекстного меню счета. Если 2FA/TOTP-аутентификация недоступна на вашем счете, попросите брокера включить эту опцию.

MQL5

  1. Исправлена работа функции CopyTicks для пользовательских торговых инструментов. В некоторых случаях при работе с кастомными символами вместо запрошенных данных возвращались начальные тики прошлой торговой сессии.

  2. Для получения информации о последней ошибке OpenCL в перечисления добавлены новые значения, которые позволяют получить код ошибки и текстовое описание.
    1. В перечисление ENUM_OPENCL_PROPERTY_INTEGER добавлено значение CL_LAST_ERROR (код 4094) 

      Для получения последней ошибки OpenCL через CLGetInfoInteger параметр handle игнорируется, то есть не имеет значения. Описание ошибок: https://registry.khronos.org/OpenCL/specs/3.0-unified/html/OpenCL_API.html#CL_SUCCESS.
      Для неизвестного кода ошибки вернётся строка "unknown OpenCL error N", где вместо N будет код ошибки.

      Пример:
      //--- первый параметр handle игнорируется при получении кода последней ошибки
      int code = (int)CLGetInfoInteger(0,CL_LAST_ERROR);

    2. В перечисление ENUM_OPENCL_PROPERTY_STRING добавлено значение CL_ERROR_DESCRIPTION (4093).
      Текстовое описание ошибки OpenCL можно получить с помощью CLGetInfoString. Описание ошибок: https://registry.khronos.org/OpenCL/specs/3.0-unified/html/OpenCL_API.html#CL_SUCCESS.

      При использовании CL_ERROR_DESCRIPTION в качестве параметра handle в CLGetInfoString следует передать код ошибки. Если вместо кода ошибки передать CL_LAST_ERROR, то функция вернёт описание последней ошибки.

      Пример:
      //--- получить код последней OpenCL ошибки
      int    code = (int)CLGetInfoInteger(0,CL_LAST_ERROR);
      string desc; // для получения текстового описания ошибки
      
      //--- используем код ошибки для получения текстового описания ошибки
      if(!CLGetInfoString(code,CL_ERROR_DESCRIPTION,desc))
         desc = "cannot get OpenCL error description, " + (string)GetLastError();
      Print(desc);
      
      
      //--- чтобы получить описание последней OpenCL ошибки без предварительного получения кода, нужно передать CL_LAST_ERROR  
      if(!CLGetInfoString(CL_LAST_ERROR,CL_ERROR_DESCRIPTION, desc))
         desc = "cannot get OpenCL error description, " + (string)GetLastError();
      Print(desc);
      Пока в качестве описания ошибки отдаётся имя внутреннего перечисления, расшифровку которого можно посмотреть на странице https://registry.khronos.org/OpenCL/specs/3.0-unified/html/OpenCL_API.html#CL_SUCCESS. Например, если получено значение CL_INVALID_KERNEL_ARGS, описание для него "Returned when enqueuing a kernel when some kernel arguments have not been set or are invalid."

  3. Исправлена работа метода matrix::MatMul. При работе с матрицами большого размера на некоторых размерах терминал аварийно завершал работу.

  1. Исправления по крешлогам.
18 ноября 2022
MetaTrader 5 build 3510: улучшения веб-терминала

MetaTrader 5 WebTerminal

  1. В мобильной версии в раздел торговой истории добавлена сортировка операций и фильтрация по глубине. Для настройки отображения истории воспользуйтесь командами на верхней панели:

    В мобильной версии в раздел торговой истории добавлена сортировка операций и фильтрация по глубине


    Операции можно отcортировать по основным параметрам: дате, тикету, символу, объему и т.д.

  2. Улучшен доступ к информации о ваших торговых счетах.

    • В десктопной версии данные текущего счета в меню-бутерброде теперь кликабельны. Нажав на счет, вы перейдете к просмотру его деталей.
    • В мобильной версии отображение текущего счета добавлено в разделе "Settings". Нажав на счет, вы перейдете к просмотру его деталей.


    Улучшен доступ к информации о ваших торговых счетах

  3. Исправлено отображение типа счета в окне управления счетами.
  4. Исправлено отображение эквити и свободной маржи после обновления страницы с веб-терминалом в мобильных браузерах.
  5. Исправлено отображение нижней панели в мобильном браузере Firefox.

Terminal

  1. Terminal: Исправлена ошибка в расчете графиков баланса и эквити в торговом отчете.

MQL5

  1. Изменилось поведение typename(expr). Теперь функция отдает полный тип с модификаторами и размерностями (для массивов):
    class A
      {
      };
    
    void OnStart(void)
      {
       const A *const arr[][2][3]={};
       Print(typename(arr));
      }
    
    Результат:
    "class A const * const [][2][3]"

Исправления по крешлогам.
11 ноября 2022
MetaTrader 5 build 3500: улучшения и исправления

Terminal

  1. В контекстное меню разделов "Торговля" и "История"  добавлена команда для доступа к новому торговому отчету:

    Добавлена команда для доступа к новому торговому отчету


    Торговый отчет включает в себя:
    • Помесячные показатели прироста в виде графика и таблицы
    • График изменения эквити
    • Лепестковую диаграмму, позволяющую быстро оценить состояние счета
    • Статистику сделок по инструментам
    • Множество дополнительных показателей для анализа торговли

  2. Исправлен расчет начального депозита в торговом отчете.
  3. Исправлена установка уровней "Стоп Лосс" и "Тейк Профит" при использовании панелей быстрой торговли на графике и в "Обзоре рынка". Уровни могли ошибочно наследоваться от ранее открытых позиций, даже если это не требовалось (функционал предназначен для счетов FIFO).
  4. Обновлены переводы пользовательского интерфейса.

MQL5

  1. Исправлена ошибка компилятора, которая позволяла обращаться к полю структуры по константной строке, значением которой является имя поля.
  2. Исправлена проверка состояния клавиш с помощью TerminalInfoInteger(TERMINAL_KEYSTATE_*).

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


MetaTrader 5 WebTerminal build 3500

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

4 ноября 2022
MetaTrader 5 build 3490: мобильная версия веб-терминала и новые методы матриц в MQL5

Мобильная версия веб-терминала

В новой версии веб-терминала добавлена полноценная поддержка мобильных устройств. Теперь его интерфейс автоматически адаптируется по размеру экрана, позволяя пользователям удобно работать в платформе на телефонах и планшетах с iOS и Android:

В новой версии веб-терминала добавлена полноценная поддержка мобильных устройств.

Помимо этого, в веб-терминал внесено множество исправлений и улучшений.

Новый веб-терминал MetaTrader 5 поддерживает все функции, которые нужны современному трейдеру. Приложение позволяет:

  • Работать с демонстрационными и реальными счетами
  • Получать котировки любых финансовых инструментов
  • Торговать на любых рынках
  • Проводить технический анализ котировок при помощи 30+ индикаторов и 20 графических объектов
  • Анализировать данные Экономического календаря


Terminal

  1. Расширены функции диспетчера задач. Теперь он позволяет отслеживать потребляемые ресурсы еще точнее.
    • Добавлен показ размера стеков для потоков
    • Добавлено отображение количества переключений контекстов
    • Добавлено распознавание системных потоков и потоков в сторонних DLL
    • Добавлено отображение времени работы в режиме ядра. Увеличение этого показателя по сравнению с временем работы в пользовательском режиме может говорить о проблемах на уровне системы: проблемы в драйверах, аппаратные ошибки, медленное оборудование. Подробнее читайте в документации Microsoft.
    • Добавлено отображение времени работы в режиме пользователя.

    Расширены функции диспетчера задач. Теперь он позволяет отслеживать потребляемые ресурсы еще точнее.


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

    В настройки терминала добавлена вкладка OpenCL для управления доступными устройствами.

  3. Добавлена подстановка уровней Стоп Лосс и Тейк Профит в стакане цен для счетов, работающих в режиме FIFO (может быть включен на стороне брокера).

    Режим FIFO подразумевает, что позиции по каждому инструменту должны закрываться в том порядке, в каком они были открыты. Чтобы закрытие позиций по стоп-уровням всегда соответствовало правилу FIFO, на стороне клиентского терминала реализована следующая логика:

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

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

  4. Исправлено удаление уровней Стоп Лосс и Тейк Профит кнопками "Х" в разделе "Инструменты\Торговля". Ошибка возникала при отключенной функции быстрой торговли. Теперь при нажатии кнопки будет открываться торговый диалог с пустым значением соответствующего уровня.

  5. Внесены правки в торговый отчет — исправлены подписи на графиках и расчёт итоговой комиссии. Кроме того, в некоторых случаях показывался некорректный Profit в статистике отчета, а также неверные значения в тултипах при наведении на графики эквити и баланса.

MQL5

  1. Добавлены методы векторов и матриц CopyTicks и CopyTicksRange. Они позволяют легко копировать массивы тиковых ценовых данных в векторы и матрицы.
    bool matrix::CopyTicks(string symbol,uint flags,ulong from_msc,uint count);
    bool vector::CopyTicks(string symbol,uint flags,ulong from_msc,uint count);
    
    bool matrix::CopyTicksRange(string symbol,uint flags,ulong from_msc,ulong to_msc);
    bool matrix::CopyTicksRange(string symbol,uint flags,ulong from_msc,ulong to_msc);
    Тип копируемых данных указывается в параметре flags при помощи перечисления ENUM_COPY_TICKS. Доступны следующие значения:
    COPY_TICKS_INFO    = 1,       // тики, вызванные изменениями Bid и/или Ask
    COPY_TICKS_TRADE   = 2,       // тики, вызванные изменениями Last и Volume
    COPY_TICKS_ALL     = 3,       // все тики, в которых есть изменения
    COPY_TICKS_TIME_MS = 1<<8,    // время в миллисекундах
    COPY_TICKS_BID     = 1<<9,    // цена Bid
    COPY_TICKS_ASK     = 1<<10,   // цена Ask
    COPY_TICKS_LAST    = 1<<11,   // цена Last
    COPY_TICKS_VOLUME  = 1<<12,   // объем
    COPY_TICKS_FLAGS   = 1<<13,   // флаги тика
    При выборе нескольких типов данных (доступно только для матриц) порядок строк в матрице будет соответствовать порядку значений в перечислении.

  2. Расширены возможности методов matrix::Assign и vector::Assign.
    Теперь матрице можно назначить одномерный массив или вектор:
    bool matrix::Assign(const vector &vec);
    Результатом будет однострочная матрица.
    Также вектору теперь можно назначить матрицу (будет выполнено сглаживание матрицы):
    bool vector::Assign(const matrix &mat);
    
  3. Добавлены методы Swap для векторов и матриц.
    bool vector::Swap(vector &vec);
    bool vector::Swap(matrix &vec);
    bool vector::Swap(double &arr[]);
    bool matrix::Swap(vector &vec);
    bool matrix::Swap(matrix &vec);
    bool matrix::Swap(double &arr[]);
    Каждый массив, вектор или матрица ссылаются на буфер памяти, который содержит элементы данного объекта. Метод Swap фактически меняет местами указатели на данные буферы, не проводя записи элементов в памяти. Поэтому матрица остается матрицей, а вектор вектором. При обмене матрицы и вектора вы получите однострочную матрицу с элементами вектора и вектор с элементами матрицы в плоском представлении (смотрите метод Flat).
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
     {
    //---
      matrix a= {{1, 2, 3}, {4, 5, 6}};
      Print("a before Swap: \n", a);
      matrix b= {{5, 10, 15, 20}, {25, 30, 35, 40}, {45, 50, 55, 60}};
      Print("b before Swap: \n", b);  
    //--- обменяем указатели на матрицы местами
      a.Swap(b);
      Print("a after Swap: \n", a);
      Print("b after Swap: \n", b);
      /*
      a before Swap:
      [[1,2,3]
      [4,5,6]]
      b before Swap:
      [[5,10,15,20]
      [25,30,35,40]
      [45,50,55,60]]
      
      a after Swap:
      [[5,10,15,20]
      [25,30,35,40]
      [45,50,55,60]]
      b after Swap:
      [[1,2,3]
      [4,5,6]]
      */
      vector v=vector::Full(10, 7);
      Print("v before Swap: \n", v);
      Print("b before Swap: \n", b);
      v.Swap(b);
      Print("v after Swap: \n", v);
      Print("b after Swap: \n", b);
      /*
      v before Swap:
      [7,7,7,7,7,7,7,7,7,7]
      b before Swap:
      [[1,2,3]
      [4,5,6]]
      
      v after Swap:
      [1,2,3,4,5,6]
      b after Swap:
      [[7,7,7,7,7,7,7,7,7,7]]
      */
     }
    Метод Swap также позволяет работать с динамическими массивами (массив фиксированного размера в качестве параметра передавать нельзя). При этом массив может быть любой размерности, но согласованного размера. Это означает, что общий размер матрицы или вектора должен быть кратен нулевой размерности массива. Нулевой размерностью массива называется количество элементов, которые содержатся по первому индексу массива. Например, для динамического трехмерного массива double array[][2][3] нулевой размерностью будет произведение размеров второго и третьего измерения, то есть 2x3=6. Значит, такой массив можно использовать в методе Swap только с матрицами и векторами, общий размер которых кратен 6: 6, 12, 18, 24 и т.д.

    Покажем это на примере:
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
     {
    //--- заполним матрицу 1x10 значением 7.0
      matrix m= matrix::Full(1, 10, 7.0);
      Print("matrix before Swap:\n", m);
    //--- попробуем провести обмен между матрицей и массивом
      double array_small[2][5]= {{1, 2, 3, 4, 5}, {6, 7, 8, 9, 10}};
      Print("array_small before Swap:");
      ArrayPrint(array_small);
      if(m.Swap(array_small))
       {
        Print("array_small after Swap:");
        ArrayPrint(array_small);
        Print("matrix after Swap: \n", m);
       }
      else // размер матрицы не кратен размеру первого измерения массива
       {
        Print("m.Swap(array_small) failed. Error ", GetLastError());
       }
      /*
      matrix before Swap:
      [[7,7,7,7,7,7,7,7,7,7]]
      array_small before Swap:
               [,0]     [,1]     [,2]     [,3]     [,4]
      [0,]  1.00000  2.00000  3.00000  4.00000  5.00000
      [1,]  6.00000  7.00000  8.00000  9.00000 10.00000
      m.Swap(array_small) failed. Error 4006
      */
    //--- возьмем матрицу побольше и снова попробуем провести обмен
      double array_static[3][10]= {{1, 2, 3, 4, 5, 6, 7, 8, 9, 10},
         {2, 4, 6, 8, 10, 12, 14, 16, 18, 20},
         {3, 6, 9, 12, 15, 18, 21, 24, 27, 30}
       };
      Print("array_static before Swap:");
      ArrayPrint(array_static);
      if(m.Swap(array_static))
       {
        Print("array_static after Swap:");
        ArrayPrint(array_static);
        Print("matrix after Swap: \n", m);
       }
      else // статический массив нельзя использовать для обмена с матрицей
       {
        Print("m.Swap(array_static) failed. Error ", GetLastError());
       }
      /*
      array_static before Swap:
             [,0]     [,1]     [,2]     [,3]     [,4]     [,5]     [,6]     [,7]     [,8]     [,9]
      [0,]  1.00000  2.00000  3.00000  4.00000  5.00000  6.00000  7.00000  8.00000  9.00000 10.00000
      [1,]  2.00000  4.00000  6.00000  8.00000 10.00000 12.00000 14.00000 16.00000 18.00000 20.00000
      [2,]  3.00000  6.00000  9.00000 12.00000 15.00000 18.00000 21.00000 24.00000 27.00000 30.00000
      m.Swap(array_static) failed. Error 4006
      */
    //--- еще одна попытка обменять массив и матрицу
      double array_dynamic[][10];    // динамический массив
      ArrayResize(array_dynamic, 3); // выставим размер первого измерения
      ArrayCopy(array_dynamic, array_static);
    //--- теперь для обмена используем динамический массив
      if(m.Swap(array_dynamic))
       {
        Print("array_dynamic after Swap:");
        ArrayPrint(array_dynamic);
        Print("matrix after Swap: \n", m);
       }
      else //  нет ошибки
       {
        Print("m.Swap(array_dynamic) failed. Error ", GetLastError());
       }
      /*
      array_dynamic after Swap:
            [,0]    [,1]    [,2]    [,3]    [,4]    [,5]    [,6]    [,7]    [,8]    [,9]
      [0,] 7.00000 7.00000 7.00000 7.00000 7.00000 7.00000 7.00000 7.00000 7.00000 7.00000
      matrix after Swap:
      [[1,2,3,4,5,6,7,8,9,10,2,4,6,8,10,12,14,16,18,20,3,6,9,12,15,18,21,24,27,30]]
      */
     }
  4. Добавлены методы LossGradient для векторов и матриц. Данный метод вычисляет вектор или матрицу частных производных функции потерь по предсказанным значениям. В линейной алгебре такой вектор называется градиентом и применяется в машинном обучении.
    vector vector::LossGradient(const vector &expected,ENUM_LOSS_FUNCTION loss) const;
    matrix matrix::LossGradient(const matrix &expected,ENUM_LOSS_FUNCTION loss) const;
  5. Включено использование FOREIGN KEYS в SQLite, что позволяет строить связи между таблицами в SQL-запросах.   Пример:
    CREATE TABLE artist(
      artistid    INTEGER PRIMARY KEY, 
      artistname  TEXT
    );
    
    CREATE TABLE track(
      trackid     INTEGER, 
      trackname   TEXT, 
      trackartist INTEGER,
      FOREIGN KEY(trackartist) REFERENCES artist(artistid)
    );

  6. Исправлен выбор нужного метода класса в зависимости от константности метода и объекта.

MetaEditor

  1. Увеличена поддерживаемая длина комментариев при коммитах в хранилище MQL5 Storage.  Подробные комментарии при отправке изменений в хранилище считаются хорошим тоном при работе над большими проектами, но длина таких сообщений ранее была ограничена 128 символами. Теперь лимит установлен в 260 символов.

MetaTester

  1.  Повышена чувствительность у переключателя скорости тестирования в визуальном режиме.

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


17 сентября 2022
MetaTrader 5 build 3440: Новый отчет по торговому счету

Terminal

  1. Добавлен новый отчет по торговой истории счета. По набору параметров и представлению информации он схож с уже привычными отчетами по Сигналам. Теперь и в самой платформе вам станут доступны:
    • Помесячные показатели прироста в виде графика и таблицы
    • График изменения эквити
    • Лепестковая диаграмма, позволяющая быстро оценить состояние счета
    • Статистика сделок по инструментам
    • Множество дополнительных показателей для анализа торговли

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


  2. Исправлено заполнение доски опционов при несовпадении количества или типа инструмента у контрактов Call и Put.
  3. Исправлен некорректный выбор позиции в торговом диалоге при закрытии позиции встречной. Ошибка возникала при сортировке доступных встречных ордеров по любой колонке, кроме тикета.
  4. Ускорен вывод записей в журнал платформы.
  5. Исправлено отображение комментариев на графиках пользовательских символов.

MQL5

  1. Исправлена работа функции CArrayList::LastIndexOf. Ранее она всегда возвращала -1 вместо индекса последнего найденного элемента.
  2. Добавлен метод векторов и матриц Assign. Он позволяет заменить содержимое матрицы/вектора данными переданной матрицы/вектора или массива.
    bool vector<TDst>::Assign(const vector<TSrc> &assign);
    bool matrix<TDst>::Assign(const matrix<TSrc> &assign);
    
    Пример:
      //--- копирование матриц
      matrix b={};
      matrix a=b;
      a.Assign(b);
      
      //--- копирование массива в матрицу
      double arr[5][5]={{1,2},{3,4},{5,6}};
      Print("array arr");
      ArrayPrint(arr);
      b.Assign(arr);
      Print("matrix b \n",b);
    /*
    array arr
            [,0]    [,1]    [,2]    [,3]    [,4]
    [0,] 1.00000 2.00000 0.00000 0.00000 0.00000
    [1,] 3.00000 4.00000 0.00000 0.00000 0.00000
    [2,] 5.00000 6.00000 0.00000 0.00000 0.00000
    [3,] 0.00000 0.00000 0.00000 0.00000 0.00000
    [4,] 0.00000 0.00000 0.00000 0.00000 0.00000
    matrix b 
    [[1,2,0,0,0]
     [3,4,0,0,0]
     [5,6,0,0,0]
     [0,0,0,0,0]
     [0,0,0,0,0]]
    
    */
  3. Добавлен метод векторов и матриц CopyRates. Он позволяет легко копировать массивы ценовых данных в векторы и матрицы.
    bool matrix::CopyRates(string symbol,ENUM_TIMEFRAMES period,ulong rates_mask,ulong from,ulong count);
    bool vector::CopyRates(string symbol,ENUM_TIMEFRAMES period,ulong rates_mask,ulong from,ulong count);
    Тип копируемых данных указывается в параметре rates_mask при помощи перечисления ENUM_COPY_RATES. Доступны следующие значения:
    COPY_RATES_OPEN
    COPY_RATES_HIGH
    COPY_RATES_LOW
    COPY_RATES_CLOSE
    COPY_RATES_TIME
    COPY_RATES_VOLUME_TICK
    COPY_RATES_VOLUME_REAL
    COPY_RATES_SPREAD
    COPY_RATES_OHLC
    COPY_RATES_OHLCT
    Последние два значения предназначены для удобного выбора сразу нескольких основных параметров бара — цен Open, High, Low, Close и времени.

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

  4. Исправлено отображение объектов "Текстовая метка". При использовании свойств OBJPROP_XOFFSET и OBJPROP_YOFFSET на график мог выводиться неверный фрагмент изображения.

  5. Исправлена ошибка изменения константного параметра, переданного в функцию в виде ссылки на указатель объекта.

    Напомним, что спецификатор const объявляет переменную константой и не позволяет изменять значение этой переменной в процессе выполнения программы. Допускается только однократная инициализация переменной при ее объявлении. Пример константных переменных в функции OnCalculate:

    int OnCalculate (const int rates_total,      // размер массива price[]
                     const int prev_calculated,  // обработано баров на предыдущем вызове
                     const int begin,            // откуда начинаются значимые данные
                     const double& price[]       // массив для расчета
       );
    

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

    class A {};
    const A *a = new A;
    
    void foo( const A*& b )
      {
       b = a;
      }
    
    void OnStart()
      {
            A *b; 
            foo(b); // недопустимо
            Print( a,":",b );
      }
    Теперь данная недопустимая операция будет детектироваться компилятором и выдавать ошибку.

MetaEditor

  1. Исправлено отображение ссылок на комплексные числа в отладчике.
  2. Улучшена работа MQL5 Cloud Protector. Ранее в редких случаях защита файлов могла завершаться ошибкой.
  3. Исправления по крешлогам.


Новый веб-терминал MetaTrader 5

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



По сравнению со старой версии в нем появилось множество новых функций:

  • Возможность запрашивать реальные счета с заполнением детальной формы регистрации и предоставлением подтверждающих документов
  • Поддержка подписок на ценовые данные и возможность получения котировок с задержкой
  • Большее количество аналитических объектов, более удобное управление
  • Отображение входов и выходов из рынка на графике
  • Отображение на графике событий экономического календаря
  • Удобная настройка инструментов в Обзоре рынка, отображение дневного изменения цены
  • Существенно упрощен интерфейс: убрано контекстное меню графика и верхнее меню; все команды для управления графиком, наложения объектов и индикаторов размещены на панелях слева и сверху; оставшиеся команды размещены в одном меню-гамбургере
  • Ночная тема интерфейса
Попробуйте новый веб-терминал на www.mql5.com прямо сейчас. В скором времени он появится и у ваших брокеров.
4 августа 2022
MetaTrader 5 build 3390: Float в OpenCL и математических функциях, методы активации и потерь для машинного обучения

Terminal

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

    Добавлено автоматическое открытие туториала при первом подключении к торговому счету.

  2.  Исправлена ошибка групповых операций "Закрыть прибыльные/убыточные позиции". Ранее для закрытия соответствующих позиций платформа использовала встречные позиции при их наличии. Например, если у вас было две убыточные позиции Buy по EURUSD и одна прибыльная позиция Sell по EURUSD, то при массовом закрытии убыточных позиций были бы закрыты все три имеющиеся позиции. Buy и Sell были бы закрыты операцией Close by, а оставшаяся Buy — обычной операцией закрытия. Теперь команды работают как запланировано, закрывая только выбранные позиции — прибыльные или убыточные.

  3. Исправлено отображение ценовой истории для отрицательных цен на графиках с периодом D1. Теперь графики с негативными ценами отображаются правильно на всех таймфреймах.
  4. Оптимизировано и значительно снижено потребление системных ресурсов терминалом.
  5. Обновлена база фундаментальных данных торговых инструментов. Количество агрегаторов, доступных для просмотра биржевого инструмента, расширено до 15, что позволяет находить информацию по максимально большому числу тикеров на самых популярных экономических агрегаторах.


    Обновлена база фундаментальных данных торговых инструментов

    На мировом рынке котируются не менее 7 000 ликвидных акций и более 2 000 ETF. Кроме того, есть множество фьючерсов и других производных инструментов. Платформа MetaTrader 5 содержит огромную базу данных по биржевым инструментам и позволяет прямо из Market Watch в один клик перейти на сайт агрегатора для получения фундаментальных данных. Для удобства инвесторов для каждой ценной бумаги мы предлагаем на выбор множество источников информации.

  6. Исправлена подстановка уровней Стоп Лосс и Тейк Профит в окне выставления нового ордера. Теперь для счетов, работающих в режиме FIFO, значения стоп-уровней будут автоматически устанавливаться в соответствии со стоп-уровнями уже открытых позиций по тому же инструменту. Это необходимо для соблюдения правила FIFO.

MQL5

  1. Математические функции теперь могут работать с матрицами и векторами.

    Мы продолжаем расширять возможности платформы MetaTrader 5 для алготрейдинга и машинного обучения. Ранее мы добавили новый тип данных — матрицы и векторы, которые позволяют отказаться от использования массивов для обработки данных. Для работы с ними мы добавили в язык MQL5 более 70 методов, которые позволяют проводить вычисления из линейной алгебры и статистики в виде одной операции. Умножение, преобразование и решение системы уравнений — всё это теперь делается просто и без лишнего программирования. Добавление новых типов не оставило в стороне и математические функции.

    Математические функции изначально были предназначены для проведения математических операций над скалярными величинами. Теперь большая часть этих функций может использоваться и с новыми типами данных — матрицами и векторами — MathAbs, MathArccos, MathArcsin, MathArctan, MathCeil, MathCos, MathExp, MathFloor, MathLog, MathLog10, MathMod, MathPow, MathRound, MathSin, MathSqrt, MathTan, MathExpm1, MathLog1p, MathArccosh, MathArcsinh, MathArctanh, MathCosh, MathSinh, MathTanh. В этом случае матрица или вектор обрабатываются почленно. Пример:
    //---
      matrix a= {{1, 4}, {9, 16}};
      Print("matrix a=\n",a);
    
      a=MathSqrt(a);
      Print("MatrSqrt(a)=\n",a);
      /*
       matrix a=
       [[1,4]
        [9,16]]
       MatrSqrt(a)=
       [[1,2]
        [3,4]]
      */
    В случае MathMod и MathPow в качестве второго параметра может быть использован как скаляр, так и матрица или вектор соответствующего размера.

    Покажем на примере, как вычислить стандартное отклонение с помощью математических функций над вектором.
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
     {
    //--- используем инициализирующую функцию для заполнения вектора
      vector r(10, ArrayRandom); // массив случайных чисел от 0 до 1
    //--- вычислим среднее значение
      double avr=r.Mean();       // среднее значение массива
      vector d=r-avr;            // вычислим массив отклонений от среднего значения
      Print("avr(r)=", avr);
      Print("r=", r);
      Print("d=", d);
      vector s2=MathPow(d, 2);   // массив квадратов отклонений
      double sum=s2.Sum();       // сумма квадратов отклонений
    //--- вычислим стандартное отклонение 2-мя способами
      double std=MathSqrt(sum/r.Size());
      Print(" std(r)=", std);
      Print("r.Std()=", r.Std());    
     }
    /*
      avr(r)=0.5300302133243813
      r=[0.8346201971495713,0.8031556138798182,0.6696676534318063,0.05386516922513505,0.5491195410016175,0.8224433118686484,...
      d=[0.30458998382519,0.2731254005554369,0.1396374401074251,-0.4761650440992462,0.01908932767723626,0.2924130985442671, ...
       std(r)=0.2838269732183663
      r.Std()=0.2838269732183663
    */ 
    //+------------------------------------------------------------------+
    //| Заполняет вектор случайными значениями                           |
    //+------------------------------------------------------------------+
    void ArrayRandom(vector& v)
     {
      for(ulong i=0; i<v.Size(); i++)
        v[i]=double(MathRand())/32767.;
     }
    

  2. В шаблонных функциях теперь можно использовать записи matrix<double>, matrix<float>, vector<double>, vector<float> вместо соответствующих типов matrix, matrixf, vector, vectorf.
  3. Доработаны математические функции для работы с типом float. В связи с появившейся возможностью применения математических функций к матрицам и векторам типа float, были также доработаны соответствующие функции, применяемые к скалярам типа float. Раньше параметры этих функций безусловно приводились к типу double, вызывалась соответствующая реализация математической функции, и затем результат приводился к типу float. Теперь в случае типа float параметры и результаты не подвергаются приведению, так как вызываются реализации математических функций, соответствующих типу float.

    Разница в вычислениях на примере математического синуса:

    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
     {
    //---  массив случайных чисел от 0 до 1
      vector d(10, ArrayRandom);
      for(ulong i=0; i<d.Size(); i++)
       {
        double delta=MathSin(d[i])-MathSin((float)d[i]);
        Print(i,". delta=",delta);
       }
     }
    /*
       0. delta=5.198186103783087e-09
       1. delta=8.927621308885136e-09
       2. delta=2.131878673594656e-09
       3. delta=1.0228555918923021e-09
       4. delta=2.0585739779477308e-09
       5. delta=-4.199390279957527e-09
       6. delta=-1.3221741035351897e-08
       7. delta=-1.742922250969059e-09
       8. delta=-8.770715820283215e-10
       9. delta=-1.2543186267421902e-08
    */
    //+------------------------------------------------------------------+
    //| Заполняет вектор случайными значениями                           |
    //+------------------------------------------------------------------+
    void ArrayRandom(vector& v)
     {
      for(ulong i=0; i<v.Size(); i++)
        v[i]=double(MathRand())/32767.;
     }

  4. Добавлены методы матриц и векторов Activation (активационная функция) и Derivative (производная активационной функции) с параметрами:
    AF_ELU               Exponential Linear Unit
    AF_EXP               Exponential
    AF_GELU              Gaussian Error Linear Unit
    AF_HARD_SIGMOID      Hard Sigmoid
    AF_LINEAR            Linear
    AF_LRELU             Leaky REctified Linear Unit
    AF_RELU              REctified Linear Unit
    AF_SELU              Scaled Exponential Linear Unit
    AF_SIGMOID           Sigmoid
    AF_SOFTMAX           Softmax
    AF_SOFTPLUS          Softplus
    AF_SOFTSIGN          Softsign
    AF_SWISH             Swish
    AF_TANH              Hyperbolic Tangent
    AF_TRELU             Thresholded REctified Linear Unit
    Функция активации в нейронной сети определяет, как взвешенная сумма входного сигнала преобразуется в выходной сигнал узла или узлов на уровне сети. Выбор функции активации имеет большое влияние на возможности и производительность нейронной сети. В разных частях модели могут использоваться разные функции активации. В MQL5 реализованы не только все известные функции активации, но и производные активационной функции. Производные функции нужны для быстрого вычисления поправки на основании полученной ошибки во время обучения нейронной сети.
  5. Добавлен метод матриц и векторов Loss (функция потерь) со следующими параметрами:
    LOSS_MSE            Mean Squared Error
    LOSS_MAE            Mean Absolute Error
    LOSS_CCE            Categorical Crossentropy
    LOSS_BCE            Binary Crossentropy
    LOSS_MAPE           Mean Absolute Percentage Error
    LOSS_MSLE           Mean Squared Logarithmic Error
    LOSS_KLD            Kullback-Leibler Divergence
    LOSS_COSINE         Cosine similarity/proximity
    LOSS_POISSON        Poisson
    LOSS_HINGE          Hinge
    LOSS_SQ_HINGE       Squared Hinge
    LOSS_CAT_HINGE      Categorical Hinge
    LOSS_LOG_COSH       Logarithm of the Hyperbolic Cosine
    LOSS_HUBER          Huber

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

  6. Добавлены методы матриц и векторов matrix::CompareByDigits и vector::CompareByDigits. Они сравнивают элементы двух матриц/векторов на совпадение значащих цифр.

  7. Добавлена поддержка функций MathMin и MathMax для строк. В этом случае функции будут использовать лексикографическое сравнение — буквы сравниваются согласно алфавиту и с учетом регистра.

  8. Увеличено максимальное количество объектов OpenCL c 256 до 65536. Хендлы на OpenCL-объекты в MQL5-программе создаются с помощью функций CLContextCreate, CLBufferCreate и CLProgramCreate. Прежнее ограничение в 256 хендлов не позволяло эффективно работать в методах машинного обучения.

  9. Разрешено использование OpenCL на картах без поддержки double. Ранее в MQL5-программах безусловно использовались только GPU с поддержкой double, хотя множество задач допускают и предназначены для расчетов с использованием float. Тип float изначально считается родным для проведения параллельных вычислений, так как занимает меньше места. Теперь это требование убрано.

    Если для решения задачи требуется использовать только GPU с поддержкой double, то это можно явно указать при вызове CLContextCreate с помощью нового значения CL_USE_GPU_DOUBLE_ONLY (разрешается использовать только устройства, которые поддерживают вычисления с типом double).
       int cl_ctx;
    //--- инициализация OpenCL контекста
       if((cl_ctx=CLContextCreate(CL_USE_GPU_DOUBLE_ONLY))==INVALID_HANDLE)
         {
          Print("OpenCL not found");
          return;
         }

  10. Исправлена работа функции CustomBookAdd. Ранее, если в поле MqlBookInfo::volume_real указывалось нулевое значение, снимок стакана цен не создавался. Теперь проверка выполняется так:
    Передаваемые данные проверяются на корректность: для каждого элемента должны быть указаны тип, цена и объем. При этом MqlBookInfo.volume и MqlBookInfo.volume_real не должны быть нулевыми или отрицательными: если оба объема отрицательны, то это будет считаться ошибкой. Указывать можно любой из объемов или оба — берется тот, который указан или является положительным:

       volume=-1 && volume_real=2 — будет использован volume_real=2,

       volume=3 && volume_real=0 — будет использован volume=3.

    Объем с повышенной точностью MqlBookInfo.volume_real имеет больший приоритет по сравнению с обычным MqlBookInfo.volume. Если для элемента стакана указаны оба значения, будет использовано volume_real.

    Если хотя бы один элемент стакана описан неверно, система отбросит переданное состояние полностью.

  11. Исправлена работа функции CalendarValueLast. Ошибка заключалась в том, что в некоторых случаях последовательные вызовы функции после изменений в экономическом календаре (параметр change получал новое значение после вызова) могли пропускать события при использовании фильтра по валюте.
    CalendarValueLast(change, result, "", "EUR")
  12. Исправлено поведение функции ArrayBSearch — при наличии нескольких одинаковых элементов возвращается ссылка на первый по порядку, а не на случайный, как было ранее.
  13. Исправлен учёт видимости шаблонной функции в классе. Ошибка заключалась в том, что функции шаблона класса, объявленные как private/protected, оказывались фактически общедоступными (public).

MetaEditor

  1. Исправлены ошибки и неоднозначное поведение MetaAssist.
  2. Добавлена поддержка макроса %terminal%, который означает путь к каталогу данных платформы, где установлен данный терминал. Например, %terminal%\MQL5\Experts. 

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

  3. Улучшено отображение массивов в отладчике.
  4. Увеличен буфер для копирования значений из отладчика.
  5. Улучшены подсказки при ошибках.
  6. В файле проекта *.mproj теперь прописываются относительные пути. Ранее пути были абсолютные, что приводило к ошибкам компиляции при перемещении проекта.
  7. Добавлено автоматическое встраивание BMP-ресурсов в виде глобально доступных 32-битных массивов битмапа при включении в проекты. Это избавляет от необходимости вызывать в коде ResourceReadImage для чтения графического ресурса.
    'levels.bmp' as 'uint levels[18990]'
    
  8. Улучшено чтение расширенных форматов BMP-файлов.
  9. Обновлены переводы пользовательского интерфейса.
  10. Исправления по крешлогам.
2 июня 2022
MetaTrader 5 build 3320: Улучшения и исправления

Terminal

  1. Расширены подсказки к объектам сделок, отображаемым на графиках.
    • Для сделок выхода из рынка добавлен показ прибыли.
    • Для сделок, совершенных в результате срабатывания Тейк Профита или Стоп Лосса, добавлена соответствующая индикация — TP/SL.

    Аналогичные подсказки добавлены к линиям, соединяющим сделки входа и выхода.

    Расширены подсказки к объектам сделок


  2. Ускорена работа графической системы.
  3. Добавлено журналирование групповых операций над открытыми ордерами и позициями. При выполнении такой команды в журнал выводится сообщение вида "bulk closing of XXX positions started".
  4. Исправлено групповое закрытие встречных позиций.
  5. Исправлено обновление объектов, которыми отображается торговая история на графике. Ошибка возникала при изменении торгового инструмента у графика.

MQL5

  1. Продолжается работа над функциями для матриц и векторов: добавляется поддержка float и complex.
  2. MQL5: Оператор "!" (LNOT) для указателя теперь проверяет его на валидность через неявный вызов функции CheckPointer. Для быстрой проверки на NULL следует использовать оператор "==". Например: ptr==NULL или ptr!=NULL.

MetaTester

  1. Исправлено отображение объектов сделок на графике тестирования.
  2. Ускорена работа графической системы.

MetaEditor

  • Обновлены переводы интерфейса.

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

20 мая 2022
MetaTrader 5 build 3300: Быстрая компиляция и улучшенная навигация по коду в MetaEditor

Terminal

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



  2. Ускорена отрисовка графического интерфейса.
  3. Улучшена поддержка адресов IPv6.
  4. Исправлен расчет высоты нижнего поля даты и ширины правого поля цены при первом запуске платформы.

MQL5

  1. Добавлена функция для работы с матрицами и векторами —  RegressionMetric. Она задает метрику для оценки регрессии.
     double vector.RegressionError(const enum lr_error);
     double matrix.RegressionError(const enum lr_error);
     vector matrix.RegressionError(const enum lr_error,const int axis);
    В качестве метрик могут использоваться:
    enum REGRESSION_ERROR
      {
       REGRESSION_MAE,     // Средняя абсолютная ошибка
       REGRESSION_MSE,     // Средняя квадратичная ошибка
       REGRESSION_RMSE,    // Корень из средней квадратичной ошибки
       REGRESSION_R2,      // R в квадрате
       REGRESSION_MAPE,    // Средняя абсолютная ошибка в процентах
       REGRESSION_MSPE,    // Среднеквадратичная ошибка в процентах
       REGRESSION_RMSLE    // Среднеквадратичная логарифмическая ошибка
      };
  2. Добавлена возможность записи массивов с размером данных более INT_MAX (массивы структур).

MetaEditor

  1. Доработана панель вкладок:
    • Панель не скрывается, даже если открыто только одно окно. Таким образом, вам всегда остаются доступны команды контекстного меню вкладки.
    • Для каждой вкладки добавлена кнопка 'X' для закрытия. Помимо этого, вкладки можно закрывать средней кнопкой мыши или через контекстное меню.



  2. Добавлена команда для быстрой компиляции программ. В этом режиме не выполняется оптимизация кода, что значительно сокращает время создания исполняемого файла EX5. Используйте этот режим в активной стадии разработки, когда требуется быстро проверить написанный код. А уже при компиляции программы для реальной работы включайте режим максимальной оптимизации для наилучшей производительности.



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

  3. Улучшено управление кодом:
    • Разделены команды для перехода к объявлению и реализации. Ранее использовалась одна команда, которая выводила меню выбора. Теперь вы сразу можете переходить к необходимой части кода.
    • Добавлена подстановка распознанного ключевого слова по нажатию "Tab" в дополнение в "Enter".




  4. Добавлена возможность автоматического отображения локальных переменных в списке наблюдения в отладчике. Для этого включите опцию "Локальные" в контекстном меню. Во время отладки по мере перехода по коду в список будут автоматически выводиться переменные из текущей области видимости.



  5. Улучшена работа списка наблюдения в отладчике для векторов и матриц.
  6. Исправлены пути в проектных файлах. Ошибка могла приводить к пропаданию файлов из проектов.

Tester

  1. Улучшена остановка тестерных агентов при завершении работы платформы.
  2. Добавлен пятый узел для MQL5 Cloud Network, он размещен в Гонконге. Это ускорит оптимизацию роботов с использованием сети в ближайших регионах.

Исправления по крешлогам.
29 апреля 2022
MetaTrader 5 build 3280: Улучшения и исправления по отзывам трейдеров

Terminal

  1. Исправлено заполнение стандартных уровней Trailing Stop в контекстном меню открытых ордеров и позиций.



  2. Обновлены переводы пользовательского интерфейса.

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



21 апреля 2022
MetaTrader 5 build 3270: Улучшения и исправления

Terminal

  1. Улучшен встроенный чат:
    • Обновлен дизайн — теперь сообщения показывают без "облачков", разгружая диалоги от лишних деталей. Добавлены аватары и разделители дат.
    • В меню сообщений добавлены команды копирования и удаления.
    • Исправлены ошибки и повышена стабильность работы.



  2. Исправлена работа команды для группового закрытия позиций. Ошибка возникала на счетах с хеджиноговой системой учета позиций.
  3. Исправлен учет некоторых типов сделок при формировании истории позиций.

Исправления по крешлогам.
15 апреля 2022
MetaTrader 5 build 3260: Массовые операции, функции матриц и векторов и улучшения в чате

Terminal

  1. Добавлены команды для массового закрытия позиций и снятия отложенных ордеров.

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



    В меню всегда доступны команды:
    • Закрытие всех позиций. Для хеджинговых счетов система в первую очередь пытается закрыть позиции встречными, и уже оставшиеся позиции закрывает по обычной процедуре.
    • Закрытие всех прибыльных и всех убыточных позиций
    • Удаление всех отложенных ордеров
    • Удаление всех отложенных ордеров отдельно по типам: Limit, Stop, Stop Limit

    Если выбрать позицию, в меню появляются дополнительные команды:

    • Закрытие всех позиций по тому же символу
    • Закрытие всех позиций в том же направлении (для хеджинговых счетов)
    • Закрытие встречных позиций по тому же символу (для хеджинговых счетов)
    • Разворот позиций (для неттинговых счетов)

    Если выбрать отложенный ордер, в меню появляются дополнительные команды:

    • Удаление всех отложенных ордеров по тому же символу
    • Удаление всех отложенных ордеров того же типа по тому же символу

    Для работы этих команд пользователь должен разрешить торговлю одним кликом в настройках платформы: Сервис \ Настройки \ Торговля.
  2. Расширены функции встроенных чатов:
    • Добавлена возможность отвечать на сообщение. Текст исходного сообщения будет включаться в ответ в виде цитаты.
    • Добавлена возможность создавать сообщения с разными типами содержимого: изображения с текстом, текст с вложениями и т.д.
    • Исправлено отображение разделителя прочитанных и непрочитанных сообщений.
    • Исправлены различные ошибки и повышена стабильность работы.



  3. Оптимизирована и значительно ускорена работа графической системы терминала. На отображение интерфейса будет тратиться меньше ресурсов.
  4. Исправлен расчет дневного изменения цены для фьючерсов. Если брокер транслирует клиринговую цену, то расчет будет осуществляться от нее.
    ((Last - Клиринговая цена)/Клиринговая цена)*100
    Полное описание расчета для всех видов инструментов доступно в документации.

  5. Исправлены ошибки при покупке MQL5-сервисов:
    • В некоторых случаях платежные системы могли выводить некорректные сообщения об ошибках при удачных операциях.
    • На промежуточных этапах аренды продукта в Маркете на странице могла отображаться некорректная цена.

  6. Исправлена работа кнопки "Запуск" на странице купленного/скачанного продукта в Маркете. Теперь она корректно запускает приложение на первом из открытых графиков.
  7. Исправлен учет некоторых типов сделок при формировании истории позиций.

MQL5

  1. Добавлены новые функции для работы с матрицами и векторами:
    • Median — возвращает медиану элементов матрицы или вектора
    • Quantile — возвращает q-й квантиль элементов матрицы/вектора или элементов вдоль указанной оси матрицы
    • Percentile — возвращает q-й перцентиль элементов матрицы/вектора или элементов вдоль указанной оси матрицы
    • Std — рассчитывает стандартное отклонение элементов матрицы или вектора
    • Var — рассчитывает дисперсию элементов матрицы или вектора
    • CorrCoef — рассчитывает коэффициент корреляции матрицы или вектора
    • Correlate — рассчитывает кросс-корреляцию двух векторов
    • Convolve — возвращает дискретную линейную свертку двух векторов
    • Cov — вычисляет ковариационную матрицу

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

    На данный момент доступно три метода:
    • ArgSort — сортирует массив по заданному измерению, по умолчанию — по последнему (axis=-1).
    • Range — возвращает число элементов в указанном измерении массива. Аналог ArrayRange.
    • Size — возвращает количество элементов массива. Аналог ArraySize.

    Пример:
    void OnStart()
      {
       int arr[4][5]=
         {
            {22, 34, 11, 20,  1},
            {10, 36,  2, 12,  5},
            {33, 37, 25, 13,  4},
            {14,  9, 26, 21, 59}
         };
       ulong indexes[4][5];
    //--- Отсортируем массив
       arr.ArgSort(indexes,-1,0);
       Print("indexes");  
       ArrayPrint(indexes);
      }
    
    // Результат в журнале:
    // indexes
    //     [,0][,1][,2][,3][,4]
    // [0,]   4   2   3   0   1
    // [1,]   2   4   0   3   1
    // [2,]   4   3   2   0   1
    // [3,]   1   0   3   2   4

  3. Идет работа по добавлению встроенных методов для строк.
    На данный момент доступны следующие методы:
    • BufferSize — возвращает размер буфера, распределенного для строки.
    • Compare — сравнивает между собой две строки и возвращает результат сравнения в виде целого числа.
    • Length — возвращает число символов в строке.
    • Find — ищет подстроку в строке.
    • Upper — переводит строку в верхний регистр.
    • Lower — переводит строку в нижний регистр.
    • Replace — производит замену подстроки.
    • Reserve — резервирует буфер для строки.

    Все методы работают аналогично строковым функциям.

    Пример:
    void OnStart()
      {
       string test="some string";
       PrintFormat("String length is %d",test.Length());
      }
    
    // Результат в журнале:
    // String length is 11
  4. Добавлено значение SYMBOL_SUBSCRIPTION_DELAY в перечисление ENUM_SYMBOL_INFO_INTEGER — размер задержки у котировок, передаваемых по символу.

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

    Свойство можно запрашивать только для символов, выбранных в Обзоре рынка. В ином случае вы получите ошибку ERR_MARKET_NOT_SELECTED (4302).

  5. Добавлено свойство ACCOUNT_HEDGE_ALLOWED в перечисление ENUM_ACCOUNT_INFO_INTEGER — разрешение на открытие встречных позиций и отложенных ордеров. Используется только для хеджинговых счетов, позволяя реализовать требования некоторых регуляторов, когда на счете запрещается иметь встречные позиции, но разрешается иметь несколько позиций по одному символу в одном направлении.

    Если эта опция отключена, на счетах запрещается одновременно иметь разнонаправленные позиции и ордера по одному и тому же инструменту. Например, если на счете имеется позиция Buy, то пользователь не может открыть позицию Sell или выставить отложенный ордер на продажу. При попытке сделать это пользователю будет выдаваться ошибка TRADE_RETCODE_HEDGE_PROHIBITED.

  6. Добавлены новые свойства в перечисление ENUM_SYMBOL_INFO_DOUBLE:
    • SYMBOL_SWAP_SUNDAY
    • SYMBOL_SWAP_MONDAY
    • SYMBOL_SWAP_TUESDAY
    • SYMBOL_SWAP_WEDNESDAY
    • SYMBOL_SWAP_THURSDAY
    • SYMBOL_SWAP_FRIDAY
    • SYMBOL_SWAP_SATURDAY

    Они позволяют получить коэффициент начисления свопов для каждого дня недели. 1 — одиночное начисление свопов, 3 — тройное, 0 — начисление отсутствует.

  7. Исправлена ошибка в работе функций CopyTicks и CopyTicksRange, приводившая к отдаче устаревших данных при переходе через полночь. Ошибка возникала в случаях, когда по инструменту не поступали тики.
  8. Исправления по крешлогам.
11 февраля 2022
MetaTrader 5 build 3210: добавлены новые методы матриц и управление минимальным/максимальным значением индикатора

MQL5

  1. Добавлены функции Min, Max, ArgMin, ArgMax и Sum для векторов и матриц, которые позволяют находить минимальное и максимальное значения, соответствующие индексы и сумму.
  2. Добавлена поддержка методов Flat для матриц. Это позволяет адресоваться к элементу матрицы через один индекс, а не через два.
    double matrix::Flat(ulong index) const;      // getter
    void matrix::Flat(ulong index,double value); // setter

    Псевдокод вычисления адреса элемента матрицы:

    ulong row=index / mat.Cols();
    ulong col=index % mat.Cols();
    
    mat[row,col]

    Например, для матрицы matrix mat(3,3) доступы можно записать так:

      на чтение — x=mat.Flat(4), что эквивалентно записи x=mat[1][1]
      на запись — mat.Flat(5, 42), что эквивалентно записи mat[1][2]=42

    В случае вызова функции с некорректным для матрицы индексом будет сгенерирована критическая ошибка исполнения OutOfRange.

  3. Улучшено форматирование дробных чисел во входных параметрах MQL5-программы. При чтении некоторых вещественных чисел в input-параметры подставлялись числа с большим количеством нулей, например, 0.4 представлялось как 0.400000000002.
  4. Исправлены ошибки в математической библиотеке Math\Stat\Math.mqh. Кроме того, изменена работа функции MathSample этой библиотеки, чтобы соответствовать классическому поведению таких же математических библиотек при выборке с возвратом.
  5. Исправлена ошибка в работе CopyTicks/CopyTicksRange, приводящая к отдаче устаревших данных при переходе через полночь для тех случаев, когда по инструменту не поступают тики
  6. Добавлены новые значения INDICATOR_FIXED_MINIMUM и INDICATOR_FIXED_MAXIMUM в перечисление ENUM_CUSTOMIND_PROPERTY_INTEGER.
    При помощи этих свойств можно включать/отключать фиксирование минимального и максимального значений индикатора с помощью функции IndicatorSetInteger. При вызове IndicatorSetInteger(INDICATOR_FIXED_MINIMUM/INDICATOR_FIXED_MAXIMUM, true) используется текущее минимальное/максимальное значение, соответственно


Tester

  1. Изменен алгоритм расчета Sharpe Ratio — теперь он считается классическим способом, а его значение приводится к годовому интервалу. Предыдущий алгоритм строился на разбросе полученных прибылей и убытков (PnL), но не учитывал колебания эквити при открытых позициях. Теперь в расчет принимаются взлеты и падения эквити, а само значение коэффициента Шарпа трактуется классическим образом:
    •  Sharpe Ratio < 0              Стратегия убыточна, не годится. Плохо.
    •  0 < Sharpe Ratio  < 1.0    Риск не окупается. Такие стратегии могут браться в работу, если нет альтернатив. Неопределенно.
    • Sharpe Ratio ≥ 1.0             Если коэффициент Шарпа превышает единицу, это означает, что риск окупается, портфель/стратегия работает. Хорошо.
    • Sharpe Ratio ≥ 3.0            Высокий показатель говорит о том, что вероятность получить убыток в каждой конкретной сделке очень мала. Очень хорошо.

Terminal

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


Обновлена документация


28 января 2022
MetaTrader 5 build 3180: Векторы и матрицы в MQL5 и повышение удобства работы

Terminal

  1. Добавлена активация окна графика при переносе на него символа из "Обзора рынка" или торговой операции из истории счета.

    Оба эти действия меняют финансовый инструмент графика на выбранный. Ранее они не приводили к тому, чтобы окно графика становилось активным. Соответственно, некоторые дальнейшие действия, такие как вызов торгового диалога (F9) или изменение масштаба (+/-) при помощи горячих клавиш, могли неожиданно для пользователя применяться к другому графику. Теперь график, чей символ вы поменяли перетаскиванием, сразу становится выбранным для дальнейшей работы.

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




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

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

    Механизм используется, только если график открывается с шаблоном по умолчанию default.tpl. Если пользователь вручную отключит показ объемов в настройках графика, они не будут включаться опять при его переоткрытии. Пользовательские шаблоны не затрагиваются.

  4. Оптимизировано и значительно ускорено отображение пользовательского интерфейса.
  5. Доработана функция печати графиков, вызываемая через меню "Файл":
    • Исправлено сохранение настроек печати
    • Улучшен вид печатаемой страницы: увеличены линии сетки, скрыто название программы, обновлен шрифт заголовка
    • Увеличен диалог печати для корректного отображения интерфейса

  6. Исправлена работа поля объема в панели быстрой торговли на графике. Ранее после ввода нового значения и нажатия клавиши Tab значение сбрасывалось на предыдущее.
  7. Исправлен показ торговой истории на графике. Ранее при переключении между счетами операции от предыдущего счета не удалялись с графиков.
  8. Исправлена оплата сервисов MQL5.com с помощью PayPal.
  9. Исправлено зависание платформы при отображении графика волатильности опциона.
  10. Исправлена проверка прав при вступлении в групповой чат с участниками сообщества MQL5.com. Ранее вновь подключившийся пользователь мог только читать, но не писать сообщения.
  11. Заменена надпись на графике при отсутствии данных. Теперь вместо "Waiting for update" отображается имя инструмента, таймфрейм и описание инструмента.
  12. Доработана поддержка отрицательных цен, добавленная в билде 2450. Для соответствующих инструментов в "Обзоре рынка" теперь могут отображаться и нулевые значения.
  13. Исправлено отображение логотипов продуктов в Маркете при работе под Wine.

MQL5

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

    На данный момент уже готово множество функций:
    • Eye — создает матрицу с единицами по указанной диагонали и нулями в других местах.
    • Identity — создает матрицу указанного размера с единицами на главной диагонали и нулями в других местах.
    • Ones — создает матрицу указанного размера, заполненную единицами.
    • Zeroes — создает матрицу указанного размера, заполненную нулями.
    • Full — создает матрицу указанного размера, заполненную указанными значениями.
    • Copy — создает копию матрицы или вектора.
    • Diag — извлекает диагональ из матрицы, а также заполняет указанную диагональ значениями из вектора.
    • Tri — создает матрицу с единицами на заданной диагонали и под ней и нулями в других местах.
    • Row — возвращает строку матрицы в виде вектора, а также заполняет указанную строку значениями из вектора.
    • Col — возвращает столбец матрицы в виде вектора, а также заполняет указанный столбец значениями из вектора.
    • Rows — возвращает количество строк в матрице.
    • Cols — возвращает количество столбцов в матрице.
    • Transpose — транспонирование матрицы.
    • * — произведение матриц, векторов и скаляров — dot-продукт.
    • Power — возведение матрицы в степень.
    • Kron — произведение Кронекера.
    • Cholesky — разложение Холецкого.
    • QR — QR-разложение матрицы.
    • SVD — сингулярное разложение.
    • LU — LU-разложение матрицы.
    • LUP — LUP-разложение матрицы.
    • Norm — вычисление нормы матрицы.
    • Cond — вычисление числа обусловленности матрицы.
    • Spectrum — вычисление спектра матрицы.
    • Det — расчет определителя матрицы.
    • Rank — вычисление ранга матрицы.
    • SLogDet — получение знака и натурального логарифма определителя матрицы.
    • Trace — вычисление следа матрицы.
    • Solve — решение системы линейных уравнений.
    • LstSq — решение системы линейных уравнений методом наименьших квадратов.
    • Inv — расчет обратной матрицы.
    • PInv — расчет псевдообратной матрицы методом Мура — Пенроуза.
    • Compare — сравнение двух матриц с использованием эпсилона.

    Более подробная информация доступна в документации MQL5.

  2. Исправлены ошибки при работе с файлами и базами данных, связанные с ограничением на длину пути. В частности, функция DatabaseOpen позволяла установить путь больше разрешенного, что приводило к некорректному созданию базы. Теперь функция будет корректно возвращать код ошибки ERR_TOO_LONG_FILE_NAME.
  3. Исправлен контроль константности переменных. В некоторых случаях компилятор мог не выдавать ошибку "constant variable cannot be passed as reference".
  4. Исправлены ошибочные предупреждения компилятора об использовании неинициализированной переменной.
  5. Исправлена работа функции ChartWindowOnDropped для индикаторов. Ранее она всегда возвращала нулевое значение.
  6. В модуль интеграции с Python добавлена поддержка Python 3.10.

VPS

  1. Исправлено отображение пункта VPS в Навигаторе. В некоторых случаях он мог исчезать при переключении между счетами.

MetaEditor

  1. Исправлено разворачивание сложных выражений в окне наблюдения при отладке.
Tester
  1. : Исправлен экспорт отчетов тестирования в файл. Некоторые значения могли округляться некорректно, если в качестве валюты депозита использовалась валюта с точность 0 знаков после запятой. Например, JPY.
  2. Исправления по крешлогам.
22 октября 2021
MetaTrader 5 build 3091: Улучшения в работе

Terminal

  1. Исправлен переход на пустую страницу после покупки MQL5-сервисов. Теперь пользователи будут сразу переходить к результатам операции.
  2. Исправлено чрезмерное сжатие изображений документов, загружаемых при запросе реальных счетов. Это повысило качество автоматических проверок KYC и скорость принятия решений.
  3. Исправлена работа графика, открываемого при завершении тестирования.

MQL5

  1. Добавлена поддержка SQLite 3.36.0.

MetaEditor

  1. Добавлена подсветка фона парных скобок. Для включения перейдите в общие настройки MetaEditor.
  2. Улучшена работа отладчика MQL5-программ.

Исправления по крешлогам.
21 октября 2021
MetaTrader 5 build 3090: Улучшения исправления

Terminal

  1. Исправлена ошибка, из-за которой в некоторых случаях могли пропадать пользовательские торговые инструменты.
  2. Доработаны иконки меню и панелей инструментов.
  3. Добавлены три новых языка MQL5.com: французский, итальянский и турецкий.

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

  4. Исправления по крешлогам.

MQL5

  1. Исправлены ошибки в работе функции StringConcatenate.
  2. Исправлено выставление значения _LastError при работе с функцией FileSave. В некоторых случаях вместо описания ошибки, возникшей в функции, переменная могла содержать нулевое значение.
  3. Исправлен импорт данных из ресурсов в массивы типа double.

MetaTester

  1. Исправлена ошибка, приводившая к зависанию окна графика при визуальном тестировании.
Обновлена документация
14 октября 2021
MetaTrader 5 build 3081: Улучшения в MQL5-сервисах и обновленный дизайн

Terminal

  1. Улучшена навигация по сервисам MQL5.community.

    Подразделы Маркета, Сигналов и Хостинга вынесены в Навигатор из рабочей области. Это облегчит поиск продуктов, а также работу со своими покупками и подпискам. Для каждого сервиса добавлен раздел "Как это работает" с полезной информацией о его использовании.


    Улучшена навигация по сервисам MQL5.community


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

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


    В платформе обновлены все меню, панели инструментов и диалоги


  3. Добавлен показ издержек при совершении сделок в торговой истории. Эта функция используется у брокеров, регулируемых NFA.


    В истории счета теперь показываются издержки по сделкам


    Если ваш брокер включит расчет соответствующего показателя на своей стороне, в торговой истории среди доступных колонок появится "Издержки". Она показывает стоимость совершения сделки относительно средней цены инструмента (mid-point spread cost).

  4. Добавлена поддержка корейской версии MQL5.com.

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

  5. Исправлена загрузка пользовательских торговых инструментов. В некоторых случаях настройки вновь создаваемых символов могли переписывать настройки уже имеющихся.
  6.  Исправлено отображение торговой истории сигнала на графике. При включении соответствующей опции на графике помечались сделки сразу по всем инструментам, а не только по инструменту графика.
  7. Добавлен экспорт колонки "Сбор" в отчет по торговой истории. Ранее этот показатель отображался только в истории, но не сохранялся в файл.
  8. Оптимизирована и значительно ускорена работа панелей для торговли одним кликом в Обзоре рынка и на графиках.
  9. Исправлена работа поля "Коэффициенты маржи" у пользовательских торговых инструментов. В некоторых случаях заданные значения могли сбрасываться к нулевым.
  10. Продолжаются работы над сервисом подписок на дополнительные услуги от брокеров. Исправлены ошибки в окне подписки на котировки.
  11. Исправлено отображение аналитического объекта "Трендовая линия". Она могла исчезать при масштабировании и изменении размера окна графика.
  12. Исправлено отображение аналитического объекта "Прямоугольник". При выходе одной из точек привязки за область видимости графика объект мог исчезать.
  13. Исправлена и значительно ускорена работа встроенных чатов MQL5.community.
  14. Исправлено округление параметра "Стоимость" в списке открытых позиций. Ранее дробная часть значения могла не показываться.
  15. Исправлена проверка мобильных телефонов при открытии счетов. Для некоторых операторов из Китая телефон мог определяться как указанный некорректно.
  16. Добавлена поддержка паролей длиной более 32 символов в MQL5-аккаунтах.
  17. Исправлен экспорт сертификатов при работе в Wine. Эта функция используется для счетов с расширенной аутентификацией при их переносе из десктопной платформы в мобильную.
  18. Исправлена работа кнопок перехода к MQL5-сервисам, расположенным на нижней панели окна "Инструменты". При откреплении окна кнопки становились неактивными.
  19. Ограничен размер меню "Файл \ Новый график": не более 128 подменю с группами символов и не более 32 символов в каждом подменю. Это позволяет ускорить работу терминала и избежать зависаний при добавлении в "Обзор рынка" большого количества инструментов (2000 и более).

MQL5

  1. Продолжаются работы по добавлению поддержки векторов и матриц. Новые функции существенно расширят возможности для разработчиков решений на основе нейросетей.
  2. Добавлены значения DEAL_SL и DEAL_TP в перечисление ENUM_DEAL_PROPERTY_DOUBLE — уровни Стоп Лосс и Тейк Профит сделки.

    Для сделок входа и разворота эти свойства устанавливаются в соответствии со значением Стоп Лосс/Тейк Профит у ордеров, в результате исполнения которых они были совершены. Для сделок выхода используются значения Стоп Лосс/Тейк Профит соответствующих позиций на момент их закрытия.

  3. Добавлено значение MQL_HANDLES_USED в перечисление ENUM_MQL_INFO_INTEGER — количество активных объектов классов (хэндлов) у MQL-программы. Здесь учитываются как динамические (созданные через new), так и нединамические объекты, глобальные/локальные переменные или члены классов. Чем больше хэндлов использует программа, тем больше она потребляет ресурсов.

  4. Добавлены новые методы для работы со структурой MqlCalendarValue, описывающей событие экономического календаря:

    • HasActualValue(void) — возвращает true, если актуальное значение события задано, иначе false
    • HasForecastValue(void) — возвращает true, если прогнозное значение события задано, иначе false
    • HasPreviousValue(void) — возвращает true, если предыдущее значение события задано, иначе false
    • HasRevisedValue(void) — возвращает true, если пересмотренное значение события задано, в противном случае false
    • GetActualValue(void) — возвращает актуальное значение события (double) или nan, если оно не задано
    • GetForecastValue(void) — возвращает прогнозное значение события (double) или nan, если оно не задано
    • GetPreviousValue(void) — возвращает предыдущее значение события (double) или nan, если оно не задано
    • GetRevisedValue(void) — возвращает пересмотренное значение события (double) или nan, если оно не задано

  5. Исправлена отладка MQL5-программ, использующих библиотеки в виде EX5-файлов.
  6. Ускорена компиляция программ, содержащих большие массивы, инициализируемые последовательностью.
  7. Исправлена ошибка в функции CopyTicksRange, возникавшая при работе с данными пользовательских торговых инструментов. В некоторых случаях функция могла возвращать данные, не соответствующие запрошенному периоду.
  8. Исправлена проверка на наличие всех параметров шаблона при специализации по параметрам. В некоторых случаях компиляция кода с шаблонами под отладку могла приводить к ошибке "code generation error".

Signals

  1. Добавлена возможность автоматического продления подписки на Сигналы.

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


    Включите автоматическое продление подписки на Сигналы


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

    Не беспокойтесь об изменении стоимости подписки. Если цена увеличится, автоматическое продление не произойдет. Вы будете уведомлены об этом по почте, указанной в вашем MQL5-аккаунте.

    Автопродление можно включить или отключить в любой момент через раздел "Мои подписки" на MQL5.com.


    Управляйте автопродлением в разделе &quot;Мои подписки&quot; на MQL5.com


  2. Исправлены ошибки в отображении витрины сигналов. Теперь система будет более правильно учитывать совместимость сигналов с текущим счетом.

Market

  1. Добавлен поиск по имени и логину автора продукта на витрине Маркета. Ранее поиск работал только по названию и описанию продуктов.

VPS

  1. Улучшена система автоматического продления подписки на VPS.

    Ранее вы могли оплачивать автоматическое продление только с баланса MQL5-аккаунта. Соответственно, для того чтобы продление выполнилось, вам было необходимо иметь достаточную сумму на балансе.

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


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


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

MetaEditor

  1. Исправлен переход к объявлению функции или переменной при помощи клавиш Alt+G. Если объявление находилось ниже строки, из которой происходит вызов, переход не осуществлялся.
  2. Добавлен показ типа объекта для ссылок на объекты классов в отладчике.
  3. Добавлена поддержка отображения union в списке наблюдаемых выражений.

Tester

  1. Исправлена ошибка в визуальном тестировании. В некоторых случаях на график могли не выводиться используемые в эксперте индикаторы.

MetaTrader 5 iPhone/iPad, MetaTrader 5 Android

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


    В MetaTrader 5 для iPhone/iPad добавлены специальные предупреждения

  2. Добавлена возможность подключить счет к мониторингу в сервисе "Сигналы" прямо из мобильного приложения. Для этого выберите "Мониторинг счета" в меню. Для удобства в окно регистрации сразу подставляется номер счета и название брокера. Вам остается указать только имя сигнала и инвесторский пароль.

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

  3. Добавлена поддержка Huawei AppGallery и HMS Services для мобильных терминалов, работающих на Android OS. Владельцы смартфонов от Huawei смогут устанавливать приложение из своего магазина и работать с Push-уведомлениями.

Обновлена документация.
18 июня 2021
MetaTrader 5 build 2980: Push-уведомления о торговых операциях

Terminal

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



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

    Для получения уведомлений с сервера необходимо:
    • Иметь реальный счет — уведомления с сервера не работают для демо-счетов
    • Установить на свой смартфон мобильный терминал MetaTrader 5 для iOS или Android
    • Открыть в нем раздел сообщений, найти ваш MetaQuotes ID и указать его в настройках десктопного терминала
    • Включить уведомления с сервера в настройках десктопного терминала

    Доступность и детальность уведомлений зависит от вашего брокера

    Всего поддерживаются три типа уведомлений: об ордерах, о сделках и о балансовых операциях. При включении опции доступные виды уведомлений будут выведены в журнал терминала:
    '1222': subscribed to deals, orders, balance notifications from trade server

  2. Обновлена витрина MetaTrader VPS. Мы сделали ее более современной и удобной:
    • Интерфейс адаптируется под любую ширину экрана.
    • Витрина занимает меньше пространства по высоте, чтобы всегда помещаться в рабочем окне.
    • Необходимая информация появляется только в тот момент, когда она нужна. Пока вы не выбрали тариф, вам не показываются лишние детали оплаты.



  3. На панель тестера стратегий добавлены команды для быстрого переключения к MQL5-сервисам и окну "Инструменты". Они отображаются только в разделе "Обзор", в остальных вкладках панель используется для управления тестированием.



  4. Добавлено сохранение состояния окон для MQL5-сервисов. Если вы оставите Маркет открытым перед выключением терминала, вы найдете его в таком же состоянии при последующем включении.
  5. Исправлена периодическая синхронизация состояния MQL5-аккаунта. Ошибка в некоторых случаях могла приводить к невозможности копировать сигналы.
  6. Исправлено отображение подборки рекомендуемых продуктов в Маркете.
  7. Исправлена работа контекстного меню сигналов в Навигаторе. При помощи него можно перейти к просмотру сигнала, на который вы подписаны, а также отменить подписку.

MQL5

  1. В стандартной библиотеке исправлена ошибка в работе оператора "-" в реализации комплексных чисел (файл MQL5\Include\Math\Alglib\complex.mqh).
  2. В инициализирующих последовательностях теперь можно использовать любые выражения, а не только константные. Это повысит удобство использования и улучшит совместимость с кодом С++.
    struct POINT
      {
       int x,y;
      };
    
    int GetYFunc(y)
      {
       return(y * y);
      }
    
    void SomeFunction(int x1,int x2,int y)
      {
       POINT pt={ x1+x2, GetYFunc(y) };
       ProcessPoint(pt);
      };
  3. Исправлена ошибка, возникавшая при компиляции union с огромными массивами данных.
  4. Исправлена работа функции StringToCharArray. Теперь она преобразует всю переданную строку в массив Char, а не останавливается на первом терминирующем нуль-символе.
  5. Добавлен контроль явного присутствия в коде вызова конструктора для классов/структур, у которых родительский класс не имеет конструктора по умолчанию.

MetaEditor

  1. Добавлено отображение места вызова для inline-функций в отчете профилировщика.
    В приведенном ниже примере вызов func(); теперь подсвечивается:




    Сама функция func не подсвечена, так как ее код полностью помещен в OnStart.

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




    При создании проекта таким образом создается только пустой файл настроек "mqproj". Файлы для исходного кода в последующем необходимо создать самостоятельно.

  3. Ускорен запуск MetaEditor.
  4. Исправлена ошибка отображения данных в списке наблюдаемых выражений при отладке. В некоторых случаях в нем могли показываться некорректные значения переменных.
  5. Исправлено автоматическое добавление расширения ".py" к файлам скриптов на Python, создаваемым через MQL Wizard.

Обновлена документация.
21 мая 2021
MetaTrader 5 build 2940: Перенос витрин MQL5-сервисов в рабочую область и обновление дизайна

Terminal

  1. Сервисы "Маркет", "Сигналы" и "Виртуальный хостинг" перенесены в основную рабочую область платформы для более удобной работы.

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



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


    Помимо переноса мы полностью обновили дизайн сервисов. Он стал более легким и современным. В сигналах появились дополнительные данные, которые ранее были доступны только на витрине сайта MQL5.community: диаграмма-паутинка с основными характеристиками, показатель надежности и активности и т.д.



  2. Добавлена полная поддержка IPv6-адресов.

    Протокол IPv4, который сейчас используется в каждой сети, был создан более 30 лет назад. IP-адреса в нем состоят из 32 бит и представлены в виде четырех чисел по 8 бит, разделенных точками. Это позволяет получить более четырех миллиардов уникальных IP-адресов. Однако сейчас количество устройств и сайтов по всему миру выросло настолько, что адресов перестает хватать всем желающим.

    В связи с этим продукты постепенно переходят на параллельную поддержку более современного протокола — IPv6. В нем адрес состоит из 128 бит и представлен в виде x:x:x:x:x:x:x:x , где каждая буква x - это шестнадцатеричные значения шести 16-битных элементов адреса. Такой формат позволяет получить 5 x 10 ^ 28 уникальных адресов. Помимо значительно большего пространства адресов, протокол обладает рядом других преимуществ перед более старой версией. Прочитать о них можно в специализированных статьях.

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

  3. Продолжается работа над диспетчером задач, представленным в билде 2815. Теперь для графиков, на которых запущена отладка или профилирование MQL5-программ, есть явная индикация этого.



  4. Ускорен запуск платформы под Wine на компьютерах с macOS и Linux. Проведена общая оптимизация работы, исправлены ошибки:
    • Улучшено отображение меню, панелей инструментов и диалоговых окон.
    • Исправлены ошибки в отображении разделов "Маркет", "Сигналы" и "VPS". В частности, исправлена загрузка логотипов продуктов на витрине "Маркета".
    • Обновлен пакет для легкой установки MetaTrader 5 на компьютерах с macOS. При помощи него платформа устанавливается как обычное приложение.
      В пакет были включены дополнительные компоненты, необходимые для более стабильной и быстрой работы. Тем, кто его использует, настоятельно рекомендуется переустановить MetaTrader 5 по ссылке https://download.mql5.com/cdn/web/metaquotes.ltd/mt5/MetaTrader5.pkg.zip

    Если вы используйте CrossOver, полностью переустановите в нем MetaTrader 5, чтобы получить последнюю 64-битную версию платформы.
  5. Исправлена работа сочетания клавиш "Ctrl+F9". Теперь оно переключает фокус на вкладку торговли в "Инструментах".

MQL5

  1. Продолжается отказ от старых технологий, в том числе 32-битных компонентов:
    • 32-битные терминалы больше не могут загружать программы из "Маркета".
    • 32-битные терминалы не могут использовать сервис хостинга.
    • В 32-битных редакторах MetaEditor больше не доступна функция дополнительной защиты файлов через MQL5 Cloud Protector.
    • MQL5-программы, скомпилированные в слишком старых версиях MetaEditor (выпущенных 5 лет назад и более), не будут запускаться в новой версии терминала.

    Поддержка 32-битной версии платформы была остановлена год назад на билде 2361. Мы настоятельно рекомендуем перейти на 64-битную версию MetaTrader 5, чтобы использовать все возможности платформы.
    Всем продавцам, кто загружал в Маркет 32-битные версии продуктов, настоятельно рекомендуется перекомпилировать их в последнем 64-битном MetaEditor и загрузить обновленные версии. В ближайших версиях мы полностью отключим возможность запуска 32-битных MQL5-программ в терминалах.

  2. Добавлена поддержка работы с комплексными числами.

    Добавлен новый встроенный тип "complex".
    struct complex
      {
       double             real;   // вещественная часть
       double             imag;   // мнимая часть
      };
    Тип "complex" может передаваться по значению в качестве параметра для MQL5-функций (в отличие от обычных структур, которые передаются только по ссылке). Для функций, импортируемых из DLL, тип "complex" должен передаваться только по ссылке.

    Для описания комплексных констант используется суффикс 'i':
    complex square(complex c)
      {
       return(c*c);
      }
      
    void OnStart()
      {
       Print(square(1+2i));  // в качестве параметра передается константа
      }
    
    // будет выведено "(-3,4)" - это строковое представление комплексного числа
    Для комплексных чисел на данный момент доступны только простые операции: =, +, -, *, /, +=, -=, *=, /=, ==, !=.

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

  3. Добавлен код ошибки TRADE_RETCODE_HEDGE_PROHIBITED — открытие позиции или выставление отложенного ордера невозможно, поскольку перекрытые позиции запрещены. Ошибка возвращается в ответ на попытку произвести торговую операцию, если хеджирование запрещено, а на счете пользователя уже есть позиция или ордер в противоположном направлении по тому же символу.

MetaEditor

  1. Исправлена остановка отладки и профилирования в невизуальном режиме.
  2. Исправлено профилирование индикаторов на реальных данных. В некоторых случаях оно могло не запускаться.

VPS

  1. Исправлена ошибка миграции окружения на VPS. Она возникала, если переносимый эксперт содержал в себе индикатор в виде ресурса

Signals

  1. Исправлена проверка режима торговли при копировании сигналов. Торговля инструментом может быть ограничена на стороне брокера: могут быть разрешены только длинные позиции, только короткие или только закрытие. Ранее для успешного копирования сервис требовал полного разрешения на торговлю, в ином случае синхронизация прерывалась. Теперь "торгуемыми" будут считаться и символы с частично ограниченной торговлей. Клиенты фондовых брокеров смогут беспрепятственно копировать сигналы.

Tester

  1. Исправлена проверка торговой сессии при тестировании. В некоторых случаях торговые операции во время тестирования могли не выполняться с ошибкой "market closed", несмотря на то, что они попадали в торговую сессию.
Обновлена документация.
12345678910111213