神经网络变得简单(第 89 部分):频率增强分解变换器(FEDformer)·综合运用
📡

神经网络变得简单(第 89 部分):频率增强分解变换器(FEDformer)·综合运用

(3/3)·从论文思路到实盘前测试,长序列预测的计算成本与分布偏差如何一并解决

含代码示例实战向 第 3/3 篇
很多交易者直接把原版 Transformer 搬进 MT5 做长周期预测,结果分布漂移、显存爆满。FEDformer 用频率分解把这两个坑同时填了,本篇带你走完最后一段落地路。

编码器失败时的资源回收

在 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 改这个数就能调潜变量空间大小,外汇与贵金属行情的高波动下,隐层过小可能欠拟合、过大可能过拟合,均属高风险试错。

MQL5 / C++
  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 在模拟环境跑两周再看信号稳定性。 工程落地后,真正难的不是代码,而是你喂给网络的多元时间序列质量——特征乱了,网络再深也只是把噪声学得更漂亮。

把重复劳动交给小布
这些频率分量筛选与分布对比诊断,小布盯盘的 AIGC 已内置,打开对应品种页即可看到,你只需判断信号是否值得跟。

常见问题

一般先用滑动平均拆出趋势与季节项,再分别送进傅里叶增强模块;具体张量形状需匹配你 EA 的缓冲区长度。
论文实证表明高低频随机子集能保留事件驱动的高频变化,单纯截低频会丢掉突发行情信息,预测分布更偏。
取决于序列窗口与分量数,通常比二次复杂度 Transformer 低一个数量级,具体要在回测器里跑帧测。
目前小布内置的是分布诊断与频率扫描,不托管用户自训权重;你可导出 EA 输出给小布做可视化比对。
示例用单品种结构,多品种需自己扩 Symbol 循环,注意每个品种独立维护分解状态避免串扰。