使用 Python 的深度学习 GRU 模型到使用 EA 的 ONNX,以及 GRU 与 LSTM 模型的比较(基础篇)
📘

使用 Python 的深度学习 GRU 模型到使用 EA 的 ONNX,以及 GRU 与 LSTM 模型的比较(基础篇)

第 1/3 篇

◍ 从 Python GRU 到 MT5 的 ONNX 落地

把深度学习模型塞进 EA 跑实时推理,绕不开的一条路是:先在 Python 里训好 GRU,再导出成 ONNX 格式交给 MetaTrader 5 调用。MT5 原生支持 ONNX 模型加载,这意味着你不用在终端里重写网络结构,只要模型算子被 ONNX Runtime 覆盖就能直接跑。 GRU 和 LSTM 都是循环结构,但 GRU 参数更少、收敛更快。在同样隐藏维度下,GRU 的参数量约为 LSTM 的 3/4,对 CPU 端的 MT5 来说延迟更友好。外汇与贵金属杠杆高、滑点突变频繁,这类时序模型只作概率参考,实盘前务必在策略测试器用真实点差回测。 社区里这篇实测帖在 2024 年 10 月 21 日发布后,浏览量到了 1576,说明用 ONNX 接 GRU 的需求不是冷门玩具。想验证的话,开 MT5 建个 EA 骨架,用 ONNXLoad 读入一个 Python 导出的 gru.onnx,先打印输入输出维度即可。

「从深度学习预测到 EA 的落地路径」

本篇承接此前用 Python、MetaTrader5 包和 ONNX 模型做预测与下单的思路,但即使没读过前作也能独立跟进:这一节会把全流程拆开讲清,最终交付一个可直接用于交易与回测的 EA。 机器学习属于 AI 的一个子集,核心是让计算机靠算法和统计模型从数据里自行提炼规律,而不依赖人工逐条写死规则;其目标是随着样本积累,系统在执行任务时的表现能自行改善。 对外汇与贵金属这类高波动品种,这种“数据驱动”的 EA 仍只是概率优势工具,实盘前必须在 MT5 用历史数据跑通回测,任何过拟合信号都可能放大穿仓风险。

决策树怎么从数据里学出价格

先把最朴素的决策树拿出来看,不堆公式,只盯它怎么干活。模型把房子先切成两类,每一类的预期价格直接取该类历史成交的均值——这一步没有任何魔法,就是分组求平均。 切分点不是人拍脑袋定的,是模型在训练数据上找「哪一刀下去两类内部价格离散最小」的最优解。这个从数据里抓分组规律的过程,业内叫拟合或训练,喂进去的那份样本就是训练集。 等树长好,新来的房子按同样规则落进某一叶节点,就直接套用该类的历史均价做预测。外汇和贵金属的价量序列若套这套思路,同样面临过拟合高风险,训练集切分方式稍粗就可能把噪声当规律。 后面会拆更复杂的分割逻辑,但核心没变:拟合复杂度上去了,第一组平均价代表的「基准」反而更容易被细节带偏。

◍ 更深的树才接得住多因子

左边那棵只按卧室数分叉的树(决策树1)在现实里更说得通,因为它抓住了卧室多→房价偏高的相关关系;但它漏了浴室数、地块面积、区位这些同样左右报价的东西。 想在 MT5 外接的 Python 模型里少误判,就得把树“加深”:多塞几层分裂,比如先按卧室数、再按总地块面积切分。这样叶子节点对应的价格区间会更贴近样本分布。 做预测时顺着分支走,哪条路径和房源特征吻合就走哪条,尽头叶子里的数值就是模型给的估计价。叶子怎么划、值多少,全由你喂的训练数据决定——换一批样本,树形和末端报价可能完全变样。 外汇与贵金属这类高波动市场若套用类似树模型做辅助判断,务必用小样本回测验证分裂逻辑,参数过拟合概率不低。

「用 Pandas 先摸透数据集」

做机器学习项目第一步不是跑模型,而是先把数据集看明白。Pandas 几乎是数据科学家默认的主力工具,用来快速检视、清洗和重组表格数据,在 MT5 导出的 CSV 报价上也能直接套用。 惯例是把库缩写成 pd,这样后续链式调用更短,也方便和 NumPy、scikit-learn 衔接。对外汇与贵金属历史数据做特征工程前,先用它看缺失值、时间索引和品种分布,能少走很多弯路。 这类品种波动大、杠杆高,数据异常会直接放大策略风险,所以预处理阶段别跳步。

MQL5 / C++
class="kw">import pandas as pd

先看清列再谈挑变量

EURUSD 的 H1 历史拉进来做建模前,第一件事不是跑算法,而是把 copy 回来的字段全列出来看一遍。mt5.copy_rates_range 一次性给的是开高低收、tick 量、成交量和时间这些列,维度一多肉眼根本理不清,更别说直接喂模型。 靠直觉先砍掉明显无关的列是最快上手的办法,但人拍脑袋容易漏。后面要用统计手段给变量自动排优先级,不过那之前必须先把数据集里每一列的真实含义和分布弄清楚。 下面这行就是本环境拉数的入口,跑通它你才能在 MT5 终端的 Python 环境里继续往后做变量筛选。外汇与贵金属历史数据存在跳空与流动性断裂,直接建模高风险,先验证数据完整性再动手。

MQL5 / C++
mt5.copy_rates_range("EURUSD", mt5.TIMEFRAME_H1, start_date, end_date)

常见问题

在 Python 用 onnx 或 tf2onnx 导出模型,注意输入维度固定为训练时的时序长度;EA 侧用 OnnxRuntime 加载,先拿历史数据跑通推理再接实盘。
GRU 参数更少、训练更快,短周期预测和 LSTM 差距通常很小;资源有限时优先 GRU,LSTM 仅在长依赖明显时略占优。
可以,小布能接入 EA 输出的预测结果做异动提醒和信号汇总,打开对应品种页就能看到 AI 诊断,省去手动翻日志。
先 print 列名和 dtypes,重点看时间列是否连续、有无缺失的 OHLC;再用 describe() 看分布,异常列直接剔除再谈建模。
是,浅树只能切一两刀,多因子交叉得靠更深的树或随机森林;建议先单因子看分裂增益,再逐步加深 max_depth 验证。