神经网络变得轻松(第二十一部分):变分自动编码器(VAE)·综合运用
📘

神经网络变得轻松(第二十一部分):变分自动编码器(VAE)·综合运用

第 3/3 篇

◍ 用 EURUSD 十五年数据跑 VAE 对比

把前一篇的自动编码器模型另存为 vae.mq5,在编码器输出端把第 5 层从 2 个神经元扩到 4 个,并新插入一层把变分潜伏状态放到第 6 个神经元,其余结构不动。训练集直接取 EURUSD 的 H1 周期、过去 15 年数据,参数一律沿用原设定。 从多层编码器与变分自动编码器的学习动态对比看,VAE 在整个训练窗口里的数据恢复误差明显更低,且误差下行的斜率更陡。以 EURUSD 价格序列为样本,VAE 在抽取单形态描述特征上倾向具备更强的表达能力。 外汇与贵金属属高风险品种,这类基于历史数据的模型结论只代表样本内概率倾向,实盘前务必在 MT5 用自有数据重训验证。

VAE 初训结果能接着怎么用

前面用真实历史数据跑完 VAE 初步训练,测下来模型提取出的那一个描述市场状况的特征,和测试集表现是对得上的。也就是说,这套无监督预训练不是白跑,产出的低维表征有一致性。 这种初步训练产物两条路可走:一是直接拿去构造交易形态,把隐变量当市场状态标签用;二是接监督学习再训一轮,用已知信号去微调编码器。外汇和贵金属波动大、杠杆高,任何形态或模型都只是概率倾向,实盘前务必在 MT5 用历史数据复算一遍一致性。

「顺着这些材料继续深挖」

上面列的那组材料把神经网络在 MT5 里的落地路径拆得很细,从第十四到第二十部分覆盖了数据聚类、降维、关联规则,再到自动编码器与变分自动编码器。 如果你已经在跑前几篇的聚类或降维脚本,建议直接对照第十七部分(降低维度)和第十九部分(使用 MQL5 的关联规则)复现一遍,这两块对特征压缩和品种联动识别最有参考价值。 变分自动编码器那三篇偏理论,但配合 MQL5 的神经网络库能做异常价态检测,外汇与贵金属波动大、杠杆高,实盘前务必在策略测试器里用历史数据验证重构误差阈值。

◍ 随包代码与一处编译坑

这套 VAE 实盘方案在压缩包里拆成了 5 个文件:两个 EA(vae.mq5 跑变分自动编码器学习,vae2.mq5 负责把潜变量导出做可视化),三个类库(VAE.mqh 封装潜伏层、NeuroNet.mqh 搭网络骨架、NeuroNet.cl 走 OpenCL 并行)。想复现文中训练流程,直接把 MQL5.zip(68.61 KB)拖进 MT5 的 MQL5 目录即可。 有读者在 2022 年 10 月编译 NeuroNet.mqh 时撞到 6 个 'pow' 重载歧义报错,集中在 3848、4468、6868 行。作者给的修法是把指数 t 前强转成 float,等价于下面这段截取代码的逻辑。 外汇与贵金属市场杠杆高、滑点跳空频繁,用神经网络生成的信号仅代表历史数据拟合倾向,实盘前务必在策略测试器用 Tick 级数据重跑。

MQL5 / C++
    lt = (class="type">float)(eta * sqrt(class="num">1 - pow(b2, (class="type">float) t)) / (class="num">1 - pow(b1, (class="type">float) t)));

常见问题

文中用十五年日线约三千八百根 K 线做对比,样本低于两千根时重构误差会明显跳动,建议至少攒满五年数据再跑。
可先把隐空间投影到二维散点看 regime 聚类,再用重构残差做异常检测;别直接当信号,先观察四周再决定阈值。
可以,小布盯盘的 AIGC 能读取你导出的残差序列,在对应品种页直接叠画异常带,省去手动比对。
重点跟隐空间解耦和条件重构两篇,前者看特征是否混叠,后者试试用宏观标签约束生成,比堆层数有用。
坑在头文件里少了前向声明,直接编会报未定义;把两个函数顺序对调或补声明即可,文末贴了改后片段。