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

 

MetaTrader 5平台更新将于 2026 年 1 月 30 日星期五发布。

在此版本中,我们改进了 MQL5 对 ONNX 的支持。现在,模型在支持 CUDA 的 GPU 上运行速度明显加快。此外,我们还引入了对新标志的支持,并修订了库工作流程:现在,ONNX 只在使用它的程序首次运行时安装,而不是与平台一起安装。

我们还改进了上一次更新中引入的 Blend2D 引擎对图表上文本和分析对象的渲染。此外,本次更新还增强了交易报告功能,并提高了策略测试器的稳定性。

该平台的网页版也进行了多项改进。当直接在图表上调整止损水平时,您现在可以看到货币形式的近似损益值。我们还修复了某些交易数据的显示。

新版 MetaTrader 5 Build 5572:ONNX和图表渲染功能改进


MetaTrader 5 客户端

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


    在平台设置中管理 CUDA


  15. MQL5:更新了 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 的分析报告文件。

  16. MQL5:提高了可作为资源包含在程序中的文件限制。新限制为 1 GB,使您可以在项目中包含大型 ONNX 模型。 
  17. MQL5:提高了 OpenCL 操作的稳定性。
  18. MQL5:添加了 ReplaceToZero 方法。它用零值替换矩阵/矢量中的小的数值,并返回被替换元素的个数。
  19. MQL5:添加了新的 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 的条件数倒数。

  20. MQL5:添加了 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
  21. MQL5:修复了OBJ_LABELOBJ_TEXTOBJ_BUTTONOBJ_EDIT 对象的程序文本设置。在某些情况下,文本可能不会显示。
  22. MQL5:修复了使用 ObjectSetInteger 为图形对象设置颜色的问题。以前可以忽略 clrNONE 值。
  23. MQL5:修复了当服务器上没有价格历史记录时 Bars 函数冻结的问题。
  24. MQL5:修复了在作用域中搜索全局变量的问题。以前,命名空间内的变量不能使用与全局级变量相同的名称。
  25. MQL5:修复了 final 属性的操作。尝试覆盖标记为 "final" 的函数现在会正确地产生编译器错误。
  26. MQL5:修复了在未包含 #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 指令。 

  27. MetaEditor:修正了处理大型源文件(多兆字节)时出现的内存不足错误。
  28. MetaEditor:修复了调试期间在观察窗口显示枚举值和名称的问题。
  29. 测试器:修复了循环 EA 交易测试的终止问题。即使是无限循环,按下 "停止" 键也会立即停止执行。
  30. 测试器:修正了可视化测试期间的 EventChartCustom 调用。以前,该事件可能会被错误地发送两次。
  31. 测试器:更正了删除新挂单时的冻结级别检查(SYMBOL_TRADE_FREEZE_LEVEL)。
  32. 测试器:修复了前向测试数据的导出。导出不使用前向模式的测试时,有时会保存以前前向测试的数据。
  33. 更新用户界面翻译。

MetaTrader 5 网页端

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


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


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


更新将通过实时更新提供。

 
更新后对自定义指标支持不好,图表及其卡顿。
 

确实是的,更新后所有的自定义指标在加载的瞬间立刻无响应了。

似乎是与自定义控件的有关。加载了 CAppDialog 与自定义控件的指标都会发生无响应

 
xufengliang # :
更新后对自定义指标支持不好,图表及其卡顿。
Ding Kang Chen # :

确实是的,更新后所有的自定义指标在加载的瞬间立刻无响应了。

似乎是与自定义控件的有关。加载了 CAppDialog 与自定义控件的指标都会发生无响应

请提供更详细的信息,说明具体是哪些方面出了问题。

理想情况下,我们需要源代码来重现该问题。

谢谢。

 
PC程序端更新后图表窗口的文字和指标宽度为1的线条清晰度严重下降,这些最基本UI设计都不清晰,不知道你们是怎么想的?
 
Alain Verleyen #:

请提供更详细的信息,说明具体是哪些方面出了问题。

理想情况下,我们需要源代码来重现该问题。

谢谢。

我已经找到问题的根本
//+------------------------------------------------------------------+
//|                                       ListViewHIndicator.mq5 |
//|                             Copyright 2000-2025, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2000-2025, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window
#property indicator_buffers 0
#property indicator_plots   0

input string mFontName = "Arial";
 
#include <Controls/Defines.mqh>
#undef CONTROLS_FONT_NAME 
#undef CONTROLS_FONT_SIZE

#define CONTROLS_FONT_SIZE                MathAbs(12)
#define CONTROLS_FONT_NAME               mFontName

#undef CONTROLS_LIST_ITEM_HEIGHT 
#define CONTROLS_LIST_ITEM_HEIGHT                MathAbs(25)



#include <Controls\Dialog.mqh>
#include <Controls\ListViewH.mqh>

//--- input parameters
input int      Width        = 1000;
input int      Height       = 500;
input int      ItemsCount   = 50;

//--- global variables
CAppDialog     app_dialog;
CListViewH     list_view;
bool           initialized  = false;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- create dialog
   int x1 = (int)ChartGetInteger(0,CHART_WIDTH_IN_PIXELS)/2 - Width/2;
   int y1 = (int)ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS)/2 - Height/2;
   int x2 = x1 + Width;
   int y2 = y1 + Height;

   if(!app_dialog.Create(0,"ListViewHDemo",0,x1,y1,x2,y2))
     {
      Print("Failed to create dialog");
      return INIT_FAILED;
     }
 
//--- add list view to dialog first
   app_dialog.Add(list_view);
   
   x1 = app_dialog.Left() + CONTROLS_BORDER_WIDTH;
   y1 = app_dialog.Top() + CONTROLS_BORDER_WIDTH;
   x2 = app_dialog.Right() - CONTROLS_BORDER_WIDTH;
   y2 = app_dialog.Bottom() - CONTROLS_BORDER_WIDTH;

//--- then create list view
   if(!list_view.Create(0,"ListViewH",0, x1, y1, x2, y2))
     {
      Print("Failed to create ListViewH");
      return INIT_FAILED;
     }

//--- show dialog
   app_dialog.Visible(true);
   app_dialog.Run();

//--- add items after dialog is running
   for(int i=0;i<ItemsCount;i++)
     {
      //string item = StringFormat("Item %d",i+1);
      double d_tmp = iOpen(_Symbol, PERIOD_CURRENT, i);
      if(!list_view.ItemAdd(DoubleToString(d_tmp, _Digits),i+1))
        {
         Print("Failed to add item: ",d_tmp);
         return INIT_FAILED;
        }
     }

//--- set initialized flag
   initialized = true;

//--- display information
   Print("ListViewHIndicator initialized successfully");
   Print("Total items: ",ItemsCount);
   Print("Total visible columns: ",list_view.VisibleColumns());
   Print("Total pages: ",list_view.TotalPages());
   Print("Current page: ",list_view.CurrentPage());

//--- succeed
   return INIT_SUCCEEDED;
  }

//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- destroy dialog
   app_dialog.Destroy(reason);
   Print("ListViewHIndicator deinitialized");
  }

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   return rates_total;
  }

//+------------------------------------------------------------------+
//| Chart event handler                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//--- debug print
   PrintFormat("ChartEvent: id=%d, lparam=%lld, dparam=%G, sparam='%s'", id, lparam, dparam, sparam);

//--- pass event to dialog
   if(initialized)
      app_dialog.ChartEvent(id,lparam,dparam,sparam);
  }
//+------------------------------------------------------------------+

这使我用于复现问题的 DEMO

当尝试重新定义初始化时的字体风格(中文的名称)时,使用了 CAppDialog 以及标准库控件的指标或者程序,会立刻无响应,这样的问题在上一个 25-11 的版本不存在。
#define CONTROLS_FONT_SIZE                MathAbs(12)
#define CONTROLS_FONT_NAME               ("微软雅黑")

#undef CONTROLS_LIST_ITEM_HEIGHT 

#define CONTROLS_LIST_ITEM_HEIGHT                MathAbs(25)


 如果使用 Arial 或者其他英文的字体名称例如 Source Code Pro 似乎不会发生问题

ObjectSetString 在指定了中文的字体名称也会发生无响应!

Discover new MetaTrader 5 opportunities with MQL5 community and services
Discover new MetaTrader 5 opportunities with MQL5 community and services
  • 2026.01.31
  • www.mql5.com
MQL5: language of trade strategies built-in the MetaTrader 5 Trading Platform, allows writing your own trading robots, technical indicators, scripts and libraries of functions
 
Alain Verleyen #:

请提供更详细的信息,说明具体是哪些方面出了问题。

理想情况下,我们需要源代码来重现该问题。

谢谢。

应该是字体渲染在读取时没有处理好资源名称?
 
Ding Kang Chen #:
我已经找到问题的根本

这使我用于复现问题的 DEMO

当尝试重新定义初始化时的字体风格(中文的名称)时,使用了 CAppDialog 以及标准库控件的指标或者程序,会立刻无响应,这样的问题在上一个 25-11 的版本不存在。
#define CONTROLS_FONT_SIZE                MathAbs(12)
#define CONTROLS_FONT_NAME               ("微软雅黑")

#undef CONTROLS_LIST_ITEM_HEIGHT 

#define CONTROLS_LIST_ITEM_HEIGHT                MathAbs(25)


 如果使用 Arial 或者其他英文的字体名称例如 Source Code Pro 似乎不会发生问题

ObjectSetString 在指定了中文的字体名称也会发生无响应!


朋友您好。

我将您直接粘贴的代码改成了代码格式,这样比较容易阅读。

请参照这个帖子。感谢。


【新手必看】如何防止机器人误判:讨论代码时请使用代码表述功能

https://www.mql5.com/zh/forum/448896

【新手必看】如何防止机器人误判:讨论代码时请使用代码表述功能
【新手必看】如何防止机器人误判:讨论代码时请使用代码表述功能
  • 2023.06.13
  • www.mql5.com
大家好,我是官网版主。 官网内部有机器人辅助管理,目的是自动下架一些有误导性的内容。 内容过长,或同一个IP多次注册,容易导致机器人误判,而被无辜删帖。 如果您被无故删帖,我们对这种体验感到万分抱歉。 为了防止机器人误判,请在讨论代码的时候使用代码表述功能...
 
xufengliang #:
更新后对自定义指标支持不好,图表及其卡顿。
5572卡顿问题消失。也许是因为vps没有独立显卡的原因,图表清晰度下降,渲染有滞后内存占用比5430版高不少。
 


你们是怎么安装的?为什么我安装5570需要设置代理?

 
kingtanbo #:
PC程序端更新后图表窗口的文字和指标宽度为1的线条清晰度严重下降,这些最基本UI设计都不清晰,不知道你们是怎么想的?
+1