阅读 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:截面负相关与均值回归

公式定义:

Alpha#2=−corr6(rank(Δ2log⁡V),rank(C−OO))\text{Alpha\#2} = -\text{corr}_6\left(\text{rank}(\Delta_2 \log V), \text{rank}\left(\frac{C-O}{O}\right)\right)

该公式包含三层计算:

  1. 输入项。成交量取 2 日对数差分 Δ2log⁡V\Delta_2 \log V,价格取日内收益率 (C−O)/O(C-O)/O;
  2. 截面排名。每日在股票池内进行百分位排序,消除不同标的间的成交量量纲差异;
  3. 时序相关与反转。对每只股票的两条排名序列计算 6 日滚动 Pearson 相关系数,最外层取负号。

实测走势与统计归因

最外层的负号决定了因子的收益方向。

若内层相关系数为正,说明成交量放大时日内涨幅排名靠前,缩量时日内收益落后,属于同向动量。经过外层负号反转后,Alpha#2 输出负值,不触发做多。

只有内层相关系数达到强负值时,Alpha#2 才会输出接近 +1.0+1.0 的高分信号。这意味着在 6 日窗口内出现了放量时日内收益垫底、缩量时日内收益居前的持续背离。

在美股数据池中,英伟达(NVDA)于 2024 年 12 月 18 日达到了 Alpha#2 的极值读数 +0.913。我们提取了其对应窗口前后的走势、成交量与因子值对应图:

Alpha#2 实测归因:放量下跌、截面负相关峰值与均值回归走势
点击放大
Alpha#2 实测归因:放量下跌、截面负相关峰值与均值回归走势

走势图分解了这一阶段的量价动态:

  • 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=−corr10(rank(O),rank(V))\text{Alpha\#3} = -\text{corr}_{10}(\text{rank}(O), \text{rank}(V))

Alpha#3 在每日横截面上对开盘价与成交量分别计算排名,再求 10 日滚动相关系数并取负。

实际运行该公式时,会遭遇名义价格引入的结构性偏差。

截面排名方差退化

股票的名义开盘价(Nominal Price)受公司历史送转股、拆股和总发行股本影响,绝对高低并不反映标的的短期强弱或基本面优劣。

当股票池内同时存在数百美元的高价股与数美元的低价股时,名义开盘价的横截面排名几乎退化为静态常量。

我们提取了样本池中高价股与低价股的 rank(O) 与 rank(V) 时序序列分布:

Alpha#3 实测缺陷:名义价格导致 rank(O) 时序方差极小
点击放大
Alpha#3 实测缺陷:名义价格导致 rank(O) 时序方差极小

实测数据表明:

  • 高价股(如 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=−corr10(O,V)\text{Alpha\#6} = -\text{corr}_{10}(O, V)

Alpha#6 省略了横截面排序步骤,直接对单只标的过去 10 个交易日的原始开盘价 OO 与原始成交量 VV 进行时间序列相关计算。

趋势共线性陷阱

该算法违背了时间序列分析的基本假设:未检验平稳性的非平稳序列不可直接计算 Pearson 相关系数。

在单边上行趋势中,价格序列呈现单位根过程并包含单调漂移项。伴随趋势推进,成交量通常同步呈现阶段性放大。开盘价序列与成交量序列在时序上具备高度共线性,二者在 10 日窗口内的相关系数经常稳定在 +0.8+0.8 以上。

经过外层负号反转,Alpha#6 会持续输出接近 -1.0 的极低数值,系统判定为强烈做空信号。

我们选取英伟达 2023 年初的单边上涨区间(2023-01-06 至 2023-04-03)进行实测跟踪:

Alpha#6 趋势陷阱:非平稳序列直接求相关导致持续负向信号
点击放大
Alpha#6 趋势陷阱:非平稳序列直接求相关导致持续负向信号

实测走势展现了这一系统性偏误:

  • 在 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-IC5日 Rank-IR实测统计缺陷与约束
Alpha#2成交量差分 + 日内收益率截面双 rank + 6日时序相关+0.01120.92依赖 3~5 日均值回归,高频调仓会被交易摩擦侵蚀
Alpha#3原始开盘价 + 成交量截面双 rank + 10日时序相关+0.01421.11名义价格导致开盘排名时序方差趋零,产生伪相关
Alpha#6原始开盘价 + 原始成交量无截面处理,直接 10 日时序相关+0.00240.18序列非平稳导致趋势共线性,单边行情中持续逆势

工程落地的三条自检规则

在将此类价量因子应用于实盘或回测系统时,建议执行以下三项校验:

第一,明确反转算子的适应场景。外层负号将动量转为反转逻辑。必须评估策略在单边持续行情下的最大逆风容忍度,并设置基于波动率或时间止损的退出机制。

第二,剔除绝对名义价格的截面排序。公式中涉及价格排序时,应使用相对价格(如价格相对于 20 日均线偏离度、标准化收益率)替代绝对开盘价或收盘价,避免名义量纲固化截面分布。

第三,时间序列相关前必须执行平稳化。针对单只标的的时间序列计算,输入项必须满足平稳性假设(例如一阶差分或对数收益率),避免将非平稳趋势误判为统计相关。