神经网络变得简单(第 89 部分):频率增强分解变换器(FEDformer)·综合运用
(3/3)·从论文思路到实盘前测试,长序列预测的计算成本与分布偏差如何一并解决
编码器失败时的资源回收
在 MQL5 里写自编码网络,最容易被忽略的是对象生命周期。下面这段把描述符塞进编码器,塞不进去就立刻 delete 并返 false,能避免 MT5 终端里莫名的内存泄漏。 [CODE] if(!encoder.Add(descr)) { delete descr; return false; } //--- return true; } #define LatentLayer 14 [/CODE] 逐行拆解:第 1 行尝试把 descr 加入 encoder,若返回 false 说明添加失败;第 3 行 delete descr 释放掉刚 new 出来的描述符,不删就会挂着;第 4 行直接 return false 让上层调用者知道构建中断。 末尾 #define LatentLayer 14 把隐层维度锁死成 14,开 MT5 改这个数就能调潜变量空间大小,外汇与贵金属行情的高波动下,隐层过小可能欠拟合、过大可能过拟合,均属高风险试错。
if(!encoder.Add(descr)) { class="kw">delete descr; class="kw">return false; } class=class="str">"cmt">//--- class="kw">return true; } class="macro">#define LatentLayer class="num">14
◍ EURUSD H1 上的离线训练与测试表现
本实现用 2023 全年真实历史数据做离线轨迹采集,品种 EURUSD、周期 H1;策略测试器回放则用 2023 年 1 月历史数据验证已训练模型。编码器只预测不依赖扮演者动作的环境状态,因此可直接复用旧训练集,不必重新采集。 训练分两步:先最小化环境状态实际值与预测值误差,把编码器训透;再交替更新扮演者政策和数据集,并行训评论者,让动作评估更准。主观上预测品质有提升,但没做预测值与实际值的图形比对。 最终扮演者政策在训练与测试期都出了利润。余额图整体向上,但能看清 4 段趋势——2 段盈利、2 段不走。盈利段潜力更大,足以覆盖亏损段本金侵蚀。 不过这平衡很脆:测试期盈利因子仅 1.02,盈利交易占比略低于 46%。模型有戏,但外汇高波动下仍要压一压亏损期,别直接上实盘。
「实盘前还得盯紧的几个坑」
FEDformer 这套频率增强分解变换器,核心是用低秩频率近似把长期序列里的周期成分压扁,再叠一层混合分解的注意力机制去对抗分布漂移。MT5 里用 MQL5 把这套逻辑跑通后,拿真实历史数据训和测,模型在部分品种上确实显出了长期预测的潜力,但不是闭眼能用的程度。 外汇与贵金属杠杆高、跳空频繁,分布漂移会比论文数据集里猛得多,实盘前建议先拿 EURUSD 的 H1 跑 3 个月回测,看频率分支在低波动周是否反而拖累信号。 还有一点容易被忽略:混合分解里的季节项窗口若设得过长,在央行决议周会过拟合旧节律。这个参数最好随波动率分位动态缩窗,而不是写死。
别急着下结论
这套 LSTM 预测工程的代码骨架由 8 个文件组成:6 个 mq5(Research、ResearchRealORL、Study、StudyEncoder、Test 及配套 EA)加 2 个类库(Trajectory.mqh 定义系统状态,NeuroNet.mqh 与 NeuroNet.cl 负责网络构建与 OpenCL 加速)。想跑通,先去下载那个 1188.36 KB 的 MQL5.zip,在 MT5 里按 EA→类库→代码库的顺序挂好。 从样本收集到编码训练再到模型测试,链路是串起来的,缺一个 mqh 都会编译报错。外汇与贵金属波动大、模型过拟合风险高,回测亮眼不代表实盘概率占优,建议先用 Research 在模拟环境跑两周再看信号稳定性。 工程落地后,真正难的不是代码,而是你喂给网络的多元时间序列质量——特征乱了,网络再深也只是把噪声学得更漂亮。