神经网络变得轻松(第十九部分):使用 MQL5 的关联规则·综合运用
(3/3)· 从多分支节点类到实战测试,把无监督挖掘收束成可复用的交易特征工程闭环
关联规则挖掘的初始化门槛
这段函数负责把行情切片后的买卖标记矩阵喂进关联树,先卡死数据合法性:行数必须和 buy、sell 向量长度一致,否则直接返回 false,连树都不建。 min_sup 设 0.03、min_conf 设 0.3,意味着一条规则要在至少 3% 的样本里出现、且置信度不低于 0.3 才留得下来;外汇与贵金属波动无序,低阈值容易捞出噪声规则,实盘前建议在 MT5 里调高到 0.05 / 0.4 做对比。 k = 1.0 / 行数 把二值矩阵按样本量归一,再分别用 m_cRoot 挖出 buy / sell 两棵规则树。挖完立刻 m_cRoot.Clear(),根节点只做中转,不长期占内存。 下面逐行拆一下核心逻辑:
class="type">class="kw">double min_sup = class="num">0.03, class="type">class="kw">double min_conf = class="num">0.3) { if(data.Rows() <= class="num">0 || data.Cols() <= class="num">0 || sections <= class="num">0 || data.Rows() != buy.Size() || data.Rows() != sell.Size()) class="kw">return class="kw">false; class=class="str">"cmt">//--- matrix binary_data; if(!PrepareData(data, binary_data, buy, sell, sections)) class="kw">return class="kw">false; class="type">class="kw">double k = class="num">1.0 / (class="type">class="kw">double)(binary_data.Rows()); if(!GrowsTree(GetPointer(m_cRoot), binary_data * k, m_mPositions)) class="kw">return class="kw">false; vector supports = vector::Zeros(binary_data.Cols()); binary_data = matrix::Zeros(class="num">0, binary_data.Cols()); if(!m_cRoot.Mining(supports, binary_data, m_cBuyRules.ID(),min_conf)) class="kw">return class="kw">false; supports[m_cBuyRules.ID()] = class="num">0; m_BuyPositions = CreatePositions(supports, min_sup); if(m_BuyPositions.Rows() > class="num">0) if(!GrowsTree(GetPointer(m_cBuyRules), binary_data, m_BuyPositions)) class="kw">return class="kw">false; supports = vector::Zeros(binary_data.Cols()); binary_data = matrix::Zeros(class="num">0, binary_data.Cols()); if(!m_cRoot.Mining(supports, binary_data, m_cSellRules.ID(),min_conf)) class="kw">return class="kw">false; supports[m_cSellRules.ID()] = class="num">0; m_SellPositions = CreatePositions(supports, min_sup); if(m_SellPositions.Rows() > class="num">0) if(!GrowsTree(GetPointer(m_cSellRules), binary_data, m_SellPositions)) class="kw">return class="kw">false; class=class="str">"cmt">//--- m_cRoot.Clear(); class=class="str">"cmt">//--- class="kw">return true; }
◍ 用实盘数据跑一遍关联规则 EA
我把关联规则封装进 assocrules.mq5,拿真实行情数据做了一次回放验证。EA 沿用了前一篇里全部测试参数,没有为这次跑数单独调参。 需要说明:这套方法并不能无误差地识别所有分形,误判和漏判都存在。但从 MT5 策略测试器截出的结果看,信号分布和预期节奏基本吻合,值得手动开 MT5 照参数复跑一遍。 外汇与贵金属杠杆高、滑点随机,回测顺不代表实盘能复制,验证时请先开模拟盘。
「关联规则在交易里的实际落点」
前面用 FP-Growth 写出的类,本质是把无监督学习里的关联规则挖掘搬进了 MT5。跑出来的智能系统结果不算差,说明这类算法不是实验室玩具。 外汇和贵金属波动受多重因子纠缠,用关联规则找品种间或信号间的共现关系,概率上能辅助过滤假突破,但高杠杆下风险依旧突出。 如果你手上有 EURUSD 和 XAUUSD 的 tick 数据,直接把类挂上回测,看频繁项集是否稳定出现在特定时段,比空谈模型有用。
顺着这几篇往下啃
想把前面说的聚类与降维真正跑通,有几篇同系列材料值得直接对照着读。它们从数据聚类的原理,一直写到用 MQL5 落地和降维、关联规则的实战,属于同一条技术线的前后脚内容。 具体可顺着这五篇往下看:数据聚类基础、MQL5 实现聚类、聚类运用实践、降低维度、关联规则。在 MT5 里打开对应代码例程,比单看文字更能摸清特征工程怎么接进 EA。 外汇与贵金属市场高波动、高杠杆,这类特征处理只解决输入质量,不预示任何方向,实盘前请用历史数据反复验证。
◍ 随包的三个文件与运行坑
这套关联规则挖掘的演示 EA 随包带了三个文件:assocrules.mq5 是智能交易系统本体,负责在终端里训练并测试 FP-Growth 模型;AssocRules.mqh 封装了算法主体逻辑;MyTreeNode.mqh 则用来组织树节点。三者必须放在 MT5 的 MQL5/Experts 与 MQL5/Include 对应目录里,缺一个都会编译报错。 有读者在 EURUSD H1 上拖入 EA 后看到『loaded successfully』紧接着『removed』,并无报错——作者原话是这只是演示版,不挂任何订单,实时运行即可,测试器里跑不起来。外汇与贵金属市场波动剧烈、杠杆风险高,这类无下单逻辑的探针 EA 仅用于验证特征关联,别当成信号源。 压缩包体积 7.78 KB,从社区附件直接下载 ZIP 解压就能用。想看算法怎么从 tick 流里抽频繁项集,打开 AssocRules.mqh 对照 MyTreeNode.mqh 的节点插入逻辑最直观。