这一期我们继续Alpha 101系列,讲到第4个因子了。这个因子很短,短到一眼就能写出来:
Alpha#4 = -1 * Ts_Rank(rank(low), 9)但我想说一句实话,这种短短一句话的因子,恰恰是最容易被忽略掉的,因为你可能一看就觉得:这不就是对 low 排名再做个时间窗口排名,乘个负号嘛,这有啥意思?
但如果你这么想,那你可能真的低估了这个因子。
拆解一下公式结构
先照例一步步拆:
low:每天的最低价。rank(low):在横截面上(即当天所有股票中)对每只股票的 low 做排名。低价更低的股票,排名靠前(数值更小)。Ts_Rank(..., 9):对上面这个 rank(low) 做一个时间序列排名,窗口是 9 天。也就是说,对每只股票而言,看它最近9天中 daily rank(low) 的相对位置。- 最后乘一个
-1,把这个值反过来。
总结一下逻辑就是:
看一只股票的 low 在所有股票里的横截面排名,然后再看这个横截面排名在过去9天里的时间序列表现,最后取一个反向。
这因子到底在抓什么?
直觉上,这个因子在说的是:
最近几天如果某个股票的「低价」在横截面中持续排得比较靠前(也就是说它在市场上是「比较便宜」的那拨),那这个因子值会比较高(因为排名靠前,
rank低,时间序列rank也低,乘个-1就变高)。
换句话说:它在寻找近期在整个市场中持续走低、被压价压得比较狠的股票。
是不是有点像在找最近跌得有点多的票?
但注意,它不是直接看跌幅,而是从低价在市场中相对位置这个角度去找的。
这其实避免了你因为价格绝对数值差异带来的偏差,比如某些高价股天然 low 就高,但 rank 一处理就统一量纲了。
它本质上是个“反转”因子
既然这个因子偏爱那些 low 在市场中持续靠前的股票,那你猜它未来的 alpha 是怎么来的?
当然是赌反弹啊!
它赌的是,在过去一段时间内被市场打压得厉害的票,有可能在短期内迎来修复或者反转。
所以这个因子本质上是一个短期反转类因子。你可以理解为是 low rank 的均值回复效应在起作用。
我自己是挺喜欢这种逻辑清楚的反转因子,虽然它不像一些高大上的 momentum 那样踩趋势顺风车,但你可以靠捡便宜捡出超额收益来,只要你捡的不是垃圾票。
注意几个实操层面的问题
这个因子在实际使用中会有几个坑需要注意:
1. 容易踩跌停或基本面恶化的雷
因为它喜欢低的 low,而那些每天都在破新低的票,往往基本面出了大问题。
比如连续跌停的、被 ST 的,都会被这个因子强烈吸引。
我的建议是:一定要配套做一些风控过滤,比如排除最近被预警的财报、排除 ST 股票、排除流动性太差的票。
2. 窗口太短,信号可能有点噪
9天的时间窗口,基本就是个短线因子。
你如果做的是中长期 alpha,对你可能意义不大。
但是如果你做的是高频轮动策略,像 5~10天持有期那种,这个因子挺好用的,适合当一个选股过滤器。
3. 横截面 vs 时间序列的混合结构
这个因子结构很典型地用了横截面rank + 时间序列rank,它不是只对单只股票看低点,也不是完全的市场横截面对比。
这种结构有个好处是可以在市场风格轮换时捕捉到边缘票的反转机会,缺点就是可能太敏感。
我的个人使用经验
我之前在做一个 A 股短线反转策略时用过这个因子。
单独回测表现一般(IC 在 0.01~0.02 左右波动),但是跟另一个动量类因子做加权之后,居然能稳定拉出 alpha 来。
我觉得这就是组合的魅力吧,一个因子虽然不强,但只要它风格独特,就能在组合里扮演异质补充的角色。
所以别一看到 alpha 低就扔了它,你得看它能不能跟你的主因子互补。就像一个战斗力不强的边锋,但传球很骚,一样能赢球。
代码示例
import pandas as pd
import numpy as np
# 假设 low 是一个 DataFrame,index 是日期,columns 是股票代码
def alpha_4(low: pd.DataFrame) -> pd.DataFrame:
# 1. 横截面排名:对每一行(即每天)进行排名
cross_section_rank = low.rank(axis=1, method='average', ascending=True)
# 2. 时间序列排名:对每一列(即每只股票)进行 rolling 排名
ts_rank = cross_section_rank.rolling(window=9, min_periods=9).apply(
lambda x: pd.Series(x).rank().iloc[-1], raw=False
)
# 3. 乘以 -1
alpha = -1 * ts_rank
return alpha
小结
Alpha#4 看似简单,其实背后逻辑清晰明确:低点相对位置 + 时间窗口下的反转预期。
这是一个风格鲜明的短期反转因子,在做低价博反弹的策略里可以考虑。
我觉得量化里最有意思的地方就在这里,一句小小的公式,背后却藏着一个交易员的偏好和市场假设。
理解这些因子的真正含义,不仅仅是在套公式,而是在建立你对市场行为的直觉和语言体系。
下一期我会讲 Alpha#5,一个更加有动量意味的因子,敬请期待。
——END