MetaTrader 5 build 3520: добавлена 2FA/TOTP аутентификация с помощью Google Authenticator

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

25 ноября 2022

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. Исправления по крешлогам.