模式搜索的暴力算法:用样本分割撬开全局规律(基础篇)(基础篇)
(1/3)· 靠单核硬算十天也跑不完的大周期,换个切法几天就能看清跨品种时间窗
◍ 模式搜索暴力算法的起点与思路
这篇系列文章讨论在 MetaTrader 5 中用暴力算法做历史价格模式搜索。原文发布于 2021 年 2 月 25 日,截至统计时页面浏览量 1953、评论 42,说明这类底层模式挖掘在小众量化圈有一定关注度,但远未出圈。 作者 Evgeniy Ilin 把整套工作拆成几条线:样本分割与可预测性判断、搜索算法的最终修改、模板优化配合辅助 EA、以及全局模式分析。对读者来说,重点不是看结论,而是先理解「为什么要把样本切分后再判可预测性」——这是后续暴力搜索不爆内存的前提。 本小节只铺了目录级框架:介绍、新思路、样本分割、算法修改、模板优化、全局模式、结论。真正能上 MT5 验证的代码在后面几节,这一节的价值是帮你建立检索历史的全局视角,避免一上来就盲目跑全样本扫描。
为什么还用暴力算法做策略研究
上篇文章已经验证过,用简单暴力机制写出能盈利的 EA 是可行的,效果并不输给其他复杂思路。这个方向其实和「交易系统开发和分析的优化方法」里讲的优化搜索数学是一脉相承的,本次要做的就是对那套程序算法做现代化改造,提升筛选质量,并把研究细化到一周内不同交易日和具体时段。 实盘里我的一些 EA 已经跑出了证据:不同货币对呈现各自独立的规律,同时还存在着跨所有货币对都适用的窄时间窗口。要把这些结构挖出来,靠手工不可能,必须有一套配套的软件做全量扫描。 我不觉得这套自研软件是终极方案,它最早只是个研究辅助,后来才慢慢扩出更多能力。客观说,神经网络、AI、梯度提升这些更先进,但实测中暴力算法依然能跟它们掰手腕——毕竟现在底层只是很朴素的数学。这个算法还有往上提的空间,值得继续压榨。
「把大周期切碎来换速度」
原型阶段我想从这套暴力搜索里榨出最大产能,但立刻撞墙:可靠的全局模式必须吃大报价间隔,而单次 pass 容量极小。实测分析任意货币对 10 年 M5 数据,好内核每小时只产出约 700–2000 个方案,哪怕参数设得很普通。
- 核服务器也得连跑好几天,唯一出路是砍掉分析数据量。办法是把整段周期切成等长间隔并跳过部分未计算块,间隔粒度可以是分、时、日、月、年。
顺带的好处是这些「条件域」自带交易参数特征:你能单独抠出周一、某小时、某分钟的模式,不必管它到底和什么宏观因素相关。 人脑分类不了无限多的模式,也没必要——若有有效公式,穷举理解反而是多余的。这就像先盯一个单变量函数,后来才发觉它只是某个多变量函数的特例,只是此前不知道。外汇与贵金属这类品种波动剧烈、杠杆高风险极高,切分加速仅解决算力,不解决胜率。
◍ 把样本切成时间量子再看可预测性
模式搜索在上层逻辑上差异很大,核心原因之一是你喂给它的样本长度不同。把原始样本按时间维度切小,除了能显著加速计算,还能逼出更有用的短样本——这些片段后续可以用简单公式或多维泰勒多项式直接分析。 市场与世界时间强绑定,交易活动主要由交易者的日常节律塑造。很多 EA 本质上是可预测的参与者,比如一大票基于时间的夜间剥头皮机器人。价格变动不只取决于过去价格,还受「日 / 星期 / 月甚至年」这类量化量影响,每个量都有固定取值,且可以无限往下拆。我的程序目前只切到「天」和「星期」,按年切我觉得效率不高,按月切以后可能补。 对每个分割参数组合,都能为交易指标建出离散函数,比如预期收益 Ma 和利润系数 PrF:Ma=Ma(M,D,Ts,Te)、PrF=PrF(M,D,Ts,Te),其中 M 是月、D 是星期几、Ts 是区间起点、Te 是区间终点(可跨过 0:00)。变量固定取值,锁定 M 和 D 后,用 Ts、Te 两个自由变量就能画信息图。 极值搜索没法手搓,但程序能跑。我用软件扫市场时发现一个有趣现象:不少货币对在 23:30–0:30 这段的可预测性数值被高估,明显和日期切换点有关。另外,MT4 里点差因子被低估的策略,挪到 MT5 测经常不灵——根子在点差。外汇和贵金属属高风险品种,务必复核你挖出的模式是否整个落在点差内部,我扫出来的大部分模式其实都卡在点差里。
把搜索跑得更快也更随机
这一版改动的核心就两件事:让 MT5 优化器少干无效活,同时让模式搜索的随机性更可控。具体加了固定时间间隔搜模式、只在选定日期交易、按所选天数给每个新变量生成随机天数集,以及用分钟指定最小/最大窗口时长来生成随机服务器时间窗口,且这些开关可任意组合。 第二个优化选项卡已能在多线程下跑,优化模式本身也重写了。实测在样本符号上,多线程开起来后同参数空间的遍历耗时倾向明显缩短,但具体加速比取决于你 CPU 核数和变量维度。 界面目前还是原始状态,表单里的设置项不太好对齐。下个版本会重做 UI,并补录一段从零用这程序出 EA 的演示。你只需先熟悉现有设置逻辑,在 MT5 里把日期过滤和随机窗口打开跑一轮,就能直观感到搜索多样性的变化。外汇与贵金属品种波动跳空多,此类工具仅降低人工试错成本,信号失效风险仍高。