因子选择:7 个方向胜过 N个因子
| 正文共:9,842字 含 38 张配图 预计阅读时间:25分钟 |
目前QMT躺平还有少量位置,需要100W以上,懂的私我~
这不,大晚上的,一个朋友把一份报告甩给我,语气很像失恋:他用了两百多个因子,跑了梯度提升树,特征重要性排出来前十名清清楚楚,样本内漂亮得像教科书,上了真实资金之后,曲线立刻变成一条向下的小斜线。
他问我一句话:到底该怎么选因子。
这个问题我认真算了一遍。不是算他的模型,是我自己从零搭了一遍:本地全 A 数据,4620 只证券,4077 个交易日,2011 年 4 月到 2026 年 6 月,每 20 个交易日切一个截面,一共 186 个截面,在这个面板上构造 20 个只用价格和成交额就能算出来的因子,然后把「选因子」这件事的每一个环节都拆开验一遍。
先说结论,因为它跟大多数教程写的不一样:
把这 20 个因子按强弱排序、逐个等权加进去,最好的一次是 2 个因子,信息比率 0.807。而其中最强的单个因子,自己就有 0.809。也就是说,认真做的加法,结果比不做还差。
但把这些因子先互相剔除、只留下彼此不重复的部分,7 个方向就能做到 1.039,比最强单因子高 28.4%。
所以这篇的答案是:因子选择不是一道加法题,是一道减法题。你真正要选的不是「哪些因子好」,是「哪些因子还不重复」。后面十节,我把这 28.4% 是怎么来的、以及它有多脆弱,一层层拆给你看。
01 | 先把尺子造出来,然后我差点被自己骗了口径不清楚的结论,等于没有结论 |
在选因子之前,得先定一件事:用什么衡量一个因子好不好。这件事上,行业里已经有一套很成熟的尺子,叫信息系数,简称 IC。它的意思是:在同一个时间点上,把所有股票按这个因子的值排个队,再按它们后来的表现排个队,看两个队伍的顺序像不像。
完全一样是 1,完全相反是 -1,毫无关系是 0。IC 只关心顺序,不关心幅度,所以它不会被几只暴涨暴跌的票带偏。
然后是这一节真正想说的部分:我在这套流程上,被自己坑了一次。
第一次跑完,结果是这样的:20 日均线偏离度这个因子的 IC 是 -0.8019。我看到这个数字的第一反应不是高兴,是后背发凉。因为这意味着一个只用收盘价和均线算出来的东西,几乎能完美预测未来 20 天的涨跌。这种东西不存在。它要是存在,市场早就没了。
我去查代码,发现是一个低级到不好意思说的错误:我写了一个取数函数,取「过去 N 天」和取「未来 N 天」的正负号搞反了。于是所有的动量因子算出来的是未来涨跌,而所有的「未来涨跌」算出来的是过去涨跌。拿过去和未来对撞,当然能撞出 -0.80。
这个函数错在哪里,值得单独看一眼。它长这样:取「第 t 天的未来第 k 天」,原本应该写成 out[t] = M[t+k],我写成了 out[t] = M[t-k]。一个减号,损失了一整晚。
我把这个经历写出来,不是为了坦白,是想说一个更重要的判断:当你的回测结果好到不合理的时候,问题几乎一定在你的代码里,不在市场里。这一条比任何因子都值钱。它救过我不止一次。
修好之后,20 个因子的 IC 长这样。横轴是 IC 均值,柱子朝左代表这个因子值越大、后面表现越差。
最强的不是动量,也不是波动率,是成交额(图里那个 lnA):IC 均值 -0.1137,意思是成交额越大的票,后面 20 天表现越差。最弱的是 60 日峰度,IC 只有 +0.0053,基本等于没有。
这个名单本身没什么惊喜,大部分做量化的都能猜到个大概。真正有意思的东西,藏在「0.11 这个数字到底算大还是算小」这个问题里。
02 | 0.11 的 IC 到底算不算数拿 100 个瞎编的因子当对照组 |
0.11 听起来很小。你在任何一篇讲机器学习的文章里,都看不到谁会为 0.11 的相关系数欢呼。但金融数据的相关系数和别的地方不一样,它天生就小,因为里面全是噪声。
要判断它大不大,最好的办法不是跟别的领域比,是跟自己比。我生成 100 个纯随机因子,每个都跟真因子一样做横截面排名,一样对撞未来 20 天涨跌,看它们能撞出什么来。
100 个随机因子的 IC 全部挤在 0 附近,标准差 0.0014,绝对值最大只有 0.0036。而最强的真实因子是 0.1137,是随机波动水平的 79 倍。
这就是「显著」这个词在这里的真实含义。不是 0.11 很大,是噪声比你想的小得多。186 个截面、每期三千多只股票,这个样本量足以让 0.0014 的随机波动被压到很窄,所以哪怕 0.02 的 IC,都可能是真的。
但也正因为如此,这里有个陷阱:样本越大,越容易把「微不足道」判成「显著」。186 期下来,很多 t 值能到 5 以上,可它们的 IC 只有 0.02。这在统计上完全正确,在交易上完全没有意义。所以我在后面所有比较里,都不看 t 值,只看两件事:IC 多大,以及稳不稳。
这张箱线图是每期 IC 的分布。你会发现有些因子很有意思:均值看着不大,但箱子很长,说明有的年份它极强,有的年份它完全失灵。这种因子在报表上很好看,用起来很难受,因为你永远不知道自己处在它的哪一段。
03 | IC 和 ICIR 是同一把尺子,这不是好事换一个指标,名次变了,但信息没变 |
做量化的人一定听过一个说法:不要只看 IC,要看 ICIR。理由是 IC 高但忽高忽低的因子不能用,ICIR 才是把「稳」算进去的那个数。ICIR 的定义是 IC 均值除以 IC 的标准差。
这个说法对不对?对。但它有个前提被忽略了。如果所有因子的 IC 标准差都差不多,那 ICIR 就是 IC 乘一个常数,两者是同一把尺子。排序会变,但你拿到的信息完全一样。
换成 ICIR 排序,名次确实变了。成交额波动的 IC 只有 -0.0548,排不到前面,但它的 ICIR 是 -0.809,是全场最高的绝对值,因为它每一期几乎都是负的,几乎不翻正。而市值的 IC 最强(-0.1137),ICIR 只有 -0.709。
听起来是两回事。但把两个数画在一张图上,你就明白它们关系有多近。
20 个点几乎贴着一条斜线。这是一条用平均标准差画出来的参考线,实际点虽然散,但基本沿着它走。这说明在这 20 个因子上,「用 ICIR 代替 IC」并没有带来新的判断维度,它只是把同一件事换了个说法。
这里想说的不是「ICIR 没用」,是另一个更普适的道理:两个指标如果高度相关,同时看它们不会让你更安全,只会让你更自信。而自信,是量化里最贵的一种错觉。
04 | 因子会馊,但馊的速度不一样这条决定了你多久调一次仓,不是选哪个 |
因子的有效期不一样。有的因子今天算出来,明天就没用了,这叫短期反转。有的因子能管 1 年,这叫长期价值。我把同一个因子的 IC 分别对 5 天、10 天、20 天、60 天的未来表现各算了一遍。
灰线是全部 20 个因子,彩线是挑出来有代表性的 8 个。一眼能看出两件事:
第一,大部分因子的有效期在 20 天附近见顶。5 天太短,噪声占主导;60 天太长,信息被稀释。第二,峰值的形状差别很大。有的走平,有的断崖。
为了把形状量化,我算了一个比值:60 日的 IC 绝对值除以 20 日的 IC 绝对值。大于 1 表示越拿越强,小于 1 表示会衰减。
两根最极端的是:非流动性因子 1.47,拉长到 60 天反而更强;20 日动量 0.88,越拿越弱。这两个数字的价值不在排名,在于它们告诉你两件完全不同的事:前者适合慢,后者适合快。你如果用同一套换手频率去跑所有因子,等于逼所有人穿同一码的鞋。
下面是三个因子的 IC 时序。这是我最喜欢看的一类图,因为它能暴露「这个因子到底是一路有效,还是只在某一段有效」。
市值因子:常年为负,但中间翻正过一段。翻正的那一段是 2017 年前后,那两年大票跑赢小票,风格反过来了。如果你在 2016 年底看到它「失效」就把它删掉,你会错过后面十几年的持续有效。
成交额波动:均值不亮眼,但几乎没有翻正过。这就是 IR 高的来源,不是强,是稳。
20 日动量:2015 年前后像是两个不同的因子。2015 年上半年它一度接近零,那是极端行情里所有票同涨同跌,排序失去意义。这种「因子在极端市况下失效」不是缺陷,是量价因子的通用属性。你没办法在造因子的时候把它修掉,只能在用的时候知道它会在什么时候骗你。
05 | 最狠的一刀:把它跟别人互相剔除这一节是全文的转折点 |
前面四节都在说「单个因子好不好」。但真正决定你要不要它的,不是它好不好,是它跟已有的那些,有多像。
做法很简单:每一期,把所有股票按每个因子排成 0 到 1 的分数,然后两两算相关。186 期算完取平均,得到一张 20 乘 20 的表。
红是正相关,蓝是负相关。这张图看着花,但有两个地方很扎眼:左上角那几个动量因子互相之间全红,20 日、60 日、120 日、250 日动量,四兄弟几乎是一回事;中右下那一块成交量相关的因子也是红的,成交额比率、成交额波动、量价相关,也在互相解释。
190 个因子对的相关系数分布是这样的:
平均相关系数 0.247,看起来不高。但有 11 对超过 0.7,26 对超过 0.5。0.7 是什么概念?在统计上,两个相关系数 0.7 的变量,其中一个能解释另一个 49% 的变异。在选因子的语境里,这就该当成同一个因子处理。
最像的一对你看一眼就懂:20 日动量 和 20 日均线偏离,本质是同一件事。一个算「今天比 20 天前涨了多少」,一个算「今天比 20 天平均高了多少」,分子分母都在说同一句话。你写两个因子,跑两遍回测,得到两份「独立验证」,其实只验证了一次。
这就是我要说的「最狠的一刀」。具体的做法是:每一期,把每个因子对「其余 19 个因子」做一次横截面回归,只留下回归残差。残差的意思就是「这个因子里,别的因子解释不了的那部分」。然后把残差当成新因子,重新算 IC。
浅蓝是原始,红色是剔除之后。差距大得不像话。整体上,20 个因子的 IC 绝对值加起来,剔除后只剩 18.3%,蒸发了 81.7%。
按单个因子看保留比例:
除了一个特殊情况,其余 19 个全部都掉到 40% 以下,大半在 15% 以内。那个特殊情况是 60 日峰度,它原始 IC 只有 0.0053,分母太小,比值失去意义,剔除后反而变大了。这正好示范了另一件事:比值类指标在分母接近零的时候会骗人,所以要同时看绝对值。
用信息比率画同样的对比,会看到一个很干净的形状:
所有点都落在虚线下方。没有一个例外。虚线是「剔除后不变」的意思,现实中不存在这样的因子,因为你不可能找到一个跟其他 19 个都完全无关的量价指标。
这一张图就是「因子共线」的完整代价:你以为你手里有 20 个因子,实际上大约只有 3.7 个。(20 乘以 18.3%)
所以在评估一个新因子的时候,我的习惯是先问一个问题,而不是先看它的 IC:
横轴是「它跟你现有因子里最像的那个有多像」,纵轴是「它有多强」。左下角那一堆是「又弱又像」,用不着。右上是「又强又像」,这种最容易骗人,因为它数据好看,实际上只是你已有因子的复读机。真正值得加的是左上角:不强,但不重复。
06 | 分层是最直观的证据,也是最容易骗人的十组柱子好看,不等于因子能用 |
行业里还有一个几乎人人都画的图:把股票按因子值分成十组,看每组的平均表现。它的好处是直观,坏处也是直观,人天生就喜欢看台阶,哪怕这个台阶是随机堆出来的。
市值因子(成交额代理)的十组,几乎是一条直线往下。这是最难得的一种形状,因为它是单调的,不是靠两头撑起来的。很多因子只在第一组和第十组有差异,中间八组乱成一团,那种因子的可用性要打对折。
成交额波动,最高那一组明显更差,前面九组比较平。这种形状说明它主要在识别「最极端的异常」,而不是在做连续排序。
20 日动量,越往上越差,最后一组跌得最狠。这张图值得多看几秒,因为它讲的是 A 股最稳定的一个统计事实:短期涨得多的票,后面倾向于跑输。注意这只是统计倾向,不是规律,更不是操作提示。
非流动性因子,越难成交的越强,单调性 0.920,是全场最高。但这一类因子有个致命问题:它的强度很大一部分来自「你根本买不到」。研究价值和执行价值是两件事。
距 250 日高点这个因子,形状很乱。它的 IC 只有 -0.0179,本来就不强,分层图也证实了这一点。这种因子在筛选阶段就该被淘汰,不该等到组合之后才发现它没用。
把所有因子的单调性排一下,你就得到了一个比 IC 更严格的门槛:
好的因子单调性绝对值在 0.8 以上,勉强能用的在 0.5 到 0.8,低于 0.3 的基本可以不要。按这个标准,20 个里有一半不达标。
这是把方向调对之后的净值。最强的那个,15 年翻了 3 倍多。但我要提醒一句:这条曲线是「高分组减低分组」的价差,它是一个研究口径,不是任何人能拿到的结果。真实世界里,你要扣掉交易成本、冲击成本、还有你根本借不到券的那部分。这类曲线的正确读法是「这个因子在方向上是不是持续有效」,不是「能赚多少」。
07 | 加法的两种命运同样 20 个因子,两条完全相反的路 |
现在到了最核心的地方。假设你已经把 20 个因子都算好了,接下来怎么组合?行业里最常见的做法是:按强度排序,从强的开始一个个加进去,看组合表现怎么变。
组合 IC 从 1 个因子时的 0.1137,一路到 20 个时是 0.1106。加了 19 个因子,组合 IC 反而略降。中间有点小起伏,但整体就是一条横线。
换信息比率看,稍微乐观点,但也只是稍微:
最好的一次是 2 个因子,0.807。而全场最强的单个因子,是 0.809。
这就是「加法」的真实结果:你辛辛苦苦又造了 19 个因子,最后的组合比最强的那个单独用,还低了 0.002。统计学上这叫没有增益,工程上这叫白干。
为什么会这样?因为你的因子高度同源。20 个因子,81.7% 的信息是重复的,等权相加等于把同一句话说 20 遍。说 20 遍不会让它更真,只会让最好听的那一句被稀释掉。
那如果把重复的部分先剔掉呢?我用第六节那套正交残差,重新做了一遍同样的「逐个加入」实验:
灰线是原始因子直接相加,红线是剔除后再相加。两条线从同一起点出发,走向完全不同。
剔除后:2 个方向 0.834,4 个 0.883,6 个 1.017,7 个 1.039 见顶,之后一路回落到 20 个时的 0.822。
1.039 对比全场最强单因子的 0.809,高 28.4%。这是我在这 20 个因子里找到的唯一一个真实增益,而且它来自减法,不来自加法。
剔干净之后,还能自己站住的就这几个:20 日波动率的残差最强,成交额波动的残差紧随其后。而原始 IC 最强的市值因子,剔除后几乎什么都不剩(残差 IC 只有 -0.0060),因为它的信息被别的因子吃干净了。
注意「7 个之后开始回落」这个形状。它说明多因子组合存在一个最优规模,超过之后,新加入的因子带来的噪声比信息多。这个数字在别的数据集上会变,但「存在一个最优点」这件事,我认为是普遍的。
08 | 权重和样本外:最后两个问题一个几乎不重要,一个至关重要 |
组好因子之后,接下来是给每个因子分权重。这部分在教程里往往占很大篇幅,什么等权、IC 加权、ICIR 加权、最大化信息比率、机器学习调优。我四种都试了。
四种方法的组合 IC 分别是 0.1142、0.1195、0.1185、0.1142。最好的和最差差 0.0053,相对差距 4.6%。在真实交易里,这点差距还不够付一个月的手续费。
净值曲线几乎贴在一起。所以我一直认为,权重方法是因子研究里性价比最低的一块。你在权重上花两周调出来的东西,不如在因子正交性上花两天。
但样本外这件事,重要得多。用前一半时间(2011 年 4 月到 2018 年 11 月)选出 8 个因子,然后完全不改,只看后一半。
这 8 个因子样本外平均保留了 95.3%。这个数字看起来很像好消息,但从研究的角度看,它其实是个混合信号。
好的一面:说明这些量价因子没有躲起来,它们不是过拟合出来的鬼东西,是市场结构里真实存在的规律,换了时间段还在。坏的一面:既然它们这么稳,说明它们也这么老。一个十几年都没变的规律,意味着它已经被无数人验证过、用过。稳定性本身就是拥挤度的另一面。
09 | 五个没人告诉你的体检维度IC、IR、分层之外的筛子 |
常规流程到这就结束了。但我又加了五个维度,每一个都能筛掉一批看起来没问题的因子。
第一个:这个因子最近灵不灵,能预测它下期灵不灵吗?
我算了每个因子 IC 序列的一阶自相关。结果全部落在 -0.14 到 +0.02 之间,基本等于没有记忆。
这一条把「因子动态轮动」的统计基础直接抽掉了。如果你没法用「过去 12 期这个因子表现好」来预测「下一期它表现好」,那么所有基于历史表现分配权重的轮动方法,本质上都是在追噪声。
第二个:它在涨的时候有用,还是跌的时候有用?
按未来 20 天全市场中位表现的正负,把 186 期分成上涨期(45.2%)和下跌期。绿柱是涨期,红柱是跌期。你会发现明显分家:有些因子在跌期更强,有些在涨期更强,两边都强的很少。
第三个:同一个因子在大票和小票里,是不是同一只因子?
答案是不是。比如 20 日波动率,在大票组里 IC 是 -0.0895,在小票组里只有 -0.0167,强度差 5 倍。而 60 日波动率更极端:大票 -0.0904,小票 -0.0230。点离虚线越远,说明这个因子越「看盘子下菜」。如果你的股票池在大票和小票之间来回切换,同一个因子的表现会跟着漂移,你会误以为是因子失效了。
第四个:强度和换手有关系吗?
没有明显关系。这 20 个因子的每期换手率在 2.8% 到 8.6% 之间,而 IC 从 0.005 到 0.114 都有分布。这其实是个好消息:便宜的好因子存在,你不用为了强度付出高换手的代价。但要注意,这个换手是在「前 10% 分组」口径下算的,它天然低,因为排名变动本来就慢。
第五个:它能年年有效吗?
答案是都不能。这张图是 20 个因子在 16 个年份里的 IC。你横着看任何一行,颜色都不会一致;你竖着看任何一列,也没有哪 1 年所有因子都红。包括那个最强的市值因子,它也有几年是反的。
如果你按「每年都要有效」这个标准去筛因子,你会一个都不剩。反过来说,一个因子如果在某 1 年完全失效,这本身不是淘汰理由,要看它失效的时候有没有规律。
把前面九个维度压缩成一张表:强度、稳定性、单调性、跨年稳定、剔除后留存、低换手,六项各归一化到 0 到 1,排个序。
这张表最有用的一句话是:没有一行是全绿的。最强的市值因子,强度满分,剔除后留存近乎为零;成交额波动的稳定性接近满分,强度只有一半;非流动性强度不错,但换手和可得性都差。
到这里,常规的「因子选择教程」就该收了。但我觉得真正有意思的部分才刚开始,因为上面所有数字合起来,指向三个跟「怎么选」不太一样的问题。
第一个答案:因子不是预测能力,是一个还没被修好的定价错误
如果因子是「预测能力」,那它应该像物理定律一样到处成立。但我们的数据显示,同一个因子在大票和小票里强度差 5 倍,在涨期和跌期不一样,在不同年份不一样,甚至同 1 年不同月份也不一样。
这种「到处都是例外」的东西,不是定律,是一个还没被修好的漏洞。
市场的定价效率在大部分地方是高的,但在某些角落是低的,因为那里有摩擦:钱不够多、信息不够快、规则限制、或者单纯没人愿意去。因子就是这些摩擦的形状。你选因子,其实是在选「你愿意去修哪个漏洞」。
这个视角一换,很多问题就通了。为什么小票的因子更强?因为小票那边人少、摩擦大。为什么非流动性因子看起来这么好,但用不了?因为它的强度恰好来自「你进不去」。为什么市值因子最强?因为 A 股的小票溢价,本质是流动性折价和壳价值的历史残留。这些都不是「规律」,是「状况」。状况会变,规律不会。
第二个答案:81.7% 的重复,说明我们都在同一口井里打水
20 个因子,互相剔除后只剩 18.3% 的信息。这个数字我盯着看了很久。
20 个名字听着不一样:动量、反转、波动、偏度、峰度、非流动性、量价相关、成交额比率。但它们全部由同两样东西算出来:价格和成交量。既然原料只有两样,能榨出来的独立信息就不可能是 20 份。
这件事有个更尖锐的推论:如果一个团队号称有 500 个因子,那它要么有 500 种数据源,要么只有几十种真信息,剩下的是同一口井里打上来的水,装在不同桶里。而「因子库有多少个」这种指标,鼓励的恰好是打更多的桶。
所以真正的因子研究,增量不在「再想一个公式」,而在「再找一种市场没被记录下来的状态」。财报是一种,舆情是一种,产业链是一种,订单流是一种。只要是别人都在看的价格和成交量,你怎么组合都跳不出这 18.3%。
第三个答案:因子选择是一个自我否定的过程
这是我认为最深的一层,也是最不舒服的一层。
前面说,因子是「还没被修好的定价错误」。那么,使用一个因子这件事本身,就是在修它。你用得越多,错价被抹平得越快。所以每一个有效因子,都自带一个倒计时,而倒计时的速度,恰好等于「有多少人在用它」。
这就造成一个悖论:你越是努力地验证一个因子有效,就越会让它失效。因为验证的过程必然包含「把它标准化、讲清楚、传播出去」。而一个因子一旦被讲清楚,它就从「信息」变成了「共识」,从「共识」变成了「拥挤」,最后变成「流动性供给」。
所以我看到样本外保留 95.3% 的时候,第一反应不是高兴,是心里咯噔一下。十几年都没被修好的漏洞,要么是它太隐蔽,要么是它根本不值得修。而 20 个纯量价因子,大概率属于后者,它们是「已知的、公开的、被写进教科书的」,你能算出 0.11 的 IC,全世界有几十万人都能。
那怎么办?我的看法是:别在因子上找优势,在「别人不愿意做的地方」找优势。不愿意做的原因有很多:数据脏、更新慢、容量小、需要行业知识、熬人的时期长到没人受得了。每一种「不愿意」,都是一道护城河。而一个公式,是没有护城河的。
补一段:机器学习在这里的特殊陷阱
回到开头那位朋友。他用树模型选因子,然后看特征重要性,问题就出在这一步。
特征重要性的定义是「在给定其他特征的前提下,这个特征减少了多少误差」。注意「给定其他特征」这五个字。如果两个因子高度相关(我们的数据里 11 对超过 0.7),模型会把贡献随机分给其中一个,另一个重要性趋近于零。这时候你按重要性排序删掉「不重要」的,可能刚好把那个更干净的删掉了。
而且模型越强,这个问题越严重。一个足够复杂的模型,能把噪声也拟合成「重要特征」。你给它 200 个因子,它会告诉你其中 30 个很重要,样本内确实很重要,样本外全废。这就是我常说的:树的深度,等于它骗你的深度。
所以在机器学习流程里,我认为正确的顺序是:先做正交化筛选,再进模型。让模型面对的是几十个彼此独立的方向,而不是两百个同源指标的排列组合。模型不需要你给它更多信息,它需要你给它更少相关的东西。
如果只记一句:一个可复用的判断顺序
把这篇压缩成一个顺序,我按这五步走:
第一步,先看结果合不合理。IC 超过 0.3、单调得像画出来的、净值曲线光滑得像指数函数,一律先怀疑代码,别怀疑市场。我自己就在这里栽过。
第二步,跟随机因子对一次表。标准差多少、倍数多少,心里要有数。0.11 到底是 79 倍还是 3 倍,结论完全不同。
第三步,先问「它跟谁重复」,再问「它有多强」。相关性超过 0.7 的,当成同一个因子;超过 0.85 的,直接删掉一个。
第四步,剔除后再组合,看有没有真增益。如果直接相加的最好结果还不如最强单因子,说明你手里的东西确实只有一两个真信息。
第五步,最后再调权重。因为它是这五步里最不重要的。你在这一层花的每一小时,单位时间的产出都低于花在第三步上的10 分钟。
最后说一句我自己的感受。这堆数字算完,我没有更会选因子,我只是更清楚「选因子」这三个字被高估了。真正决定结果的,是数据里有没有别人没有的东西,以及你有没有耐心等到它该起作用的时候。公式是最便宜的那部分,也是最容易被复制的那部分。
第一条,「正交后 7 个最优」不是普适数字。它依赖于我这 20 个因子的具体构成、这段样本的具体市况、以及每 20 个交易日一期的换手节奏。换一批因子、换一个市场,最优点会移动。我确信的是「存在最优点」,不确信它一定是 7。
第二条,正交化的顺序会影响结果。我用的是固定顺序的逐步回归(Gram-Schmidt)。换一个顺序,每个因子分到的「独立信息」会不同,虽然总量一致。所以我只拿它做「信息有多少重叠」的证据,不拿它当唯一的因子筛选结论。
第三条,价格是不复权的,我用日涨跌幅重建了代理价。剔除单只单日涨跌幅绝对值超过 21% 的样本(超过任何板块的跌停幅度),一共 4,286 个,占全部样本的 0.0352%。这个处理能挡住送股拆股的假跳空,但挡不住长期停牌后的复牌跳空,那部分会污染一部分波动率因子。所以波动类因子的真实强度,可能比我算的低。
第四条,我没有市值数据,用日均成交额做了代理。成交额和市值高度相关但不是一回事,换手率高的票会被高估。所以「市值因子最强」这个结论,严格来说应该读成「成交额因子最强」。这两者在 A 股的实证里方向一致,但不等价。
第五条,分层净值没有扣成本。第六节那条「15 年 3 倍多」的曲线是价差口径,两边都没有交易成本、没有冲击、没有借券费用。真实结果会显著低于它。它的用途是看方向是否持续,不是看能拿到多少。
第六条,我可能只留下了好看的结果。我一共跑了六七十组统计,写进文章的是这 38 张图。不支持的、没差异的,我没放进来。这不是故意,但我知道人有这个毛病。所以口径和做法我全写在文末,谁愿意重算一遍都行。
第七条,也是最要紧的:这篇所有的数字都是历史统计。它们描述的是过去 15 年 A 股这批股票的行为,不构成对任何标的选择、时机、方向的判断。因子研究最危险的地方就在这里:它看起来像科学,用起来像占卜。
目前QMT躺平还有少量位置,需要100W以上,懂的私我~
合规声明:本文为历史数据的统计描述与方法论讨论,不构成任何投资分析、操作指引或决策依据。全文不涉及任何具体上市公司、证券标的、价格判断与点位预测,不含任何形式的劝诱、承诺或表现暗示。文中所有因子均为公开的价格与成交量衍生的通用统计指标,仅用于说明研究方法,不代表任何可用的策略结论。文中所有测算均为个人依据公开历史数据推演,不代表任何机构观点,读者据此所做的任何决定与行为风险自担。
数据与方法说明:①样本为本地存储的 A 股日行情,2010 年 1 月 4 日至 2026 年 10 月 21 日共 4,077 个交易日,4,620 只证券。②价格不复权,为保证因子可算,用清洗后的日涨跌幅连乘重建代理价,剔除单只单日涨跌幅绝对值超过 21% 的样本共 4,286 个(占 0.0352%)。③未上市与停牌期间的价格缺口,对应位置的因子值一律置空,不参与截面计算。④截面为每 20 个交易日一个,起点 2011 年 4 月 1 日,终点 2026 年 6 月 29 日,共 186 期。⑤因子共 20 个:20/60/120/250 日动量、1 日反转、20/60 日波动率、20 日最大与最差单日、60 日偏度与峰度、距 250 日高点、20/60 日均线偏离、20 日与 250 日成交额之比、20 日成交额波动、60 日量价相关、20 日非流动性、20 日平均成交额对数、20 日振幅、连续同号天数。⑥IC 为每期因子值与未来 20 日表现的截面 Spearman 秩相关;衰减部分另算了未来 5/10/60 日。⑦ICIR 为 IC 均值除以 IC 标准差;信息比率为同一定义。⑧相关系数为 186 个截面 Spearman 相关的平均。⑨正交化为每期对其余 19 个因子做横截面线性回归取残差,按固定顺序逐步进行。⑩分层为按期把因子值分 10 等份,等权计算之后 20 日的平均表现。⑪组合实验为按 IC 绝对值从高到低逐个加入,等权平均秩分数。⑫样本内外分割点为 2018 年 11 月 22 日(第 93 期)。⑬随机因子对照组为 100 组标准正态随机数,遮罩与真实因子一致。⑭所有百分位数为对应样本的简单分位数,未做加权,未做显著性检验。
免责声明:本文所有观点为个人思考,读者据此所做的任何决定与行为,风险自担,与本文作者及本公众号无关。