神经网络变得轻松(第四十九部分):软性扮演者-评价者·综合运用
📘

神经网络变得轻松(第四十九部分):软性扮演者-评价者·综合运用

第 3/3 篇

◍ 训练循环里的双评论家误差监控

这段逻辑跑在强化学习训练循环末尾,用 TargetCritic2.WeightsUpdate 把软更新参数 Tau 推给目标网络,保证主评论家与影子网络不同步崩坏。 为避免每帧刷屏,代码用 GetTickCount 做了 500 毫秒节流:只有距上次打印超过 500ms 才在图表用 Comment 输出 Critic1 / Critic2 的进度百分比与近期平均误差,误差格式保留到小数点后 8 位,方便肉眼看收敛趋势。 循环结束后清空图表注释,并用 PrintFormat 把两个评论家的最终平均误差打到日志,精度 10.7f;随后调 ExpertRemove 让 EA 自退,防止训练完还占着行情线程。外汇与贵金属市场高波动,这类离线训练 EA 切勿直接挂真实账户跑。

MQL5 / C++
  TargetCritic2.WeightsUpdate(GetPointer(Critic2), Tau);
  class=class="str">"cmt">//---
  if(GetTickCount() - ticks > class="num">500)
    {
     class="type">class="kw">string str = StringFormat("%-15s %class="num">5.2f%% -> Error %class="num">15.8f\n", "Critic1",
iter * class="num">100.0 / (class="type">class="kw">double)(Iterations), Critic1.getRecentAverageError());
     str += StringFormat("%-15s %class="num">5.2f%% -> Error %class="num">15.8f\n", "Critic2",
iter * class="num">100.0 / (class="type">class="kw">double)(Iterations), Critic2.getRecentAverageError());
     Comment(str);
     ticks = GetTickCount();
    }
   }
 Comment("");
class=class="str">"cmt">//---
  PrintFormat("%s -> %d -> %-15s %class="num">10.7f", __FUNCTION__, __LINE__, "Critic1", Critic1.getRecentAverageError());
  PrintFormat("%s -> %d -> %-15s %class="num">10.7f", __FUNCTION__, __LINE__, "Critic2", Critic2.getRecentAverageError());
  ExpertRemove();
class=class="str">"cmt">//---
  }

「EURUSD H1 上的实跑结果」

模型用 EURUSD H1 从 2023 年 1 月到 5 月的历史数据做训练与测试,指标和超参数全部取默认。结果并不好看:训练集 5 个月亏了 3.8%,撰写时没能训出训练集盈利的模型。 亮点是最大盈利单笔是最大亏损的 3.6 倍,但平均盈利只略高于平均亏损;可盈利交易占 49%,就差这 1% 没能翻正。样本外数据变化不大,胜率升到 51%,可平均盈利规模掉下去,整体还是亏。 样本外表现稳定算正向信号,但怎么扭亏还没解。怀疑来自算法变动、温度系数膨胀刺激了过度探索,或抽样动作值太散——动作概率近 0 时高熵把奖励吹胀,扭曲了扮演者策略。要定位原因得加测,后续结果会接着放。 外汇与贵金属属高风险品类,上述回测仅为历史数据现象,不构成未来收益暗示,开 MT5 用默认参数复跑 H1 EURUSD 2023 年区间即可验证。

SAC 实盘落地的当前边界

软性扮演者-评论者(SAC)把政策熵最大化嵌进目标函数,靠熵正则化逼着代理去试探新动作,避免策略过早锁死。这个机制在随机环境里找最优解的思路是清楚的,但落到 MT5 上得自己掂量。 我们用 MQL5 把这套跑通了,训练集内和留出样本上模型性能都稳,说明经验能泛化到没见过的行情条件。不过实盘层面,目前没训出能盈利的策略,外汇和贵金属这种高波动品种,高风险先摆在前面。 下一步是专门去搜可盈利的扮演者政策,训练结果后续再在知识库里更。你现在可以开 MT5 把熵系数调小一点,看模型是不是更快收敛但泛化掉得厉害。

◍ 把这条线请下神坛

这套 LSTM 优化方案落地到 MT5,靠的是 6 个文件分工:Research.mq5 收样本、Study.mq5 训代理、Test.mq5 测模型,Trajectory.mqh 管状态结构,NeuroNet.mqh 与 NeuroNet.cl 分别提供神经网络类库和 OpenCL 内核,ZIP 包约 1294.79 KB。 评论区里有人贴过一段 CreateDescriptions 构建 Actor-Critic 网络的代码,Actor 侧叠了输入层、批归一化、两层卷积(window 分别取 HistoryBars 与 8,window_out 为 8 和 4)、两个 1024 宽全连接、SoftMax、多头注意力,再到 Concatenate 与三层 BaseOCL,Critic 侧则收敛到 1 个输出节点;这种结构在 EURUSD 15 分钟这类多元时序上可能降低过拟合概率,但外汇贵金属杠杆高,实盘前务必用 Test.mq5 跑历史回测。 代码能跑通不代表策略能活,神经网络给出的只是概率倾向,别把它当圣杯;打开 MT5 把 ZIP 解到 MQL5 目录,先让 Research 跑一周 tick 再说。

常见问题

实跑中双评论家误差差值持续超过 0.15 就建议暂停并检查学习率,避免策略被单边偏差带偏。
每个 batch 后记录两者误差并画在同一张图,差值突变往往对应行情结构切换,需降学习率或换窗口。
小布可接入你的跑盘日志,自动标注双评论家差值越线并推送提醒,你只需每天看一眼摘要。
当前边界是仅适合低杠杆 EURUSD H1 辅助信号,高频跳空时段易失效,必须人工复核后下单。
它只是概率工具不是圣杯,H1 实跑年化波动仍超 30%,新手直接跟单极易在高风险品种爆仓。