阅读 WorldQuant Alpha101 等价量公式时,常见的偏差通常来自两端。
一端是脱离统计前提,把公式结构直接等同于经验判断;另一端是将其视为纯粹的符号运算,把 rank、corr 和 delta 逐字转译成代码,忽略了数据序列背后的统计特征与约束。
少读一个负号,信号方向完全反转;输入项是原始价格还是截面排名,直接决定了计算结果是有效信号还是统计伪相关。
这篇使用本地美股日 K 线数据运行 Alpha#2、#3、#6,结合向量化代码、实测图表与统计检验,分析这三类因子的计算逻辑与潜在缺陷。
统一的向量化计算实现
在展开实证前,先把三个因子的确定性 Python 实现写下来。
规整全市场日 K 线为日期对齐的矩阵(行对应交易日,列对应标的代码),采用 Pandas 矩阵运算避免循环遍历:
import numpy as np
import pandas as pd
def compute_pv_alphas(df_open: pd.DataFrame, df_close: pd.DataFrame, df_volume: pd.DataFrame):
"""
df_open, df_close, df_volume 均为 (trade_date x symbol) 的对齐矩阵
"""
# 1. 输入项计算
intraday_ret = (df_close - df_open) / df_open
delta2_log_vol = np.log(df_volume.replace(0, np.nan)).diff(2)
# 2. 每日横截面百分位排名 (归一化至 [0, 1])
rank_ret = intraday_ret.rank(axis=1, pct=True)
rank_delta_v = delta2_log_vol.rank(axis=1, pct=True)
rank_o = df_open.rank(axis=1, pct=True)
rank_v = df_volume.rank(axis=1, pct=True)
# 3. 滚动相关性与负号
alpha_2 = -rank_delta_v.rolling(6).corr(rank_ret)
alpha_3 = -rank_o.rolling(10).corr(rank_v)
alpha_6 = -df_open.rolling(10).corr(df_volume)
return alpha_2, alpha_3, alpha_6
三个公式结构相似,但各自的输入预处理不同,表现出的统计特性也不同。
Alpha#2:截面负相关与均值回归
公式定义:
该公式包含三层计算:
- 输入项。成交量取 2 日对数差分 ,价格取日内收益率 ;
- 截面排名。每日在股票池内进行百分位排序,消除不同标的间的成交量量纲差异;
- 时序相关与反转。对每只股票的两条排名序列计算 6 日滚动 Pearson 相关系数,最外层取负号。
实测走势与统计归因
最外层的负号决定了因子的收益方向。
若内层相关系数为正,说明成交量放大时日内涨幅排名靠前,缩量时日内收益落后,属于同向动量。经过外层负号反转后,Alpha#2 输出负值,不触发做多。
只有内层相关系数达到强负值时,Alpha#2 才会输出接近 的高分信号。这意味着在 6 日窗口内出现了放量时日内收益垫底、缩量时日内收益居前的持续背离。
在美股数据池中,英伟达(NVDA)于 2024 年 12 月 18 日达到了 Alpha#2 的极值读数 +0.913。我们提取了其对应窗口前后的走势、成交量与因子值对应图:

走势图分解了这一阶段的量价动态:
- 12 月 11 日至 12 日,股价微幅上行,日成交量处于 1.6 亿股低位,量能增幅排名在全市场后 40%;
- 12 月 13 日至 16 日,股价遭遇急跌,日内跌幅进入市场后 10%,而成交量放大至 2.3 亿股以上,量能增幅进入市场前 15% 至 30%;
- 12 月 18 日,量能维持高位且日内再次收阴,使得 6 日内成交量排名与涨跌幅排名呈现 -0.913 的强负相关,Alpha#2 因子值升至 +0.913 峰值。
这种短期内伴随高换手的快速下跌释放了单边抛压,随后引发均值回归。图表上半部分显示,在信号达到极值后,股价止跌并于随后 5 个交易日内累计上涨 +8.55%。
在 60 只标的全样本上,Alpha#2 的 1 日前向 Rank-IC 为 0.0021,而 5 日前向 Rank-IC 提升至 0.0112(Rank-IR 0.92)。这表明该信号反映的均值回归需要 3 至 5 个交易日平滑释放,单日调仓会因冲击与手续费磨平超额。
Alpha#3:名义价格导致的伪相关缺陷
公式定义:
Alpha#3 在每日横截面上对开盘价与成交量分别计算排名,再求 10 日滚动相关系数并取负。
实际运行该公式时,会遭遇名义价格引入的结构性偏差。
截面排名方差退化
股票的名义开盘价(Nominal Price)受公司历史送转股、拆股和总发行股本影响,绝对高低并不反映标的的短期强弱或基本面优劣。
当股票池内同时存在数百美元的高价股与数美元的低价股时,名义开盘价的横截面排名几乎退化为静态常量。
我们提取了样本池中高价股与低价股的 rank(O) 与 rank(V) 时序序列分布:

实测数据表明:
- 高价股(如 ASML、COST)的名义开盘价排名均值在 0.94 至 0.99 之间,时间序列标准差仅 0.011 至 0.023;
- 低价股(如 ATAT、AS)的名义开盘价排名均值在 0.04 至 0.06 之间,时间序列标准差同样低于 0.030;
- 图表中,
rank(O)表现为多条几乎水平的平行直线,而下半部分的rank(V)则在每日呈现 0 至 1 之间的宽幅震荡。
在统计学上,当一个序列的时序方差趋近于零时,其与高方差随机序列计算出的 Pearson 相关系数主要反映高频扰动噪声,属于伪相关(Spurious Correlation)。
在实际建模中,不可直接使用未经标准化的名义价格进行截面排序,应替换为相对均线偏离度、标准化收益率等无量纲指标。
Alpha#6:非平稳序列在趋势市中的系统性偏误
公式定义:
Alpha#6 省略了横截面排序步骤,直接对单只标的过去 10 个交易日的原始开盘价 与原始成交量 进行时间序列相关计算。
趋势共线性陷阱
该算法违背了时间序列分析的基本假设:未检验平稳性的非平稳序列不可直接计算 Pearson 相关系数。
在单边上行趋势中,价格序列呈现单位根过程并包含单调漂移项。伴随趋势推进,成交量通常同步呈现阶段性放大。开盘价序列与成交量序列在时序上具备高度共线性,二者在 10 日窗口内的相关系数经常稳定在 以上。
经过外层负号反转,Alpha#6 会持续输出接近 -1.0 的极低数值,系统判定为强烈做空信号。
我们选取英伟达 2023 年初的单边上涨区间(2023-01-06 至 2023-04-03)进行实测跟踪:

实测走势展现了这一系统性偏误:
- 在 60 个交易日的样本区间内,股价单边上涨 +88.23%;
- 期间原始价格与成交量高度同向,导致 Alpha#6 因子均值低至 -0.243;
- 在 31.7% 的交易日中,Alpha#6 输出低于 -0.5 的极低信号。
在强动量行情中,该因子持续给出看空判定。全样本统计印证了这一缺陷:Alpha#6 在 5 日收益上的 Rank-IC 仅为 0.0024(Rank-IR 0.18),统计检验不显著,且在趋势个股上产生持续负向拖累。
三个因子的实证对照总结
综合 60 只核心美股标的在全样本区间的实测统计指标:
| 因子代号 | 输入预处理 | 核心算子 | 5日 Rank-IC | 5日 Rank-IR | 实测统计缺陷与约束 |
|---|---|---|---|---|---|
| Alpha#2 | 成交量差分 + 日内收益率 | 截面双 rank + 6日时序相关 | +0.0112 | 0.92 | 依赖 3~5 日均值回归,高频调仓会被交易摩擦侵蚀 |
| Alpha#3 | 原始开盘价 + 成交量 | 截面双 rank + 10日时序相关 | +0.0142 | 1.11 | 名义价格导致开盘排名时序方差趋零,产生伪相关 |
| Alpha#6 | 原始开盘价 + 原始成交量 | 无截面处理,直接 10 日时序相关 | +0.0024 | 0.18 | 序列非平稳导致趋势共线性,单边行情中持续逆势 |
工程落地的三条自检规则
在将此类价量因子应用于实盘或回测系统时,建议执行以下三项校验:
第一,明确反转算子的适应场景。外层负号将动量转为反转逻辑。必须评估策略在单边持续行情下的最大逆风容忍度,并设置基于波动率或时间止损的退出机制。
第二,剔除绝对名义价格的截面排序。公式中涉及价格排序时,应使用相对价格(如价格相对于 20 日均线偏离度、标准化收益率)替代绝对开盘价或收盘价,避免名义量纲固化截面分布。
第三,时间序列相关前必须执行平稳化。针对单只标的的时间序列计算,输入项必须满足平稳性假设(例如一阶差分或对数收益率),避免将非平稳趋势误判为统计相关。