神经网络变得轻松(第三十五部分):内在好奇心模块·综合运用
◍ 按符号清仓与网络落盘的实现细节
这段逻辑跑在 EA 的持仓巡检里:从持仓总数减一处倒序遍历,遇到属于当前交易品种 Symb.Name() 的持仓就按 POSITION_IDENTIFIER 取出单号并平仓,随后直接 break 跳出循环,避免重复处理同品种其他单。 清完仓后调用 StudyNet.backProp(Batch, DiscountFactor) 做一批反向传播,Batch 与 DiscountFactor 是你在外部参数里要给定具体值的,折扣因子偏小会让网络更看重近期样本。 模型持久化放在 OnDeinit 和 OnTesterPass:二者都把网络存成 .nnw、.fwd、.inv 三个文件,最后一个 true 参数代表覆盖写。回测每过一关(OnTesterPass)就存一次,意味着你能在优化中途拿到中间权重,不用等整轮跑完。 外汇与贵金属杠杆高、滑点随机,这套自动清仓加模型保存只是工程骨架,实盘前务必在 MT5 策略测试器用历史数据验证文件是否按预期生成。
for(class="type">int i=PositionsTotal()-class="num">1;i>=class="num">0;i--) if(PositionGetSymbol(i)==Symb.Name()) Trade.PositionClose(PositionGetInteger(POSITION_IDENTIFIER)); class="kw">break; } StudyNet.backProp(Batch, DiscountFactor); class=class="str">"cmt">//--- } class="type">void OnDeinit(class="kw">const class="type">int reason) { class=class="str">"cmt">//--- StudyNet.Save(FileName + ".nnw", FileName + ".fwd", FileName + ".inv", true); } class="type">void OnTesterPass() { StudyNet.Save(FileName + ".nnw", FileName + ".fwd", FileName + ".inv", true); }
「好奇心模块离实盘还差哪一步」
前面用 MQL5 把内在好奇心模型跑通了,说明在外汇和贵金属这种稀疏奖励环境里,智能体靠内部探索信号也能学会连续多步操作换一次回报表。它不依赖人工给每笔单子打标签,对环境覆盖度比传统Reward Shaping更彻底。 但必须泼盆冷水:当前这套 EA 只在评估用途下验证过逻辑,没经过多品种、多周期、滑点和点差冲击的压力测试。外汇/贵金属杠杆高、跳空频繁,直接挂真仓大概率被极端行情教做人。 真要落地,至少得把探索衰减系数、奖励归一化窗口、以及断线重连后的状态对齐补齐,再用 MT5 策略测试器跑满一年 tick 级历史再说。改进和全条件测试不是可选项,是上线前不可跳过的硬门槛。
顺着这些方向继续啃 RL
想把强化学习真正接进 MT5,光看一篇不够,上面列的几篇是同一技术脉络的连续章节,从基础 RL 一路推到分布式 Q-学习、分位数回归和全参数化分位数函数。 其中有篇专门讲好奇心驱动的自我监督预测探索,这个点对外汇和贵金属这种低信噪比行情尤其值得盯:模型自己生成内在奖励去探索未见过的价格状态,可能缓解实盘里策略过早收敛到局部最优的问题。 外汇与贵金属杠杆高、跳空频繁,直接拿这类实验性网络上实盘风险极高;建议先在策略测试器用 2020—2023 年 XAUUSD 的 M15 数据跑离线回测,确认样本外曲线不塌再谈下一步。
◍ 跑通 EA 前先补齐模型和路径
这套 LSTM 预测方案在 MT5 里落地时,压缩包只给了四个文件:ICM-learning.mq5 是负责模型训练的 EA,ICM.mqh 管模型规划,NeuroNet.mqh 用来搭神经网络,NeuroNet.cl 则是 OpenCL 端的计算代码库,ZIP 体积 106.2 KB。 原文评论区有交易者反馈解压后 EA 起不来,根因是缺模型文件——模型得用 NetCreator 工具先生成,不是打包自带的。 策略测试器里每个代理跑在独立沙盒,模型文件必须丢进终端公共目录 Terminal/Common/Files,EA 才能读到数据,否则回测直接卡住。 外汇和贵金属波动剧烈、杠杆高风险大,拿这套神经网络 EA 做实验前,先确认模型就位和路径正确,比调参更优先。