交易中的神经网络:针对金融市场的多模态、扩增工具型智代(终篇)·综合运用
📘

交易中的神经网络:针对金融市场的多模态、扩增工具型智代(终篇)·综合运用

第 3/3 篇

「智能体网络描述符的窗口与头数设定」

在 MT5 里搭建强化学习交易智能体时,描述符(descr)的窗口数组直接决定网络输入维度。上面这段代码把 BarDescr、AccountDescr、2*NActions、Segments 四个量压进 windows 数组,分别对应单窗口的 K 线特征数、账户状态特征数、动作空间翻倍后的维度、以及分段数。 ArrayCopy 的返回值若小于 temp.Size(),说明拷贝没满,直接 return false 中断构建——这种防御写法在 EA 初始化阶段能避免后续空数组越界。 descr.window_out 写死为 32,意味着网络输出头(Heads)数量是 32;descr.step 设为 4,配合 descr.batch = 1e4(即 10000 条样本/批),在 EURUSD 这类高流动性品种上跑离线训练时,显存占用和单步更新耗时会有明显台阶。外汇与贵金属杠杆高,模型过拟合历史片段后实盘可能快速回撤,参数仅代表结构设定、不预示收益。 最后 actor.Add(descr) 失败就 delete 并 return false,确保描述符不泄漏。开 MT5 把这段贴进自定义 CNeuronFinAgent 派生类,改一下 Segments 从 4 到 8,能直观看到 windows 数组长度变化对构建耗时的扰动。

MQL5 / C++
    class="kw">return class="kw">false;
  descr.type = defNeuronFinAgent;
class=class="str">"cmt">//--- Windows
    {
      class="type">int temp[] = {BarDescr, AccountDescr, class="num">2 * NActions, Segments}; class=class="str">"cmt">//Window, Account description, N Actions, Segments
      if(ArrayCopy(descr.windows, temp) < class="type">int(temp.Size()))
        class="kw">return class="kw">false;
    }
  descr.count = HistoryBars;
  descr.window_out = class="num">32;
  descr.step = class="num">4;                                        class=class="str">"cmt">// Heads
  descr.batch = class="num">1e4;
  descr.activation = None;
  descr.optimization = ADAM;
  if(!actor.Add(descr))
    {
      class="kw">delete descr;
      class="kw">return class="kw">false;
    }

◍ 用 EURUSD 历史数据给改版模型做压力测试

我们把前两篇里落地的 FinAgent 改版框架,直接推到真实历史数据上验有效性。这里测的是调过核心算法的自用版本,不是原版——算法改动动了模型关键链路,所以评估对象必须明确区分。 训练与测试都锁在 EURUSD 的 H1 周期:训练吃 2023 年全量历史,指标全部默认参数,不额外调优,专门看算法本身啃原始数据的能力。训练阶段沿用旧数据集,用一套能给智能体生成“近乎理想”目标动作的方案训,不持续刷数据集也能跑起来;不过定期更新训练集大概率能抬准确性、扩账户状态覆盖。 最终测试切到 2024 年 1 月历史,参数和指标一字未动,尽量贴近实盘环境。这一个月模型跑了 95 笔交易,比前几版同期明显多;盈利平仓占比 42% 出头,平均盈利单是平均亏损单的 1.5 倍,整体盈利,盈利因子记到 1.09。外汇与贵金属属高风险品类,单月样本小,该数字仅代表那段行情下的回测倾向,不等于实盘必复制。 利润大半落在月的上半月,那段价格卡在窄幅区间;等看跌趋势拉开,余额曲线就横着走还带了点回撤。我倾向于认为这行为跟市场分析模块、辅助工具模块里的算法输出有关,这块还没挖透,留待后面拆。

模型盈利跟着市况走

把 FinAgent 那套多模态思路落到 MT5 上,我们照框架逻辑用 MQL5 重写了采集、训练、测试三条线:Research.mq5 负责抽样本,Study.mq5 跑模型训练,Test.mq5 在真实历史里验。附件里 7 个文件(5 个 mq5、2 个 mqh 加一段 OpenCL 的 cl)就是可直接编译跑通的骨架。 实盘回测里模型确实出了盈利,但拆开不同年份数据看,收益曲线跟波动率 regime 绑得很死——震荡市钝化、趋势市才放得开。外汇和贵金属杠杆高,这种依赖市况的模型直接上实盘等于裸奔。 后续要紧的事只有一件:拿 Trajectory.mqh 里的状态结构去加一层动态权重,让网络在切换市况时别那么慢热。有余力的话把 NeuroNet.cl 的核函数改改,GPU 占用能再压一截。

常见问题

窗口建议从 30~60 根 K 线起试,头数 4~8 足够;显存吃紧就降头数优先于降窗口,避免序列信息丢太多。
重点看最大回撤、不同年份夏普是否稳定、以及单边与震荡市下的胜率差,单看总收益容易误判。
小布可接入你的品种页,按市况切换模型描述符并推送异动预警,把重复调参和监控交给它即可。
大概率是。模型盈利倾向随市况结构漂移,建议分市况训练或加过滤条件,别指望一个权重通吃。
至少覆盖 3 年含两种市况的数据,且样本外占比不低于 30%,否则过拟合风险偏高。