交易中的神经网络:优化时间序列预测变换器(LSEAttention)·综合运用
「残差卷积模块的初始化链路」
这段 MQL5 代码展示了一个名为 CResidualConv 的类在 Init 方法里如何把两层卷积与归一化串起来。先调基类 CNeuronBaseOCL::Init,输入维度被压成 window_out * count,若失败直接返回 false,保证后续张量形状对齐。 第一层卷积 cConvs[0] 用 window 作核宽,输出窗口缩到 window_out,通道数保持 count;紧接着 cNorm[0] 做归一化并显式挂上 GELU 激活。第二层 cConvs[1] 核宽已是 window_out,不再降维,cNorm[1] 则设成 None 激活,把线性残差留到最后相加。 从参数看,window、window_out、count 三者共同决定显存占用量;在 MT5 终端用 OpenCL 跑这类模块时,把 window_out 从 8 调到 4 可能让单 batch 显存掉约 40%,但感受野会明显变窄,EURUSD 这类品种的高频特征提取倾向受影响。外汇与贵金属杠杆交易高风险,任何结构改动都先在策略测试器跑回测再上实盘。
break; } class=class="str">"cmt">//--- class="kw">return clamp(result, -MAX_GRAD, MAX_GRAD); } class="type">bool CResidualConv::Init(class="type">uint numOutputs, class="type">uint myIndex, COpenCLMy *open_cl, class="type">uint window, class="type">uint window_out, class="type">uint count, ENUM_OPTIMIZATION optimization_type, class="type">uint batch) { if(!CNeuronBaseOCL::Init(numOutputs, myIndex, open_cl, window_out * count, optimization_type, batch)) class="kw">return false; class=class="str">"cmt">//--- if(!cConvs[class="num">0].Init(class="num">0, class="num">0, OpenCL, window, window, window_out, count, optimization, iBatch)) class="kw">return false; if(!cNorm[class="num">0].Init(class="num">0, class="num">1, OpenCL, window_out * count, iBatch, optimization)) class="kw">return false; cNorm[class="num">0].SetActivationFunction(GELU); if(!cConvs[class="num">1].Init(class="num">0, class="num">2, OpenCL, window_out, window_out, window_out, count, optimization, iBatch)) class="kw">return false; if(!cNorm[class="num">1].Init(class="num">0, class="num">3, OpenCL, window_out * count, iBatch, optimization)) class="kw">return false; cNorm[class="num">1].SetActivationFunction(None); class=class="str">"cmt">//--- class=class="str">"cmt">//........ class=class="str">"cmt">//........ class=class="str">"cmt">//........ class=class="str">"cmt">//--- class="kw">return true; }
◍ 优化前后模型跑分对比
我们把上一篇文章里实现的 HypDiff 框架原样保留,只往里塞了 LSEAttention 作者提的算法优化,顺手把 FeedForward 里的激活函数换掉,目的纯粹是压住内部数值计算的抖动。训练流程也照旧复刻,连训练集都没动,只是这次不再迭代刷新训练集——虽然可能轻微拖慢收敛,但能保证和基准模型站在同一条起跑线上比。 评估直接用 2024 年第一季度的真实历史数据跑。更新后的模型在测试期一共执行了 24 笔交易,和基准模型只有 1 笔交易路径偏离,基本落在误差容忍内;两边都是 13 笔盈利交易收场。唯一肉眼能看到的改善是 2 月份不再有疏缺。外汇与贵金属行情高波动,这类基于历史数据的回测结论只代表特定样本表现,实盘迁移需自行验证。
把这条线请下神坛
LSEAttention 本质只是把标准注意力里的 softmax 换成 Log-Sum-Exp 平滑,靠对数域求和压制极端值,让深度网络在行情噪声里少踩数值溢出和梯度消失的坑。我们在前面几篇用 MQL5 把这套机制接进了 Research / Study / Test 三个 EA,跑在真实历史 tick 上,训练曲线的震荡幅度比裸 LSTM 明显收窄,但预测胜率没有质变。 它值得外汇和贵金属交易者开 MT5 自己复现验证,这类品种杠杆高、跳空频繁,模型稳定性提升不代表账户风险下降,任何信号都只是概率倾向。 方法归方法,别把它供成圣杯;真要落地,先拿 Study.mq5 跑一遍自己的品种,看 Loss 收敛速度再决定值不值得改架构。