交易中的神经网络:具有层化记忆的智代(终篇)·综合运用
🧠

交易中的神经网络:具有层化记忆的智代(终篇)·综合运用

(3/3)· 剥离大语言模型后,如何用 CNeuronFinMem 在 MT5 复现短期与长期记忆协同的决策流

含代码示例偏理论 第 3/3 篇
很多交易者以为自主智代必须依赖大模型才能处理记忆分层,其实在 MT5 里用轻量张量流也能跑通工作记忆与长期记忆的协同。本篇把前两次铺垫的架构真正接进实盘数据流,看清哪些环节被简化、哪些性能保留。

空单信号的止损止盈归一化

当 argmax 为 0 或大于 argmin 时,引擎进入做空分支,先在循环里累计 tp 与 sl。tp 取各候选位 target[i]+fstate[i,2]-fstate[i,0] 的最小值,sl 取对应下沿的最大值,循环遇到 cur_sl 已覆盖下沿就 break,避免无谓延伸。 若最终 tp<0,说明综合投射偏空,此时把 sl 和 tp 分别除以 MaxSL*Point() 与 MaxTP*Point() 并夹紧到 [0,1],得到网络可用的归一化动作值。result[3] 还写入当前权益占比 account[0]/100*0.01,作为仓位参考。 下面这段是做空分支的核心赋值,注意 result[0~2] 先清 0 再只填 3/4/5 三个通道: for(int i=0; i<3; i++) result[i]=0; bActions.AssignArray(result); 在 MT5 里把 MaxSL、MaxTP 调小,能让归一化后的 sl/tp 更敏感,适合黄金 15 分钟这类高波动品种;外汇直盘则倾向放大以避免被噪音扫损。杠杆交易高风险,参数仅作概率参考。

MQL5 / C++
for(class="type">int i=class="num">0; i<class="num">3; i++) result[i]=class="num">0;
bActions.AssignArray(result);

「Actor 反向传播与训练进度节流」

这段逻辑处在策略网络(Actor)的训练循环尾部,核心是把动作缓冲、账户状态和梯度缓冲一并送进 backProp,若返回失败立即置 Stop 并跳出循环,避免脏权重继续写盘。 代码中用 GetTickCount 做了 500 毫秒的节流:每过 500ms 才用 Comment 刷新一次进度,显示 Actor 的训练百分比与近期平均误差(getRecentAverageError)。把刷新频率压在 500ms 这一档,能明显减轻 MT5 主线程的 UI 开销,回测时尤其看得出来不卡顿。 循环结束后清空 Comment 并打印最终 Actor 平均误差,随后调用 ExpertRemove 让 EA 自我卸载。外汇与贵金属行情噪声大,这类强化学习训练结果仅代表样本内拟合,实盘迁移有较高失效概率,务必先开 MT5 用历史数据验证再上真仓。

MQL5 / C++
   }
         }
      }
   }
      }
   class=class="str">"cmt">//--- Actor Policy
   if(!Actor.backProp(GetPointer(bActions), (CBufferFloat*)GetPointer(bAccount), GetPointer(bGradient)))
      {
      PrintFormat("%s -> %d", __FUNCTION__, __LINE__);
      Stop = true;
      class="kw">break;
      }
   if(GetTickCount() - ticks > class="num">500)
      {
      class="type">class="kw">double percent = class="type">class="kw">double(iter + i - start) * class="num">100.0 / (Iterations);
      class="type">class="kw">string str = StringFormat("%-14s %class="num">6.2f%% -> Error %class="num">15.8f\n", "Actor", percent,
Actor.getRecentAverageError());
      Comment(str);
      ticks = GetTickCount();
      }
   }
   }
 Comment("");
class=class="str">"cmt">//---
   PrintFormat("%s -> %d -> %-15s %class="num">10.7f", __FUNCTION__, __LINE__, "Actor", Actor.getRecentAverageError());
   ExpertRemove();
class=class="str">"cmt">//---
   }

◍ 用 EURUSD 历史数据验真模型

前两步把 FinMem 框架落成了 MQL5 版,但实现时对原算法做了大幅改写,所以这一轮只验我们自己的版本,不背原框架的锅。 模型在 EURUSD 的 2023 年 H1 周期上训练,指标全用默认值;训练集沿用之前研究积累的样本,算法能给智能体产出“近乎理想”的目标动作,因此不刷新数据集也能训。不过账户状态会变,定期重采训练集更稳。 拿 2024 年 1 月数据做封闭测试,参数不变:共成交 33 笔,胜率略超 50%,平均与最大盈利额都高于对应亏损额,余额曲线整体向上。外汇及贵金属杠杆高、滑点随时吃利润,这只是一个历史片段里的倾向性结果,实盘仍需自担风险。 想复现就开 MT5 载入同周期 EURUSD,把训练集按月份切开,先跑 2023 再锁参数测 2024-01,看那 33 笔是否对得上。

收束

FinMem 这套把分层记忆和大模型思路揉进自主交易的框架,本质是在不稳定行情里尽量让智代少做情绪化决策。我们在 MT5 里落了去掉大语言模型的 MQL5 版,用 Research.mq5 收样本、Study.mq5 训模型、Test.mq5 测表现,实验跑下来能确认思路在真实盘口有适用性。 不过真要丢进实时外汇或贵金属行情跑,风险依旧很高,模型还得在更有代表性的数据集上做额外调谐和更狠的综合性测试,别直接拿去顶实盘。 附件里 MQL5.zip 约 2.3 MB,含 7 个文件,自己开 MT5 把 Trajectory.mqh 和 NeuroNet.mqh 先读一遍,比看结论来得实在。

把信号优先级排序交给小布
小布盯盘的 AIGC 已内置多周期异动标注,打开对应品种页即可看到哪些短期事件被提权、哪些长期结构被静默,你只需判断要不要跟。

常见问题

主要涵盖当前报价与所分析技术指标的数值,以多维数组形式描述环境状态,供模型参考广谱变量做层化处理。
LLM 在终端内推理开销过大且脱离原生计算图,作者有意剥离后以常规神经元对象复现核心信息流,代价是语义泛化减弱、但架构更可控。
目前小布提供的是信号优先级与异动可视化,不直接托管自定义 MQL5 智代;你可把回测过的记忆权重结论映射到小布品种页做辅助观察。
文中以动态市场环境片段做前向推理验证,重点看短期波动注入后长期记忆是否被合理抑制或增强,而非单看某次盈亏。