---
title: "MetaTrader 5 build 3980：其他改进和修复 - 更新历史"
description: "新交易报告的改进。修正总库存费值和交易品种利润图表的显示问题。 - 更新历史"
image: "https://www.metatrader5.com/i/logo_metatrader5.png"
url: "https://www.metatrader5.com/zh/releasenotes/terminal/2308"
---

# MetaTrader 5 build 3980：其他改进和修复

## 新交易报告的改进。修正总库存费值和交易品种利润图表的显示问题。

21 九月 2023

### 程序端

1. [新交易报告](https://www.metatrader5.com/zh/releasenotes/terminal/2304)的改进。修正总库存费值和交易品种利润图表的显示问题。
2. 优化出入金页面。有关新平台与支付系统集成的更多详细信息，请参阅[build 3950发布说明](https://www.metatrader5.com/zh/releasenotes/terminal/2304)。
3. 优化整个平台（包括策略测试）财务运营的重新计算。现在，利润、预付款和许多其他参数的计算速度更快。
4. 更新用户界面翻译。

### MQL5

1. 添加复数、向量<复数>和矩阵<复数>类型共轭方法。实现[复杂的共轭](https://en.wikipedia.org/wiki/Complex_conjugate)运算。

   ```
   //+------------------------------------------------------------------+ //| 脚本程序起始函数                        | //+------------------------------------------------------------------+ void OnStart()   {    complex a=1+1i;    complex b=a.Conjugate();    Print(a, "  ", b);    /*    (1,1)  (1,-1)    */    vectorc va= {0.1+0.1i, 0.2+0.2i, 0.3+0.3i};    vectorc vb=va.Conjugate();    Print(va, "  ", vb);    /*    [(0.1,0.1),(0.2,0.2),(0.3,0.3)]  [(0.1,-0.1),(0.2,-0.2),(0.3,-0.3)]    */    matrixc ma(2, 3);    ma.Row(va, 0);    ma.Row(vb, 1);    matrixc mb=ma.Conjugate();    Print(ma);    Print(mb);    /*    [[(0.1,0.1),(0.2,0.2),(0.3,0.3)]     [(0.1,-0.1),(0.2,-0.2),(0.3,-0.3)]]    [[(0.1,-0.1),(0.2,-0.2),(0.3,-0.3)]     [(0.1,0.1),(0.2,0.2),(0.3,0.3)]]    */       ma=mb.Transpose().Conjugate();    Print(ma);    /*    [[(0.1,0.1),(0.1,-0.1)]     [(0.2,0.2),(0.2,-0.2)]     [(0.3,0.3),(0.3,-0.3)]]    */   }
   ```
2. 添加处理“Sequence of maps”类型的[ONNX模型](https://www.mql5.com/zh/docs/onnx)输出。 对于在输出层提供Map序列（ONNX_TYPE_MAP的ONNX_TYPE_SEQUENCE）的ONNX模型，应将动态或固定的结构数组作为输出参数传递。此结构的前两个字段必须与ONNX_TYPE_MAP键和值类型匹配，并且是固定数组或动态数组。考虑由以下Python脚本创建的iris.onnx模型：

   ```
   从 sys 导入 argv data_path=argv[0] last_index=data_path.rfind("\\")+1 data_path=data_path[0:last_index] 从 sklearn.datasets 导入 load_iris iris_dataset = load_iris() 从 sklearn.model_selection 导入 train_test_split X_train, X_test, y_train, y_test = train_test_split(iris_dataset['data'], iris_dataset['target'], random_state=0) 从 sklearn.neighbors 导入 KNeighborsClassifier knn = KNeighborsClassifier(n_neighbors=1) knn.fit(X_train, y_train) # 转换 为 ONNX格式 从 skl2onnx 导入 convert_sklearn 从 skl2onnx.common.data_types 导入 FloatTensorType initial_type = [('float_input', FloatTensorType([None, 4]))] onx = convert_sklearn(knn, initial_types=initial_type) path = data_path+"iris.onnx" with open(path, "wb") as f:     f.write(onx.SerializeToString())
   ```

   在MetaEditor中打开创建的onnx文件：

   ![在MetaEditor中查看ONNX模型](https://www.metatrader5.com/c/17/1/onnx.png)

    Map序列作为“output_probability”传递。它有一个INT64类型键（对应于MQL5中的long）和float类型值。要从此输出接收数据，请声明以下结构：

   ```
   struct MyMap   {    long              key[];    float             value[];   };
   ```

   这里我们使用具有适当类型的动态数组。在这种情况下，我们可以使用固定数组，因为这个模型的Map始终包含3个键+值对。由于返回Map序列，因此应将此类结构的数组作为参数传递，以接收来自output_probability输出的数据。根据特定模型的属性，该数组可以是动态数组可以是固定数组。示例：

   ```
   //--- 声明一个数组来接收来自输出层output_probability的数据 MyMap output_probability[]; ... //--- 模型运行 OnnxRun(model,ONNX_DEBUG_LOGS,float_input,output_label,output_probability);
   ```

### MetaEditor

1. 修正[ONNX模型查看器](https://www.metatrader5.com/zh/metaeditor/help/machine_learning#onnx)中输出类型的显示问题。

**请参阅前面的新闻：**

- [MetaTrader 5 build 3950：在程序端出入金，更新的交易报告](https://www.metatrader5.com/zh/releasenotes/terminal/2304)
- [MetaTrader 5 build 3800：预订或取消(Book or Cancel)订单、AI编码助手和增强ONNX支持](https://www.metatrader5.com/zh/releasenotes/terminal/2286)
- [MetaTrader 5 build 3660：其他改进和修复](https://www.metatrader5.com/zh/releasenotes/terminal/2281)
- [MetaTrader 5 build 3640：11种语言的网页端](https://www.metatrader5.com/zh/releasenotes/terminal/2279)
- [MetaTrader 5 build 3620：网页端改进，ONNX支持和MQL5快速矩阵乘法](https://www.metatrader5.com/zh/releasenotes/terminal/2278)
