Blog/外汇预测
Blog

我们试图在五个货币对上跑赢随机游走,这是成绩单

我们在五年的真实数据、五个货币对上跑了外汇预测测试。随机游走全胜。更有意思的发现是:仅凭两个看似合理的选择,就足以让结果看起来像是我们赢了。

MMexchangerate.dev·Jul 6, 2026·8 分钟阅读

我们把教程中的测试搬到了五个货币对、五年每日数据上真实运行。随机游走在每一个货币对上都守住了阵地。 但诚实的故事并不是"我们的模型输了"。真正的重点是:两个普通、看似合理的分析选择,就足以让一个货币对看起来像存在真实的、统计显著的优势——这也正是为什么任何外汇预测的结论都值得怀疑地阅读。

Key points
在我们事先固定好的设定下(70/30 划分、普通标准误),没有一个货币对能以统计显著的方式跑赢随机游走。
增加 300 个特征让每一个货币对的样本外准确率都变差,落在 -20% 到 -25% 的 R² 区间。复杂性在这里就是一种幻象,与 2025 年美联储论文的发现完全一致。
换成 HAC 标准误,或者调整训练/测试划分点,就能把两个货币对推过 5% 显著性门槛。数据没有任何变化,变的只是分析者的选择。
经过多重检验校正(对五个货币对做 Bonferroni 校正,t > 2.33),没有一个结果能存活。这才是真正的结果。
每一个数字都可以在免费套餐上复现,代码来自姊妹篇教程。

实验设定

教程完全相同的配方,对每个货币对一视同仁地应用:

  • 数据: 通过 /v1/range 端点获取 2021 年 1 月至 2026 年 1 月的每日汇率,丢弃前向填充的周末和假日行。
  • 划分: 前 70% 用于训练,最后 378 个交易日(五个货币对统一使用这一天数)作为留出测试集。模型永远看不到测试窗口。
  • 简单模型: 基于八个廉价特征(收益率滞后项、一周和一月动量、十日已实现波动率)的岭回归。
  • 复杂模型: 将同样的特征扩展为 300 个随机傅里叶特征,训练集和测试集共用同一个随机基。
  • 基准: 无漂移的随机游走。它对明天收益率的预测永远是零。
  • 打分方式: 相对随机游走的样本外 R²,以及单侧 Clark-West 检验。t 统计量高于 1.645 即跨过 5% 门槛。

我们是在看到任何结果*之前*就选定了 70/30 划分和普通标准误,这一点对后文很关键。

成绩单

Out-of-sample results, 70/30 split (dir. acc = simple model)copy
pair       OOS R2    CW t   p-value    complex R2   dir. acc
EUR/USD    -0.34%    0.84   0.200      -20.5%       49.5%
GBP/USD    -1.23%    0.17   0.432      -23.8%       51.9%
USD/JPY    -2.29%   -0.33   0.631      -24.9%       53.2%
AUD/USD    -0.52%    1.10   0.136      -24.2%       48.7%
USD/CAD    +0.61%    1.50   0.067      -20.5%       52.1%

在我们事先承诺的设定下,没有任何货币对跑赢随机游走。五个货币对中有四个的样本外 R² 为负,也就是说训练出的模型比"假设完全不变"表现更差。表中最好的 Clark-West t 统计量是 1.50(USD/CAD),未能达到 5% 优势所需的 1.645。USD/CAD 的 +0.61% R² 是唯一的正值,但其 0.067 的 p 值仍未过线。照表面数据读下来,故事就是:没有优势。

复杂性让情况变得更糟,且在每一个货币对上都是如此。 300 特征的模型并没有发现隐藏的结构。在每个特征平均只有约三行训练数据的情况下,它记住了训练噪声,样本外则全面崩溃,落在 -20% 到 -25% 的 R² 区间。在 USD/JPY 上,其 Clark-West t 统计量为 -2.05:不只是比随机游走差,而是显著更差。样本内,这个模型拟合得非常漂亮。它看起来很出色,直到遇到没见过的数据——这就是复杂性这个警示故事,浓缩在一个货币对里。

方向预测就是抛硬币。 预测涨跌的正确率落在 48.7% 到 53.2% 之间。在 378 个测试日下,任何落在大致 45%-55% 区间的结果都是统计噪声,而每个货币对都落在这个区间内。抛硬币也能拿到 50%。

你原本可以怎样"赢"下它

接下来这部分,应该让你对任何外汇预测结论都心存怀疑——包括我们自己的。"没有人跑赢随机游走",这个结论只在我们事先固定的那组确切选择下成立。只要改动其中一两个,而且每一个改动单独看都合情合理,画面就会发生变化。

换掉标准误。 我们在 Clark-West 检验中用的是普通标准误。审稿人完全可以合理地要求改用 Newey-West(HAC)标准误,因为每日预测误差存在轻微的自相关。仅做这一处替换,就有两个货币对跨过了 5% 的门槛:

货币对Clark-West t(普通)Clark-West t(HAC)
AUD/USD1.101.66 — 显著
USD/CAD1.501.83 — 显著

数据本身没有任何变化。变的只是误差范围的计算公式,而此刻却多出了两个"显著"结果,片刻之前它们还都不存在。

挪动划分点。 我们留出了最后 30% 作为测试集。改成留出最后 40%——同样是一条随意划定的线——USD/CAD 的 Clark-West t 统计量就爬升到了 2.26。在我们尝试过的每一个划分点上,它都保持为正:

USD/CAD across train/test splitscopy
split          60/40    65/35    70/30    75/25    80/20
OOS R2        +1.25%   +0.33%   +0.61%   +0.87%   +0.71%
Clark-West t    2.26     1.58     1.50     1.43     1.31

有了两个可调的旋钮(用哪种标准误、用哪个划分点),再加上五个可挑选的货币对,一个有动机的分析者就足以炮制出一条标题:"机器学习在 USD/CAD 上跑赢随机游走,统计显著。"每一步单独看都合情合理。叠加在一起,这正是一个伪结果混进论文的方式。

真正能拆穿它的纪律
在看到数字之前就固定好你的选择,用样本外数据打分,并针对你测试了多少种情形做校正。以 5% 的水平检验五个货币对,仅凭运气就有约 23% 的概率出现至少一个假阳性,所以诚实的门槛应该更高:对五个货币对做 Bonferroni 校正,会把门槛推高到大约 t > 2.33。USD/CAD 最好的表现——60/40 划分下的 2.26——仍然不够。在我们跑过的每一个货币对、划分点和标准误选择组合中,没有一个能越过这条诚实的门槛。这才是真正的结果。

为什么这种情况会不断发生

短期的主要货币对外汇市场,几乎是最接近有效市场的存在。每天有数万亿美元易手,任何简单到岭回归模型仅凭价格历史就能发现的规律,早在传到你的笔记本之前就已经被套利消除了。今天的价格是对明天价格最好的点预测,因为下一期收益率的条件期望本质上就是零变化。模型没有问题,这种有效性本身就是发现。

不过要注意*点预测*这个措辞。条件均值不可预测,并不意味着整个分布都不可预测。波动率会聚集、区间会收窄和放大,这种结构既真实又可预测。这也正是真正有价值的地方。

我们从中得到的结论

我们做的是一个汇率 API,所以不妨把这个不便明说的结论直接说出来。我们不会上线一个"预测汇率"接口,因为在每日主要货币对上,我们无法诚实地跑赢"返回今天的汇率"。我们能做的,是准确、快速地提供当前汇率,并附上元数据(source、前向填充标志、波动率),让你能够量化不确定性,而不是假装它不存在。

如果你仍想自己试试,以上一切都可以在免费套餐上复现,代码来自姊妹篇教程。真正能让我们印象深刻的门槛是:事先选定划分点和标准误,并在全部五个主要货币对的样本外数据上,跑赢经过 Bonferroni 校正的 Clark-West 统计量。做到这一点,你就完成了文献认为真正罕见的成就。

MM
exchangerate.dev
面向开发者的外汇数据指南,聚焦指示性汇率的实际应用。

Keep reading

Tutorial在外汇预测上跑赢随机游走:代码实战Read Guide你能预测汇率吗?四十年的高墙Read Reference历史外汇汇率与时间序列Read