前面是“一只票,什么时候买卖”。这一关换个维度:同一天,在几千只票里挑谁更值得买——这才是现代量化的主流玩法。
“择时”是在时间轴上做决定;“选股”是在同一时刻、横向比较所有股票。后者叫横截面,是多因子投资的基础。三个核心工具一次学会。
这里用经典的动量:过去 120 天到 20 天的涨幅(跳过最近 20 天,避开短期反转干扰)。因子值高 = 最近强势。
fac = px[i-20] / px[i-120] - 1 # 动量:过去120→20天涨幅
每个月末,把所有股票按因子分成 5 组(Q0 最低 → Q4 最高),各组等权持有,看下个月谁涨得多。如果“高分组长期跑赢低分组、且 Q0<Q1<…<Q4 单调”,因子就有用。
d["grp"] = pd.qcut(d["fac"].rank(method="first"), 5, labels=False) # 分5组
group_ret = d.groupby("grp")["fwd"].mean() # 各组下月平均收益
Q4 减 Q0 的收益,剥离了大盘涨跌,是因子“纯度”的体现。
跑出来:动量最高组 Q4(+0.84%)反而 < 最低组 Q0(+1.04%),多空微负。动量在 A 股不灵,甚至反转——最近跌的下月反而涨,这是 A 股散户主导、爱抄底强反弹的真实特征。
这一关的目的是学方法,不是找赚钱因子。你掌握的“横截面打分 + 分层 + 多空”是评价任何因子的通用工具,下一关就用它玩转真正有效的因子。
这里是毛收益:没扣成本、没做市值/行业中性、没考虑涨跌停买不进。即使分层好看,离“能赚钱”还很远。
把动量取负号(fac = -动量)再跑——这其实就是“短期反转因子”,A 股反转有效的话多空应该转正。
横截面=同一时刻比所有股票;因子=排序的数;分层回测+多空=检验因子的通用工具;A股动量弱、反转强。
