交易中的神经网络:具有层化记忆的智代(终篇)·综合运用
(3/3)· 剥离大语言模型后,如何用 CNeuronFinMem 在 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 分钟这类高波动品种;外汇直盘则倾向放大以避免被噪音扫损。杠杆交易高风险,参数仅作概率参考。
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 用历史数据验证再上真仓。
}
}
}
}
}
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 先读一遍,比看结论来得实在。