程序端
- 修复了停止 MQL5 程序 分析 时在某些条件下可能发生的崩溃。
MetaEditor
- 修复MQL5程序编译期间以及使用 智能代码管理 功能时的内存泄漏。
MetaTester
- 修复了重新运行单次测试时在某些条件下发生的崩溃。



我们已发布MetaTrader 5 build 4410,其中包含几项重要更新。基于云的策略测试器已更新,以消除启动测试过程时某些用户可能关闭程序端的情况。现在,网页端更加稳定,修复了浏览器兼容性检查和模拟账户开设流程。
客户端
MQL5
网页端
更新将通过实时更新系统提供。
MetaTrader 5 Android

通过Google Play、华为 AppGallery或下载APK文件更新手机应用程序。
程序端
MetaTester
网页端
![]()
MetaEditor





程序端
MQL5
MetaTrader 5网页端

vector<double/complex> operator[](const int i) const; vector<double/complex> operator[](const ulong i) const;取而代之的是一个具有恒定返回值的方法:
const vector<double/complex> operator[](const ulong i) const;在新版Alglib中,mat[row][col]=x的代码运行方式与旧版不同,因此此次修改将有助于在适当的位置捕捉结果的错误使用。以前,这表示写入一个矩阵。现在,该值被写入一个临时对象向量<double/complex>,记录后会立即销毁。





bool ArrayToFP16(ushort &dst_array[],const float &src_array[],ENUM_FLOAT16_FORMAT fmt); bool ArrayToFP16(ushort &dst_array[],const double &src_array[],ENUM_FLOAT16_FORMAT fmt); bool ArrayToFP8(uchar &dst_array[],const float &src_array[],ENUM_FLOAT8_FORMAT fmt); bool ArrayToFP8(uchar &dst_array[],const double &src_array[],ENUM_FLOAT8_FORMAT fmt); bool ArrayFromFP16(float &dst_array[],const ushort &src_array[],ENUM_FLOAT16_FORMAT fmt); bool ArrayFromFP16(double &dst_array[],const ushort &src_array[],ENUM_FLOAT16_FORMAT fmt); bool ArrayFromFP8(float &dst_array[],const uchar &src_array[],ENUM_FLOAT8_FORMAT fmt); bool ArrayFromFP8(double &dst_array[],const uchar &src_array[],ENUM_FLOAT8_FORMAT fmt);由于16位和8位的实数格式可能不同,因此转换函数中的“fmt”参数必须指示需要处理哪种数字格式。对于16位版本,使用新的枚举NUM_FLOAT16_FORMAT,当前具有以下值:


我们很高兴地宣布,新教程"MQL5算法交易的神经网络"正式发布。通过本教程,您将学习如何在MetaTrader 5平台的EA交易中使用人工智能。作者Dmitry Gizlyk是一位神经网络方面的专家,他已经撰写了十多篇相关文章。现在,在MetaQuotes支持下,他所有有价值的知识都方便地汇集在一本教程中。本书逐步向读者介绍神经网络基础知识及其在算法交易中的应用。您将学习创建自己的人工智能应用程序、对其进行训练并扩展其功能。

该教程可在MQL5算法交易社区网站的NeuroBook部分免费在线获取。本教程由七个部分组成:
本教程面向已经了解如何使用MQL5和Python编写程序的高级用户。如果您刚刚开始接触算法交易,我们建议您从"交易者的MQL5编程"和语言文档开始。
程序端



MQL5
MetaEditor
Tester
网页端
本书面向所有级别的程序员。书中介绍了主要开发工具和基本编程概念,初学者可以从中学习到基础知识。通过这份资料,您就可以在MetaTrader 5交易平台上创建、编译和运行您的第一个应用程序。拥有其他编程语言经验的用户可以立即进入MQL5中与创建EA交易和分析应用程序相关的应用部分。

本书可在MQL5.community网站的"书籍"部分在线免费获取。这本书由七个部分组成:
书中提供了大量源代码示例。根据讲解,您可以在内置编译器中执行自己的应用程序,并在平台中即时查看程序执行结果。源代码可在公共项目 \MQL5\Shared Projects\MQL5Book和代码库中获得。
现在就开始学习MQL5,探索专业算法交易的世界。获得的知识将帮助您把想法变为现实。您还可以通过市场开发和出售应用程序,以及在自由职业者服务中承接编程订单,将它们应用到商业环境中。
我们早前就已经准备了专门的交易平台安装程序。适用于macOS的安装程序提供完整的向导,可以像本地应用程序一样直接安装。 对于Linux,我们提供一个可以使用单个命令下载和启动的脚本。
安装程序执行所有必要的操作:识别用户的系统,下载并安装最新的Wine版本,对其进行配置,然后在其中安装MetaTrader。所有步骤均以自动模式完成,安装后即可立即开始使用该平台。
安装程序链接可在https://www.metatrader5.com网站和交易平台的帮助菜单中获得:

macOS:检查您的Wine版本
我们最近完全更新macOS安装程序,其中包含很多改进。如果您已经在macOS上使用MetaTrader,请检查当前的Wine版本,版本号会在启动时显示在程序端日志中:
如果您的Wine版本低于8.0.1,我们建议您移除旧平台以及安装它的Wine前缀。您可以像往常一样将平台从“应用程序”部分移至垃圾箱来将其删除。Wine前缀可以使用Finder删除。选择“前往
> 前往文件夹”菜单并输入目录名称:~/Library/Application
Support/。进入该目录,根据安装的MetaTrader版本删除以下文件夹:
然后,使用我们的安装程序重新安装程序端。
您不再需要搜索手动安装说明或使用第三方解决方案。您只需点击几下即可安装该平台并立即开始交易:
我们不断改进MetaTrader 5 iOS移动应用程序,增加更多交易功能和分析功能。在过去六个月里,我们推出批量交易操作、额外时间周期、交易通知等。以下是所有这些新功能的详细介绍。








安装最新版本的应用程序,解锁更多交易功能:
![]() |
在过去六个月里,MetaTrader 5 Android移动应用程序推出了大量新功能。这些功能包括快速图表交易功能、额外时间周期、交易历史的可视化显示等。下文将详细介绍这些更新。











安装最新版本的应用程序,解锁更多交易功能:
|
|
|
| Google Play | Huawei App Gallery | APK文件 |
程序端

MQL5
MetaTrader 5网页端
程序端

MetaTrader 5网页端
程序端
MQL5
//+------------------------------------------------------------------+ //| 脚本程序起始函数 | //+------------------------------------------------------------------+ 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)]] */ }
从 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文件:

struct MyMap { long key[]; float value[]; };这里我们使用具有适当类型的动态数组。在这种情况下,我们可以使用固定数组,因为这个模型的Map始终包含3个键+值对。
//--- 声明一个数组来接收来自输出层output_probability的数据 MyMap output_probability[]; ... //--- 模型运行 OnnxRun(model,ONNX_DEBUG_LOGS,float_input,output_label,output_probability);
MetaEditor
程序端


报告分为四个选项卡,每个选项卡都包含汇总信息:
Terminal MetaTrader 5 x64 build 3914 started for MetaQuotes Software Corp.
Terminal Windows 10 build 19045, 20 x Intel Xeon E5-2630 v4 @ 2.20GHz, AVX, 41 / 63 Gb memory, 58 / 280 Gb disk, UAC, GMT+2



VPS主机
MQL5

#define MACRO1 /* #define MACRO2 */ void OnStart() { #ifdef MACRO2 Print( 2 ); #else Print( 1 ); #endif }
void OnStart() { Print("CPU name: ",TerminalInfoString(TERMINAL_CPU_NAME)); Print("CPU cores: ",TerminalInfoInteger(TERMINAL_CPU_CORES)); Print("CPU architecture: ",TerminalInfoString(TERMINAL_CPU_ARCHITECTURE)); Print(""); Print("EX5 architecture: ",__CPU_ARCHITECTURE__); } CPU name: 12th Gen Intel Core i9-12900K CPU cores: 24 CPU architecture: AVX2 + FMA3 EX5 architecture: AVX
extern int X=0; void OnStart() { }
extern int X; void OnStart() { }
extern int X; int Y=X; void OnStart(void) { Print("Y=",Y," X=",X); } int X=_Digits;
将ALGLIB库更新至版本3.19。ALGLIB是一个高性能的数值分析库,专用于数值方法和数据分析算法。
我们修正了现有的库类来使用矩阵和向量,还添加了ALGLIB
3.19的新功能。所有的源代码都经过修改,并采用了单一的设计风格。ALGLIB库的源代码位于<程序端数据目录>\MQL5\Include\Math\Alglib。测试脚本位于MQL5\Scripts\UnitTests\Alglib。
除了库本身之外,测试脚本也进行了更新 - 类的测试数量从62个增加到91个,接口的测试数量从143个增加到152个。因此,MetaTrader 5平台开发人员为交易者提供了更有效的解决方案:
MetaEditor
Tester
MetaTrader 5网页端build 3950





double vector::RegressionMetric( const vector& vector_true, // 真值 const ENUM_REGRESSION_METRIC metric // 指标 ); double matrix::RegressionMetric( const matrix& matrix_true, // 真值 const ENUM_REGRESSION_METRIC metric // 指标 ); vector matrix::RegressionMetric( const matrix& matrix_true, // 真值 const ENUM_REGRESSION_METRIC metric, // 指标 const int axis // 坐标轴 );
vector vector::LinearRegression(); matrix matrix::LinearRegression( ENUM_MATRIX_AXIS axis=AXIS_NONE // 沿其计算回归的轴线 );示例:
vector vector_a; //--- 用价格填写向量 vector_a.CopyRates(_Symbol,_Period,COPY_RATES_CLOSE,1,100); //--- 获得线性回归 vector vector_r=vector_a.LinearRegression();该结果在图形中可视化:

ulong vector::HasNan(); ulong matrix::HasNan();当比较具有NaN值的相应元素对时,Compare和CompareByDigits方法认为这些元素相等,而在通常的浮点数比较中,NaN != NaN。
修改用于操作ONNX(开放神经网络交换)模型的OnnxTypeInfo结构:
struct OnnxTypeInfo { ENUM_ONNX_TYPE type; // 参数类型 OnnxTensorTypeInfo tensor; // 张量描述 OnnxMapTypeInfo map; // 地图描述 OnnxSequenceTypeInfo sequence; // 序列描述 };
使用新子结构在结构中指定数据类型:
struct OnnxTensorTypeInfo { ENUM_ONNX_DATATYPE data_type; // data type in the tensor long dimensions[]; // 元素数量 }; struct OnnxMapTypeInfo { ENUM_ONNX_DATA_TYPE key_type; // key type OnnxTypeInfo type_info; // 值类型 }; struct OnnxSequenceTypeInfo { OnnxTypeInfo type_info; // 序列中的数据类型 };根据OnnxTypeInfo::type(ONNX_TYPE_TENSOR、ONNX_TYPE_MAP或ONNX_TYPE_SEQUENCE),填写相关子结构。
bool vector::CopyIndicatorBuffer(long indicator_handle,ulong buffer_index,ulong start_pos,ulong count); bool vector::CopyIndicatorBuffer(long indicator_handle,ulong buffer_index,datetime start_time,ulong count); bool vector::CopyIndicatorBuffer(long indicator_handle,ulong buffer_index,datetime start_time,datetime stop_time);







客户端
MQL5
网页端
网页端

MQL5
MQL5:分别为CopyTicks、CopyTicksRange和CopyRates方法添加COPY_TICKS_VERTICAL和COPY_RATES_VERTICAL标识。
默认情况下,报价和函数沿水平轴复制到矩阵,这意味着数据添加到右侧,在行尾。在练习的ONNX模型运行任务中,这样的矩阵需要被转置以提供输入数据:
const long ExtOutputShape[] = {1,1}; // 模型输出形状
const long ExtInputShape [] = {1,10,4}; // 模型输入形状
#resource "Python/model.onnx" as uchar ExtModel[]// 作为资源的模型
//+------------------------------------------------------------------+
//| 脚本程序起始函数 |
//+------------------------------------------------------------------+
int OnStart(void)
{
matrix rates;
//--- 获取10个柱状图
if(!rates.CopyRates("EURUSD",PERIOD_H1,COPY_RATES_OHLC,2,10))
return(-1);
//--- 输入一组OHLC向量
matrix x_norm=rates.Transpose();
vector m=x_norm.Mean(0);
vector s=x_norm.Std(0);
matrix mm(10,4);
matrix ms(10,4);
通过在调用该方法时指定附加标识COPY_RATES_VERTICAL(COPY_TICKS_VERTICAL用于报价),可以消除额外的数据转置操作:
//+------------------------------------------------------------------+
//| 脚本程序起始函数 |
//+------------------------------------------------------------------+
int OnStart(void)
{
matrix rates;
//--- 获取10个柱状图
if(!rates.CopyRates("EURUSD",PERIOD_H1,COPY_RATES_OHLC|COPY_RATES_VERTICAL,2,10))
return(-1);
//--- 输入一组OHLC向量MetaEditor
客户端