- 添加了新的 OpenBLAS 方法:
 
 矩阵简化
 
 
        - ReduceToHessenberg —— 通过正交相似变换将实数或复数一般 n 乘 n 矩阵 A 还原为上海森堡形式 B:Q**T * A * Q = H。LAPACK 函数为 GEHRD.
- 生成正交矩阵 Q,其定义为 n 阶 n-1 个基本反射器的乘积,由 ReduceToHessenberg 返回:Q = H(1) H(2) .. .H(n-1)。 LAPACK 函数为 ORGHR.
 
 特征值和特征向量
 
 
        - EigenHessenbergSchurQ —— 从舒尔分解 H = Z T Z**T 计算海森堡矩阵 H 的特征值以及矩阵 T 和 Z,其中 T 是上准三角形矩阵(舒尔形式),Z 是舒尔向量的正交矩阵。LAPACK 函数为 HSEQR.
 
 线性方程
 
 
        - SylvesterEquationTriangular —— 求解实数准三角形或复三角形矩阵的 Sylvester 方程:op(A)*X + X*op(B) = scale*C 或 op(A)*X - X*op(B) = scale*C 其中 op(A) = A 或 A**T 或 A**H,且 A 和 B 均为上三角形。LAPACK 函数为 TRSYL.
- SylvesterEquationTriangularBlocked —— 求解实数准三角形或复三角形矩阵的 Sylvester 方程:op(A)*X + X*op(B) = scale*C 或 op(A)*X - X*op(B) = scale*C 其中 op(A) = A 或 A**T 或 A**H,且 A 和 B 均为上三角形。LAPACK 函数为 TRSYL3.这是 TRSYL 的块(BLAS 级别 3)版本。速度快达 5 倍,但不太精确。
 
 因子计算
 
 
        - SylvesterEquationSchur —— 求解实拟三角形或复三角形矩阵的西尔维斯特方程:A*X + X*B = C,其中 A 和 B 都是上三角。A 是 m 乘 m,B 是 n 乘 n;右边 C 和解 X 都是 m 乘 n。LAPACK 函数为 TRSYL.
- SylvesterEEquationSchurBlocked —— 求解实拟三角形或复三角形矩阵的西尔维斯特方程:A*X + X*B = C,其中 A 和 B 都是上三角。A 是 m 乘 m,B 是 n 乘 n;右边 C 和解 X 都是 m 乘 n。LAPACK 函数为 TRSYL3.这是 TRSYL 的块(BLAS 级别 3)版本。速度快达 5 倍,但不太精确。
 
 矩阵范数计算
 
 
        - MatrixNorm —— 返回一般矩形矩阵中 1-范数、无穷范数、弗罗贝尼斯范数的值或任何元素的最大绝对值。LAPACK 函数为 LANGE。
- MatrixNormGeTrid —— 返回一般三对角矩阵中任意元素的 1-范数、无穷范数、弗罗贝尼斯范数或最大绝对值。LAPACK 函数为 LANGT。
- MatrixNormHessenberg —— 返回上海森堡矩阵中任何元素的 1-范数、无穷范数、弗罗贝尼斯范数或最大绝对值。LAPACK 函数为 LANHS。
- MatrixNormSy —— 返回实对称矩阵或复赫米提矩阵中任何元素的 1-范数、无穷范数、弗罗贝尼斯范数或最大绝对值。LAPACK 函数为 LANSY,LANHE。
- MatrixNormComplexSy —— 返回复对称(非赫米特)矩阵中任何元素的 1-范数、无穷范数、弗罗贝尼斯范数或最大绝对值。LAPACK 函数为 LANSY。
- MatrixNormSyTrid —— 返回实对称或复赫米特三对角矩阵中任何元素的 1-范数、无穷范数、弗罗贝尼斯范数或最大绝对值。LAPACK 函数为 LANST、LANHT。
- MatrixNormTriangular —— 返回梯形 m 乘 n 矩阵或三角形矩阵中任意元素的 1-范数、无穷范数、弗罗贝尼斯范数或最大绝对值。LAPACK 函数为 LANTR。
 
 矩阵分类
 
 
        - IsSymmetric —— 检查方块矩阵是否对称。
- IsHermitian —— 检查方块复矩阵是否为赫米特矩阵。
- IsUpperTriangular —— 检查方块矩阵是否为上三角矩阵。
- IsLowerTriangular —— 检查方块矩阵是否为下三角矩阵。
- IsTrapezoidal —— 检查 m 乘 n 矩形(非方块)矩阵是上梯形还是下梯形矩阵。
- IsUpperHessenberg —— 检查方块矩阵是否为上海森堡矩阵。
- IsLowerHessenberg —— 检查方块矩阵是否为下海森伯矩阵。
- IsTridiagonal —— 检查方块矩阵是否为三对角矩阵。
- IsUpperBidiagonal —— 检查方块形矩阵是否为上对角线矩阵。
- IsLowerBidiagonal —— 检查方块矩阵是否为下对角线矩阵。
- IsDiagonal —— 检查方块矩阵是否对角矩阵。
- IsScalar —— 检查方块矩阵是否为标量矩阵。
 
 
- 添加了复数矩阵和向量的共轭方法。此方法更改复数虚部的符号,并返回修改后的矩阵或向量。
- 强化方法隐藏规则。当派生类包含与基类中同名的方法时,默认情况下会调用派生类版本。要显式调用基类方法,现在需要一个限定符:
 struct A
  {
   int y;
  
   string func(double x)
     {
      return(__FUNCSIG__);
     }
  };
  
struct B : public A
  {
   string func(int x)   
     {
      return(__FUNCSIG__);
     }
  };
  
void OnStart(void)
  {
   B b;
   b.func(M_PI);          
   b.A::func(M_PI);       
  }此更改简化了代码的可读性,消除了以前只伴随编译器警告的歧义。
 
 以前,编译程序会发出警告:
        不推荐的行为,隐藏方法调用将在未来的 MQL 编译器版本中禁用 
     这一变更现已生效。
 
 对于许多版本,如果根据参数有更合适的隐藏方法可用,日志中仍会出现警告:
 
        由于方法隐藏的新规则,调用解析为 "string B::func(int)",而不是 "string A::func(double)"。
 参见函数 "B::func "的声明
 参见函数 "A::func "的声明
 将常量值从 "double(3.141592653589793) "截断为 "int(3)
 
- 现在禁止在同一范围内使用重复名称。例如,以前可以在单个文件中声明具有相同名称的输入参数和函数。这种重复已不再允许:
 input int somename=42;
int somename(int x)
  {
   return(42);
  }
- 为枚举中的默认值添加了严格的类型检查。对于接受枚举的函数参数,现在不仅值必须匹配,确切类型也必须匹配:
    int somename(ENUM_TIMEFRAMES TF=PERIOD_CURRENT);
int somename(ENUM_TIMEFRAMES TF=0)   
  {
   return(42);
  }
- 现在禁止在不同的枚举中使用相同的标识符。在一个枚举中声明的标识符不能再在同一作用域内的另一个中重用:
 enum A
  {
   Value
  };
  
enum B
  {
   Value  
  };
  
void OnStart(void)
  {
   enum C
     {
      Value 
     };
  }匹配的名称可在不同的作用域中使用。
 
 
- 对模板初始化器函数引入了更严格的要求。使用初始化器函数创建矩阵/向量时,以下功能现已禁用:
 
 
 现在必须明确指定所有模板参数和自变量:template<typename T>
void Initializer(matrix<T>& mat,int method=0);
matrix<double> A(10,10,Initializer,42);          
matrix<double> A(10,10,Initializer<double>);     
matrix<double> A(10,10,Initializer<double>,42);   
- 改进了 ONNX 支持。将 ulong 数组传递给函数时,添加了有符号类型的隐式转换,从而简化了 MQL5 与 ONNX 模型的集成。
 
        OnnxSetInputShape( ... , ulong_array );
 OnnxSetOutputShape( ... , ulong_array );
 
- 修正了编译器警告中与隐式字符串转换相关的类型显示问题。
- 更新了 Python 集成包。要安装更新,请运行以下命令:
 
        pip install --upgrade MetaTrader5