以 MQL5 实现 ARIMA 训练算法(基础篇)
📘

以 MQL5 实现 ARIMA 训练算法(基础篇)

第 1/3 篇

「用 MQL5 搭一套 ARIMA 训练骨架」

在 MT5 里做时间序列预测,ARIMA 是比较直接的选择。它靠历史价格的差分和自回归项拟合出下一步走向的概率分布,而不是给一个死价格。 原文示例发布于 2023 年 10 月 31 日,在 MetaTrader 5 栏目下累计 1416 次查看、3 条讨论,说明手动搬这套算法的人并不多,但关注度不低。 真要落地,核心是把价差序列做平稳化处理,再喂给自回归迭代。外汇与贵金属杠杆高、跳空频繁,ARIMA 给出的只是倾向性路径,实盘前务必在策略测试器里用真实点差回测。

用 ARIMA 捕捉短线的时序依赖

做外汇和贵金属的短线,很多人苦于没有可靠的基本面节奏可跟,这时候标准时间序列工具就有用了。George Box 和 Gwilym Jenkins 搞出的时间序列预测框架,到现在核心原则还能直接用,外汇和贵金属杠杆高、波动猛,拿历史序列建模也只是提高概率,不是稳赢。 他们方法里衍生出的 ARIMA(自回归综合移动平均线),专门吃数据里的时间依赖,还能对非稳态序列建模。本文后面会用 Powell 函数最小化做 ARIMA 训练,并在 MT5 里用 MQL5 落地,你可以直接开终端照代码复现。

◍ ARIMA 为什么能碰金融序列

Box 和 Jenkins 把时间序列建模拆成两个基础框架:自回归(AR)认为当前值可由前序值加恒定偏移与噪声(文中称创新)解释;移动平均(MA)则认为当前值是若干前期创新项、当前创新与偏移的加权和。把两者拼起来就是 ARMA,除了偏移和当前创新,还引入有限阶的滞后序列与噪声项。 单纯 AR/MA/ARMA 有个硬前提:序列必须稳态。按较严的稳态定义,原生金融价格序列基本不满足,直接套模型会出偏。 ARIMA 多出的「I」是积分(差分的逆)。先把非稳态序列做一阶或更高阶差分,得到近似稳态序列去跑 ARMA,建模完再积分回去原域。外汇与贵金属价格差分后稳态改善通常明显,但杠杆品种跳空频繁,差分也未必消除结构断点,建模失败概率不低,实盘前务必在 MT5 用历史数据回测验证。

「给 AR 项留非连续滞后的余地」

标准 ARIMA 标注用 ARIMA(p,d,q) 描述模型:p 为不含常数项的连续 AR 项数,q 为 MA 项数,d 为差分次数。比如 ARMA(4,2) 表示序列由滞后 1 到 4 的 4 个连续 AR 项加 2 个连续创新项刻画;ARIMA(1,0,0) 则退化为纯 AR(1)。这种写法默认 AR 与 MA 项必须连续排布。 实际行情建模里,连续滞后未必贴合贵金属或外汇的价格记忆结构。原文给出的算法放宽了两条限制:允许 AR 和 MA 项使用非连续滞后,且可自主选择是否带恒定偏移量。 例如可定义 y(t) = AR1*y(t-4) + AR2*y(t-6) + E(t),这是无偏移的纯 AR(2),但当前值只吃第 4 和第 6 时隙的过去值。标准标注法写不出这种间隔结构,但 MT5 上自写回归函数时完全不必受此约束。外汇与贵金属杠杆高、跳空频繁,非连续滞后模型仅作概率性描述工具,实盘前请用历史数据验证阶数稳定性。

常见问题

先搭最小可用训练循环:读历史价、做差分平稳化、按 AIC 选 p/d/q,再跑样本外校验,别一上来堆复杂特征。
对均值回复明显的横盘段概率更高,趋势市容易滞后;建议只用于识别短期偏离,不单独做方向决策。
可以,小布盯盘的 AIGC 已内置这类时序诊断,打开对应品种页就能看到训练结果与偏离提示,省去重复劳动。
金融序列常在特定周期(如隔日、整点)有记忆,强制连续滞后会漏掉这些间隔相关,留余地更贴合真实结构。
先检验序列是否平稳,不做差分直接套 ARIMA 大概率伪回归;外汇贵金属波动高风险,结论只作概率参考。