文章 "如何在 MQL5 中使用 ONNX 模型"

 

新文章 如何在 MQL5 中使用 ONNX 模型已发布:

ONNX(开放式神经网络交换)是一种开源的机器学习模型格式。 在本文中,我们将研究如何创建 CNN-LSTM 模型,来预测金融时间序列。 我们还将展示如何在 MQL5 智能系统中运用创建的 ONNX 模型。

有两种途径可以创建模型:可以使用 OnnxCreate 从 onnx 文件创建模型;亦或使用 OnnxCreateFromBuffer 从数据数组创建模型。

如果将 ONNX 模型用作 EA 中的资源,则每次更改模型时都需要重新编译 EA。


并非所有模型都有完全定义的输入和/或输出张量大小。 正常情况下,第一个维度负责封包大小。 在运行模型之前,必须使用 OnnxSetInputShapeOnnxSetOutputShape 函数显式指定大小。 模型的输入数据理应与训练模型时的准备方式相同。

对于输入和输出数据,我们建议使用模型中使用的相同类型的数组、矩阵和/或向量。 在这种情况下,运行模型时不必进行数据转换。 如果数据无法以所需类型表示,则数据将自动转换。

作者:MetaQuotes

 

必须使用 python 3.9.16 版本吗?

  1. 下载 .tar.gz 格式的源代码
  2. 使用7-Zip 等程序解压源代码
  3. 按照 PCbuild\readme.txt 中的 说明操作
 

我在 python 3.10 和 3.11 中使用 onnxmltools 和 onnxconverter_common 软件包将LightGBM 转换为 ONNX 模型。只有在使用 onnxruntime 软件包的 python 3.10 中,输出才能正常工作,而在 3.11 中则不行。

可惜 ME5 不支持 python py 启动器。

 
要改动什么,在什么范围内插入什么数字,等等。机械工作,谢谢
 
Ivan Butko #:
能告诉我在哪里做实验吗?

copy_rates_range 中的工具/时间范围和日期、预测的输入收盘价数量(此处,model.add(Conv1D)中的 time_step = 120 和 input_shape=(120,1)),--在这种情况下,它是下一次价格预测所依据的每小时收盘价数量。

模型本身的结构,例如

model = Sequential()
model.add(LSTM(units = 50, return_sequences = True, input_shape = (time_step, 1)))
model.add(Dropout(0.2))
model.add(LSTM(units = 50, return_sequences = True))
model.add(Dropout(0.2))
model.add(LSTM(units = 50, return_sequences = True))
model.add(Dropout(0.2))
model.add(LSTM(units = 50))
model.add(Dropout(0.2))
model.add(Dense(units = 1))
model.compile(optimizer='adam',loss= 'mse',metrics=[rmse()])

EA 参数

input double InpLots       = 1.0;    // 开仓手数
input bool   InpUseStops   = true;   // 在交易中使用止损
input int    InpTakeProfit = 500;    // 获利水平
input int    InpStopLoss   = 500;    // 止损水平

交易算法本身等。

 
Quantum #:

在 copy_rates_range 中的 instrument/timeframe 和 dates,EA 变化中预测的输入收盘价数量(此处 time_step = 120,model.add(Conv1D)中 input_shape=(120,1))。

模型本身的结构,例如

EA 参数

交易算法本身等。

谢谢

 
Quantum #:

在 copy_rates_range 中的 instrument/timeframe 和 dates,EA 变化中预测的输入收盘价数量(此处 time_step = 120,model.add(Conv1D)中 input_shape=(120,1))。

模型本身的结构,例如

EA 参数

交易算法本身等。

GPU 计算是在 NVIDIA GeForce GeForce RTX 2080 Ti 显卡上进行的,借助了...和CUDNN 8.1.0.7。


能告诉我这些文件在哪里吗?(我是从网站上下载的,没有安装程序,只有文件夹里的文件)。

 
Ivan Butko #:
GPU 计算在 NVIDIA GeForce GeForce RTX 2080 Ti 显卡上进行,使用的库是...和CUDNN 8.1.0.7。


能告诉我这些文件在哪里吗?(我是从网站上下载的,没有安装程序,只有文件夹中的文件)。

有一段视频介绍了如何在 Windows 11 上为 GPU 深度学习设置 CUDA、CUDNN、Keras 和 TensorFlow。

在视频的第一段注释中,请注意您需要明确指定 tensorflow 2.10.0 版本。

18:35 此时只需更改为安装 tensorflow==2.10.0 。
Setting Up CUDA, CUDNN, Keras, and TensorFlow on Windows 11 for GPU Deep Learning
Setting Up CUDA, CUDNN, Keras, and TensorFlow on Windows 11 for GPU Deep Learning
  • 2022.01.05
  • www.youtube.com
Complete walkthrough of installing TensorFlow/Keras with GPU support on Windows 11. We make use of a "pip install" rather than conda, to ensure that we get t...
 

找到了

 
Ivan Butko #:

收到!

在视频的第一条评论中,请注意您需要明确指定 tensorflow 2.10.0。

18:35 此时只需更改为安装 tensorflow==2.10.0 。
 
Ivan Butko #:


要改动什么,在什么范围内插入什么数字,等等。机械工作,谢谢

在这里做实验没有意义,因为这样的预测与天真的预测(将前一个收盘价的值作为预测值)没有区别。在这种情况下,你真的会得到几乎最小的学习误差(均方根),这对模型的预测能力没有任何意义。相反,这是 ONNX 上的一个教育性例子,说明即使是复杂的架构也可以很容易地转移到终端上。我不知道那篇关于研究用于时间序列预测的神经网络架构的文章的作者在抽什么烟:)在这里,要么需要足够的估计,要么需要分类而不是回归。

实验指标选项

Time Series Forecasting: Error Metrics to Evaluate Model Performance
Time Series Forecasting: Error Metrics to Evaluate Model Performance
  • Pablo Cánovas
  • medium.com
The idea of this post comes from the different error metrics I have dealt with working with time series data and forecasting models. Among other things, we make energy production forecasts of renewable power plants of different capacities and technologies. Our aim is to develop forecasting models that reduce the penalties caused by the...