神经网络变得轻松(第四十八部分):降低 Q-函数高估的方法·综合运用
📘

神经网络变得轻松(第四十八部分):降低 Q-函数高估的方法·综合运用

第 3/3 篇

◍ EURUSD H1 上的训练与样本外验证

模型在 2023 年 1 月至 5 月的 EURUSD H1 数据上训练,指标与超参数全用默认值。第一阶段建了 200 条轨迹库,跑 1,000,000 次迭代;评论者每更新十次,扮演者政策才更新一次,目标模型每 1,000 次评论者迭代做软更新。 后续每轮加 50 条轨迹,扮演者/目标模型更新前的迭代阈值降到 3 和 100。约 5 轮循环后,训练集上出利润:5 个月近 10% 收入,58 笔交易,盈利占比约 40%,盈利系数 1.05,恢复系数 1.50,平均盈利是平均亏损的 1.6 倍,单笔最大盈利是最大亏损的 3.5 倍。 训练集余额回撤近 32%,净值回撤不到 6%。多向同开能解释这点——止损单触发拖出余额坑,反向仓盈利撑住净值线。外汇/贵金属杠杆品类这种净值与余额背离属正常高风险现象,别只看余额曲线下结论。 换训练集外数据测,模型跑出前段“缩小版”:1 个月 2.5% 盈利,盈利系数 1.07,恢复系数 1.16,仅 27% 交易盈利但平均盈利近亏损 3 倍,余额回撤 32%、净值回撤 2%。样本外能复现,说明过拟合概率偏低,但 EURUSD 高波动下仍可能失效,开 MT5 用同参数回放这段能自行证伪。

「TD3 在 MT5 回测里的真实表现」

这套 TD3 实现跑完训练后,模型在训练集上能产出正收益,更关键的是换到没见过的新数据上,成果和训练集相当,说明泛化没塌。外汇与贵金属杠杆高、滑点跳空频繁,这种泛化能力只代表概率上可靠,不保证实盘稳赢。 作者也直说结果没完全达到预期,仍有要打磨的地方,但至少验证了 TD3 比裸 DDPG 更能扛住样本外数据。想自己复现,开 MT5 把文内 EA 挂上历史中心,分两段数据切着测最直观。 后续可以拿这个框架往真实报价特征里塞,但记住任何 RL 模型在贵金属隔夜跳空前都可能失效,先小样本压测再谈。

顺着这几篇把算法拼图补齐

想把 MT5 里的强化学习策略从玩具级推到能跑实盘验证,光看单篇代码不够,得顺着几篇关键文献把误差和传播路径摸清楚。 其中一篇专门处理 Actor-Critic 里的函数逼近误差,这个问题在样本相关性高时会让策略梯度偏得离谱,回测里常见净值曲线前段虚高。 另几篇分别覆盖了 DQN 的离策略更新、A2C 的优势基准削减方差,以及连续动作空间下不用离散化的直接输出。连续动作那篇对贵金属剥头皮有意义,因为手数和点差都是连续量。 外汇和贵金属杠杆高、滑点随机,这类算法在 demo 跑通后也必须用小仓位 live 验证,实盘概率分布和回测往往不一致。

◍ 随包附带的七个文件

这套 LSTM 优化方案不是只给思路,而是把整套训练—测试链路拆成了可直接编译运行的工程。压缩包 MQL5.zip(345.13 KB)里一共 7 个文件,分工很明确:Research.mq5 负责在 MT5 上收集样本,Study.mq5 跑代理者训练,Test.mq5 做模型回测;后四个是支撑库,Trajectory.mqh 定义系统状态结构,NeuroNet.mqh 封装建网类,NeuroNet.cl 则是 OpenCL 端的算子代码。 有个坑得提前说:Trajectory.mqh 本身不要单独编译。有用户在 2024 年 5 月反馈,直接编它会在第 274 行报 'Buffer - undeclared identifier',作者确认它只是被 EA 调用的库,得挂在 Research / Study / Test 里间接用。外汇与贵金属市场高波动,跑这套神经网络前务必用策略测试器先验证样本收集逻辑。 想复现文中结果,第一步就是下载 ZIP、把六个 .mq5/.mqh 丢进 MT5 的 MQL5 目录对应子文件夹,NeuroNet.cl 放 Files 或含 OpenCL 上下文的路径,然后只编译三个 EA。参数没调顺之前,任何预测都只是概率倾向,别当成信号结论。

常见问题

按时间顺序严格切分,用早期行情训练、后期行情验证;切勿随机打乱样本,否则样本外结论会偏乐观。
高估常使回测收益虚高数成至翻倍;看验证集 Q 预测值与实际奖励的偏差持续扩大,就是典型信号。
可以。小布能按你给的品种周期自动切分样本、跑验证并提示 Q 函数偏离,你只需复核结论。
缺了网络结构定义文件会直接编译失败或报未声明函数;先确认七个文件都在同一目录再加载。
先调目标网络更新平滑系数和探索噪声,外汇贵金属波动大、杠杆高,务必小仓位试错。