MetaTrader 5 build 3520:使用Google Authenticator进行2FA/TOTP身份验证

MetaTrader 5新功能

25 十一月 2022

程序端

  1. 添加使用Google Authenticator和类似应用程序进行2FA/TOTP身份验证。

    2FA/TOTP身份验证可以保护交易账户即使在泄露登录名和密码的情况下也可以免受未经授权的访问。可以使用多种移动应用程序来实现使用基于时间的动态密码算法(TOTP) 的身份验证。其中最受欢迎的是Google Authenticator、Microsoft Authenticator、LastPass Authenticator和Authy。现在您可以通过这种Authenticator应用程序生成的动态密码在MetaTrader 5客户端连接您的账户。

    要启用双重身份验证选项,请连接到您的账户并执行账户快捷菜单中的“启用2FA/TOPT”命令。在您的移动设备上安装并运行Authenticator应用程序,点击"+"添加您的交易账户,并用客户端扫描二维码。在“动态密码”字段中输入生成的代码,并点击“启用2FA”。然后,在交易商的交易服务器上,将为您的账户注册一个密钥。


    添加对使用Google Authenticator和类似应用的2FA/TOTP身份验证的支持。

    保存的密钥将用于Authenticator应用程序中,以便生成您每次连接账户时所需的OTP代码(动态密码)。每个动态密码在30秒内有效。失效后会再生成一个新动态密码。



    连接到账户时,需要从Authenticator应用程序中获得的附加动态密码

    如果您决定从Authenticator应用程序中删除存储的密钥,您应首先通过对应账户的快捷菜单命令禁用2FA/TOTP身份验证。如果您的账户没有新2FA/TOTP身份验证方法,请联系您的交易商。

MQL5

  1. 修正对自定义交易品种的CopyTicks函数的操作。当使用自定义交易品种时,在某些条件下,可能会返回前一个时段的初始报价,而不是所要求的数据。

  2. MQL5:添加新枚举值,以获得最后OpenCL错误代码和文本描述。
    1. CL_LAST_ERROR (код 4094)值已被添加到ENUM_OPENCL_PROPERTY_INTEGER枚举中

      当通过CLGetInfoInteger获取最后一个OpenCL错误时,忽略句柄参数。错误描述:https://registry.khronos.org/OpenCL/specs/3.0-unified/html/OpenCL_API.html#CL_SUCCESS
      对于未知错误代码,会返回字符串"unknown OpenCL error N(未知OpenCL错误N)",其中N是错误代码。

      示例:
      //--- 在获得最后一个错误代码时,将忽略第一个句柄参数
      int code = (int)CLGetInfoInteger(0,CL_LAST_ERROR);

    2. CL_ERROR_DESCRIPTION (4093)值已添加到ENUM_OPENCL_PROPERTY_STRING枚举中。
      可以使用CLGetInfoString获得文本错误描述。错误描述:https://registry.khronos.org/OpenCL/specs/3.0-unified/html/OpenCL_API.html#CL_SUCCESS

      当使用CL_ERROR_DESCRIPTION时,应将错误代码传递为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值意味着“在某些内核参数未设置或无效时,在对内核进行排队时返回。”

  3. 修正matrix::MatMul方法的操作。在处理大型矩阵时,程序端可能在某些尺寸上出现崩溃的情况。

修正崩溃日志中的错误报告。