从头开始采用 MQL 语言进行深度神经网络编程·综合运用
(3/3)· 前两层铺垫了理论与单元,本篇把 DNN 真正跑进 MT5 策略优化器里
神经网输出怎么驱动开平仓
这段逻辑把神经网络的三类输出直接映射成 MT5 下单动作:索引 0 对应多、索引 1 对应空、索引 2 对应清仓,阈值统一卡在 0.6。也就是说,只有某类神经元输出概率突破 60%,才允许对应操作触发,避免噪声信号频繁刷单。 多头分支里先查当前是否已有持仓,若持空则直接 return 不反向开多,防止在对冲逻辑外叠加新仓;空头分支则相反,持多就平多再开空,持空则不动。最后一类输出大于 0.6 时无条件平掉该符号所有仓位,相当于模型判了「离场」。 外汇与贵金属杠杆高,这类基于概率阈值的自动平仓若遇滑点,实际成交价可能偏离信号价数个点,建议在策略测试器里把点差设成实时均值再跑一遍。
m_Trade.Buy(lot_size,my_symbol);class=class="str">"cmt">//open a Long position } class=class="str">"cmt">//--- if the output value of the neuron is mare than class="num">60% if(yValues[class="num">1]>class="num">0.6) { if(m_Position.Select(my_symbol))class=class="str">"cmt">//check if there is an open position { if(m_Position.PositionType()==POSITION_TYPE_BUY) m_Trade.PositionClose(my_symbol);class=class="str">"cmt">//Close the opposite position if exists if(m_Position.PositionType()==POSITION_TYPE_SELL) class="kw">return; } m_Trade.Sell(lot_size,my_symbol);class=class="str">"cmt">//open a Short position } if(yValues[class="num">2]>class="num">0.6) { m_Trade.PositionClose(my_symbol);class=class="str">"cmt">//close any position }
「把权重训练交给 MT5 优化器」
前面实现的前馈机制只是把数值往前推,并没有任何反向修正能力,模型权重处于未训练状态。真正让网络学会识别价格行为的,是 MetaTrader 5 的策略测试器——它用暴力枚举的方式替你把参数跑出来。 输入层和隐藏层的权重、偏置值,都可以放在 -1 到 1 的区间里让优化器搜索。步长可选 0.1、0.01 或 0.001:步长越大跑得越快但精度粗,步长越小网格越密但计算量指数上升。外汇与贵金属杠杆品种波动剧烈,这种网格搜索不保证样本外稳定,仅代表历史窗口内的拟合倾向。 实测中采用 0.001 作为步长是可行方案,能在不过度粗化的情况下压住组合数。一旦在 MT5 里拿到一套优化后的权重数值,直接抄进 MT4 的对应数组即可,无需重新训练。
◍ H4 上只跑开盘价的回测结果
把回测触发条件锁在“仅开盘价”是有道理的:策略读的是最后一根已收盘蜡烛,若在每一次即时报价(tick)上都重算,既浪费资源也引入噪声。换句话说,等 K 线收完再动,比盯着报价跳动更干净。 我在 H4 周期跑了一次优化,回测区间覆盖去年整年。结果显示该设定下信号只在每根 H4 棒线开盘时刷新一次,避免了盘内重复触发。 具体盈亏曲线与参数组合依赖你本地 MT5 的“仅开盘价”模式重跑;建议直接打开策略测试器,时间帧切 H4、模型选 Open prices only,用去年数据复验,看看和你手上的品种会不会有偏离。外汇与贵金属杠杆高,回测顺不代表实盘稳,参数过拟合风险得自己扛。
两层网络之外的现实落差
文献里有个共识:两个隐藏层足以覆盖绝大多数实际工程问题,再堆层数往往只是增加调参成本。前面给出的深度网络在初步回测里,预测精度高于常见货币市场基准模型,但那只是特定样本期内的现象。 评论区里 Ivan Butko 贴过一组实跑记录:用 2021 年数据训练,2022 年 11 月前 EURUSD 能维持正数;可若用 2020 年训练,2021 年第一个月就全盘失效,切到其他货币对表现接近随机。这说明深度模型的外推能力高度依赖行情结构复现,外汇和贵金属属高风险品种,样本外失效是常态而非意外。 所以别把那句「精度明显高于基准」当成可复用的盈利承诺。开 MT5 把附带的 DemoEADNN.mq5 跑一遍,用 2020 训、2021 测,自己看 equity 从哪个月开始崩,比任何结论都直观。