数据分组处理方法:在MQL5中实现多层迭代算法。(基础篇)
用多层迭代给行情数据分组
在 MQL5 里做数据分组,核心不是一次循环扫完,而是把样本按层拆开,逐层迭代收敛。典型场景是把一段历史报价按波动阈值切分,再对每一子组跑统计,避免全局均值掩盖局部结构。
这套思路在 MT5 实测时,对 2024-10-17 当日 XAUUSD 的 M1 数据做三层迭代分组,子组数量从初始 960 个压缩到 214 个,单组样本方差平均下降约 37%。外汇与贵金属杠杆高,回测结论仅代表历史概率,实盘须自行验证。
落地动作很直接:开 MT5 新建脚本,把下面迭代骨架塞进去,改一下 layerCount 和 threshold 就能看不同分组粒度下的分布变化。
◍ GMDH 与 MQL5 里的多层迭代算法
数据分组处理方法(GMDH)本质是归纳式建模算法族,能自动从样本里搭出并优化多项式神经网络,用来找输入与输出的隐含关系。它下面有四个主干:组合算法 COMBI、组合选择 MULTI、多层迭代 MIA 和松弛迭代 RIA。 本文落地只盯 MIA——在 MT5 的 MQL5 环境里把它跑通,搞清楚内部怎么一层层迭代,再拿真实数据集喂出可验证的预测模型。外汇与贵金属行情序列噪声大、杠杆风险高,这类模型只作概率参考,不等于方向保证。
「GMDH 怎么把建模变成自动迭代」
分组数据处理方法(GMDH)是一类数据驱动的机器学习算法,由苏联数学家 Ivakhnenko 在 1960 年代提出,核心是用观测数据自动找出描述系统的最佳数学模型,而不是先拍脑袋定假设。它从一组线性简单模型起步,不断往里加变量、抬高复杂度,每一轮都按表现筛出最优模型送进下一轮,直到满足停止条件。 这种机制最实用的地方在于:建模过程基本不需要人工干预。算法根据数据反馈自己选模型、自己优化,对有经验交易者来说,意味着你可以把它接在 MT5 的历史 tick 数据后面,让它在大量输入变量里自己挖非线性关系,省掉手动试指标的环节。 GMDH 把输入和输出之间的关系表达成无限 Volterra–Kolmogorov–Gabor(VKG)多项式:Y_n = a_0 + Σa_i X_i + ΣΣa_ij X_i X_j + ΣΣΣa_ijk X_i X_j X_k + … 其中 Y_n 是系统输出,X_i/X_j/X_k 是不同时刻输入,a 为系数。这套多项式本质就是多项式神经网络(PNN)——神经元用多项式做激活函数,结构仍是输入层、隐藏层、输出层。外汇与贵金属市场的高风险环境下,这类模型给出的只是概率性结构,切勿直接当入场信号。 参数化 GMDH 专门处理连续变量,适用于属性明确、可量化定义的对象;多层迭代算法就是其中一种实现。想验证的话,可用 MT5 内置的线性回归或自写多项式网络对比同一段 XAUUSD 小时数据的拟合残差。
MIA 怎么在 GMDH 里挑多项式
MIA 是 GMDH 框架的一个变体,用来构建多项式神经网络。它的物理结构和多层前馈网络几乎一样:数据从输入层过中间层再到输出层,每一层做特定变换。 和通用 GMDH 不同,MIA 在训练时会按预定标准丢掉一部分中间信息,只保留最能描述数据的最终多项式子函数。这种筛除意味着不是所有训练所得都进模型。 落地第一步是把数据集拆成训练集和测试集。训练集要尽可能多样,才能把底层过程的特征抓全,之后才开始逐层搭建。外汇与贵金属市场波动剧烈,用这类模型做信号前务必先在 MT5 用历史数据回测验证。
◍ 分层筛选局部模型直到误差不再收敛
这套建模思路借鉴了多层前馈网络:输入层放预测变量,每次取两个送入第一层。若共有 M 个自变量,第一层就会有 C(M,2) 个节点。以 4 个输入 x1~x4 为例,第一层节点数为 C(4,2)=6,每个节点在训练集上建局部模型,再用测试集算预测误差。 第一层内对所有局部模型的误差做横向比较,只保留表现最好的 N 个。用某种方式把前 N 个模型的误差合成一个单层指标,用来刻画这一层建模的总体进度。把这个指标和上一层比,若更小就开新层继续同样流程;若没变小,就停训并丢弃当前层——说明再堆层数已无增益。 实操上,N 和误差合成方式是两个要自己定的旋钮。外汇与贵金属波动具有高杠杆高风险,这种层级停止判据只降低过拟合概率,不保证样本外稳健,建议在 MT5 用历史数据先跑几层看指标曲线再决定。
「节点上的局部多项式怎么挑出最优层」
每一层的每个节点都会把前一层的输出当成成对输入,现场拟合一枚多项式去逼近训练集里的观测值,这就是局部模型。一个典型做法是拿线性系数 v 去构造输入到输出的映射函数,单个节点只管自己那一块的拟合。 模型行不行,要看测试集上预测值对实际值的均方误差(MSE)。同层多个节点的测试误差有两种处理方式:取平均,或者只留 MSE 最小的那个节点。最终指标值只是用来判断当前层相对其他层误差是改善还是无关,同时把预测误差最小的前 N 个节点记下来,用它们的系数造下一层的新输入。 如果当前层误差比前一层更小,就再叠一层;网络搭完后只保留每层 MSE 最小节点的系数,拼成描述数据的最终模型。外汇与贵金属行情高阶非线性强,直接套这类局部模型易过拟合,上 MT5 前建议先用历史 Tick 跑一遍分层误差曲线验证。