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