置换检验

置换检验(permutation test)用来检查一个回测结果是否可能出于偶然:把数据的结构随机重排很多次,每次都重算同一个统计量。在这些置换里,达到或超过真实结果的那部分所占的比例,就是 p 值。

Senzoukria · 术语表 · 更新于 2026 年 9 月


构造原假设分布

要问的不是「这套策略赚没赚钱」,而是「一条没有任何信息的规则,能不能赚到这么多」。要回答它,就得在保留其他一切的前提下,毁掉规则本可利用的那部分信息:同样的 K 线、同样的交易笔数、同样的成本。常见做法是打乱收益的先后顺序、打乱每笔交易的盈亏符号,或者打乱信号与结果之间的配对关系。

在每一条重排后的序列上重算目标函数。做过许多次置换之后,你就得到了「一条没有优势的规则在这批完全相同的数据上会产出什么结果」的分布。再把真实结果放到这个分布上去看位置。

怎么读结果

  • p 值是「统计量至少和观测值一样好」的那部分置换所占的比例。
  • p 值很小,说明只有很少的随机重排能达到观测到的结果;在这段样本上,这个优势和偶然区分得开。
  • p 值很大,说明随机重排家常便饭地就能达到它。结果仍然可能是真的,但这批数据显示不出来。
  • 这项检验对该样本是精确的,不需要任何分布假设,所以特别适合厚尾的交易结果。

在 Senzoukria 里

桌面端回测面板的「通过 / 不通过」闯关清单,把「置换检验:优势与偶然区分得开」列为其中一条标准,并把算出来的 p 值和 PSR、DSR、PBO 并排显示。面板对这个区块的介绍是「一次针对纯运气的置换检验」,它运行在前推分析和全时期网格之后、标记为「闯关 · 置换」的那个阶段里。

本站的回测页面把置换检验和 PSR、DSR、PBO 一起,列在受支持的历史测试可用的研究工具之中。和其他几条标准一样,这项检验使用的成交政策和成本,与产出这些交易的那次回测完全一致。

常见错误

  • 用一种会连带毁掉策略正当利用的结构(比如交易时段边界)的方式去置换,这会让原假设变得太容易被超过。
  • 在一次扫描的样本内冠军上跑这项检验,却不考虑试验次数。置换 p 值并不修正挑选效应;紧缩夏普比率才修正。
  • 把 p 值读成「这套策略没有优势」的概率。它是在原假设之下观测到该结果的概率,反过来读就错了。
  • 置换次数太少,导致能报出来的最小 p 值太粗。

其他语言版本

常见问题

需要做多少次置换?
要多到让 p 值的分辨率细于你想做的那个决定。做一百次置换时,最小的非零 p 值就是百分之一。桌面端把置换放在前推分析之后,作为闯关的一个独立阶段来跑;次数由面板设定,并与结果一起显示。
置换检验能代替前推验证吗?
不能。置换检验追问的是「在被测试的这批数据上,结果与偶然区分得开吗」。前推分析追问的是「冻结后的参数在后续数据上还奏效吗」。一套策略完全可能通过其中一项而在另一项上失败。闯关清单把两者都报出来,正是因为它们失败的原因不同。

继续阅读