Z 分数
Z 分数(z-score)把一个数值表达为它偏离某个参考窗口均值多少个标准差;在交易里,它把价格、delta 或成交量变成一个无量纲的读数,用来说明当前这根 K 线和最近那些 K 线相比有多反常。
Senzoukria · 术语表 · 更新于 2026 年 9 月
公式
z = (x − μ) / σ,其中 μ 是最近 N 个观测值的均值,σ 是它们的标准差。z 分数为 2,表示该数值位于窗口均值上方两个标准差处;为 −1,表示位于下方一个标准差处。这个数没有单位,而这正是它的用处:MNQ 的 delta 读出 2,与 6E 的成交量读出 2,描述的是同样程度的、相对各自近期行为的偏离。
- Senzoukria 使用总体标准差(除以 N),与它的布林带口径一致,所以三个 z 分数指标和布林带彼此吻合。
- 当 σ 为零时窗口是平的,z 没有定义。指标上报的是缺失值,绝不会是 0,因为 0 等于断言这根 K 线恰好等于平均水平。
- 在攒够 N 根 K 线之前没有参考对象,预热期内输出为缺失。
三个对象,一种方法
成交量版本刻意把当前 K 线排除在参考之外。否则,单独一根特别大的 K 线会抬高它自己的 σ,从而压缩它自己的 z 分数。价格和 delta 则把当前 K 线保留在窗口内,与布林带的惯例保持一致。三者的默认窗口都是 20 根 K 线,而且都不会在时段边界重置。
| 指标 | 作用对象 | 参考窗口 |
|---|---|---|
| Price Z-Score | K 线收盘价 | 最近 N 根 K 线,含当前这根 |
| Delta Z-Score | K 线 delta(主动买量 − 主动卖量) | 最近 N 根 K 线,含当前这根 |
| Volume Z-Score | K 线成交量 | 当前 K 线之前的 N 根,严格不含当前 |
怎么读它
- 价格 z 分数远离零:收盘价相对自身近期均值被拉伸了。这段拉伸是否倾向于回归,取决于市场状态,这正是赫斯特指南把它和状态过滤器配对使用的原因。
- Delta z 分数:这根 K 线的主动方失衡,相对最近的成交明细来说很反常。它标出的是一根异常 K 线,而不是下一根的方向。
- 成交量 z 分数:参与度与前面那些 K 线明显脱节。解读之前,先看看这些成交量在足迹图上打印在什么位置。
- 2 或 3 这样的阈值是从正态分布继承来的惯例;收益率和成交量的分布尾部更厚,所以极端 z 分数出现的频率比教科书暗示的要高。
在 Senzoukria 里
目录中列有 Price Z-Score(动量组)、Delta Z-Score(delta 组)和 Volume Z-Score(成交明细与流量组),每一个都画在单独的窗格里,带一个周期参数。Hurst MR(信号)叠加层内部使用的就是价格 z 分数:它的 Z lookback 和 Entry K (σ) 两个设置,定义了窗口以及标记候选入场所需的标准差个数。脚本编辑器里的 Python 模板 Mean reversion under regime (HMM + Hurst) 用 z 分数来决定何时入场、以及瞄准哪个价位。
常见错误
- 把 20 根窗口的 z 分数和 200 根窗口的 z 分数放在一起比,仿佛它们量的是同一件事。
- 假定对称:经历长时间卖压之后 delta 读出的 −2,并不是平静阶段之后那个 +2 的镜像。
- 把预热期内或平坦窗口上的缺失值读成零。
- 把一个 z 分数阈值当成完整规则,却没有说明出场、证伪条件和成本。
相关内容
其他语言版本
常见问题
- Z 分数用的是总体标准差还是样本标准差?
- 三个 z 分数指标都使用总体形式,也就是除以 N。这与目录里布林带的选择相同,也符合画图常见的惯例。Realized Vol 指标则改用样本形式,因为那是历史波动率的惯例;这一差异在每个指标的条目里都有记录。
- 成交量 z 分数为什么要排除当前 K 线?
- 这样一根反常的 K 线才会被拿去和不包含它的那些 K 线作比较。如果当前 K 线是它自己参考的一部分,一根大幅放量就会同时抬高窗口的均值和标准差,把自己部分地藏起来。价格和 delta 则保留当前 K 线,以便与布林带风格的通道保持一致。
- z 分数等于 2 算是一个信号吗?
- 它是一次测量:当前数值距离自身近期均值有两个标准差。要把它变成信号,需要一个关于「接下来通常会发生什么」的假设、一次计入成本的数据检验,以及在一段没有参与挑选阈值的后续时期上的复核。