新版 MetaTrader 5 build 5570:ONNX 和图表渲染功能改进

在此版本中,我们改进了 MQL5 对 ONNX 的支持。现在,模型在支持 CUDA 的 GPU 上运行速度明显加快。

29 一月 2026

程序端

  1. 修复了在使用 Wine 的 macOSLinux 环境中图表上的文字渲染问题。
  2. 修复了以可变颜色线条显示的指标的绘制。
  3. 修复了文本标签按钮对象的渲染。
  4. 更正了交易报告中某些统计数据的格式,这些数据以前可能会四舍五入错误。
  5. 修订了交易报告中 "总盈利" 和 "总亏损" 的计算方法。这些值现在包括佣金和库存费。
  6. 修复了保存分离的图表工具栏状态的问题。重新启动平台后,隐藏的工具栏可能会重新出现。
  7. 修复了从 JSON 文件加载自定义交易工具设置的问题。特别是,库存费设置、交易时段和价格变动值可能会被错误导入。
  8. 添加了在图表上运行脚本时在窗口标题中显示工具和时间周期的功能。



    添加了在图表上运行脚本时在窗口标题中显示工具和时间周期的功能。


  9. 修复了在市场报价中搜索工具时显示的工具提示中交易工具的重复问题。
  10. 修复了图表上 Wingdings 字体的渲染。
  11. 修复了以彩色烛形(DRAW_COLOR_CANDLES)和彩色线条(DRAW_COLOR_LINE)显示的指标渲染。
  12. 添加了日志信息输出,显示代理服务器正在运行已经过时的版本。如果服务器版本低于六个月前发布的 5200版 则会显示警告:
    过时的服务器 build - 必须至少为 5200 版,请联系您的经纪商
    该消息仅供参考,不影响连接到服务器的能力。
  13. 更新用户界面翻译。

MQL5

  1. ONNX 库现在可在使用 ONNX 的 MQL5 程序首次运行时加载,而不是与平台一起加载。库会自动更新。
  2. 添加了对 ONNX 的 CUDA 支持。如果您的显卡支持这项技术,模型推理性能将得到显著提高。我们强烈建议更新 NVIDIA 驱动程序,以提高稳定性和性能。
    CUDA 使用权限可以在平台设置中管理: 


    在平台设置中管理 CUDA


  3. 更新了 ENUM_ONNX_FLAGS 枚举中的标志。这些标志用于创建执行 ONNX 模型:

    日志
    现在使用以下日志标记来代替已废弃的 ONNX_DEBUG_LOGS:

    • ONNX_LOGLEVEL_VERBOSE —— 记录所有信息。
    • ONNX_LOGLEVEL_INFO —— 记录信息、警告和错误。 取代了已废弃的 ONNX_DEBUG_LOGS。
    • ONNX_LOGLEVEL_WARNING —— 记录警告和错误。默认使用。
    • ONNX_LOGLEVEL_ERROR —— 仅记录错误。

    CUDA 和 GPU 管理
    删除了 ONNX_CUDA_DISABLE 标志。请使用新的 ONNX_USE_CPU_ONLY 标志。启用后,执行模型将仅使用 CPU。

    已添加标记以选择将在其上执行模型的 GPU 设备:

    • ONNX_GPU_DEVICE_0
    • ONNX_GPU_DEVICE_1
    • ONNX_GPU_DEVICE_2
    • ONNX_GPU_DEVICE_3
    • ONNX_GPU_DEVICE_4
    • ONNX_GPU_DEVICE_5
    • ONNX_GPU_DEVICE_6
    • ONNX_GPU_DEVICE_7

    如果系统有两个或更多支持 CUDA 的设备,请使用这些标记。如果指定了多个标志,将选择索引最低的设备。

    模型分析
    我们添加了 ONNX_ENABLE_PROFILING 标志,以启用 ONNX 模型分析

    启用此标记后启动模型时,将在 /MQL5/Files/OnnxProfileReports/ 文件夹中创建名称为 [EX5 文件名]_[日期]_[时间].json 的分析报告文件。

  4. 提高了可作为资源包含在程序中的文件限制。新限制为 1 GB,使您可以在项目中包含大型 ONNX 模型。 
  5. 提高了 OpenCL 操作的稳定性。
  6. 添加了 ReplaceToZero 方法。它用零值替换矩阵/矢量中的小的数值,并返回被替换元素的个数。
  7. 添加了新的 OpenBLAS 方法:

    • FactorizationLDLComplexSyRaw —— 使用 Bunch-Kaufman 对角旋转方法计算复矩阵的分解。
    • LDLComplexSyLinearEquationsSolution —— 使用 FactorizationLDLComplexSyRaw 计算的分解 A = U**T * D * U 或 A = L * D * L**T 求解带有复对称不定矩阵的线性方程组 A * X = B,并有多个右边。
    • LDLComplexSyInverse —— 使用 FactorizationLDLComplexSyRaw 计算的因式分解 A = U**T * D * U 或 A = L * D * L**T 计算复对称不定矩阵的逆。
    • LDLComplexSyCondNumReciprocal —— 使用 FactorizationLDLRaw 计算出的 LDLT 分解,估算实对称或复赫米特不定矩阵 A 的条件数倒数。

  8. 添加了 ColorToPRGB 函数。它将颜色类型转换为 uint,从而得到 PRGB 颜色表示法。该格式用于创建图形资源渲染文本,以及在标准库 CCanvas 类中处理 COLOR_FORMAT_ARGB_RAW 颜色格式时使用。
    uint  ColorToPRGB(
       color  clr,          // the color to be converted, in 'color' format
       uchar  alpha=255     // the alpha channel that controls color transparency
    );
    PRGB 颜色使用以下公式计算:
    R = R * A / 255
    G = G * A / 255
    B = B * A / 255
    A = A
  9. 修复了OBJ_LABELOBJ_TEXTOBJ_BUTTONOBJ_EDIT 对象的程序文本设置。在某些情况下,文本可能不会显示。
  10. 修复了使用 ObjectSetInteger 为图形对象设置颜色的问题。以前可以忽略 clrNONE 值。
  11. 修复了当服务器上没有价格历史记录时 Bars 函数冻结的问题。
  12. 修复了在作用域中搜索全局变量的问题。以前,命名空间内的变量不能使用与全局级变量相同的名称。
  13. 修复了 final 属性的操作。尝试覆盖标记为 "final" 的函数现在会正确地产生编译器错误。
  14. 修复了在未包含 #import 指令的 *.mqh 文件中使用函数前向声明时出现的错误编译器警告。现在,编译器可以正确处理此类声明,如果函数不是从 DLL 导入,则不需要 #import。

    示例

    文件 utils.mqh: 
    // Function forward declaration
    double CalcLot(double risk, double stop);
    文件 expert.mq5:
    #include "utils.mqh"
    
    double CalcLot(double risk, double stop)
      {   
       return risk / stop;
      }
    以前,编译器会发出警告,称 utils.mqh 中的 CalcLot 函数缺少 #import 指令,尽管该函数是用户定义的,并已经在项目代码中实现。现在,此类代码在编译时不会出现警告。只有实际从外部 DLL 导入的函数才需要使用 #import 指令。 

MetaEditor

  1. MetaEditor:修正了处理大型源文件(多兆字节)时出现的内存不足错误。
  2. MetaEditor:修复了调试期间在观察窗口显示枚举值和名称的问题。

测试器

  1. 修复了循环 EA 交易测试的终止问题。即使是无限循环,按下 "停止" 键也会立即停止执行。
  2. 修正了可视化测试期间的 EventChartCustom 调用。以前,该事件可能会被错误地发送两次。
  3. 更正了删除新挂单时的冻结级别检查(SYMBOL_TRADE_FREEZE_LEVEL)。
  4. 修复了前向测试数据的导出。导出不使用前向模式的测试时,有时会保存以前前向测试的数据。

网页端

  1. 在图表上设置止损或止盈时,增加了以货币计算的大致盈亏显示。


    增加了以货币计算的大致盈亏显示


  2. 修复了带有特殊字符的工具的交易品种规格的显示问题。
  3. 更正了交易对话框中负数价格的显示。
  4. 修复了在存款货币精确度大于小数点后两位数的情况下,账户财务指标的显示问题。