
做因子研究,前期最大的烦恼往往是:
“因子不够。”
于是动量、反转、波动率,看到一个算一个。
等真攒到几十、上百个,烦恼又变成了:
“因子太多了,不知道哪个有效?”
哪些值得留?哪些其实重复了?有一个 IC 看着不错,到底要不要继续?
我最近翻了几个 QuantSkills 的 Skill,发现这几个问题,其实都有对应的解决办法。

因子不够,去哪找?
假设你最近想研究动量、趋势这一类信号。
最传统的做法,是自己找论文、翻公式,再一个个写成 Python。
这当然也能做。
但如果只是想先搭一个候选池,这一步其实没必要全部从零开始。
可以先试试这个因子库:
skill-quant-factor-directional-alpha

现成的方向类因子库,收录 296 个因子,覆盖趋势、动量、突破、反转、通道五类,只需要 OHLCV 数据即可计算。

怎么用?
将 Skill 交给 Claude Code、Codex、Cursor 等 AI 编程工具;
准备符合要求的 OHLCV 数据,选择需要的因子进行计算。
比如先挑一个具体因子,让 AI:
使用 directional-alpha 中的指定因子,
读取我的日线 OHLCV 数据,
计算因子值并输出结果。
它的每个因子都有独立的计算入口和对应说明,也支持按 symbol 批量计算。

你可以先从里面挑选一批候选因子,再统一计算、比较,而不是每次找到一个因子,都得自己把公式写成代码。
实际拿 A 股日线数据跑过一轮后,选取的样本因子都能正常算出结果。
不过要分清楚:
296 个因子只是候选空间,不代表这些因子直接拿去实盘都有效。
它真正解决的是:
“开始做因子研究,手里的候选太少,想快速搭一个方向类因子池。”
至于最后留下哪些因子,还得继续做评价。

因子类型太单一怎么办?
手里的因子一多,很快又会遇到另一个问题:
怎么全是动量、趋势、反转?
继续往里面加,可能只是换个窗口、换个参数,最后还是在重复表达同一个东西。
这时候不妨换个Skill:
skill-quant-factor-risk-pattern-alpha

它可以补充不同类型的因子。
里面有 288 个因子, 覆盖:
Volatility / Pattern / Oscillator / Drawdown

也就是波动率、K 线形态、振荡器、回撤压力等方向。
怎么用?
准备包含 open / high / low / close / volume 的行情数据;
从 288 个因子里选择需要测试的因子;
调用 compute_factor 计算,再用 validate.py 做验证。
比如:
使用 AAPL、MSFT、NVDA、TSLA、GOOGL 五只美股近两年的 OHLCV 数据,从 288 个因子里抽取了 15 个代表性因子,覆盖不同类别和不同变换方式。
然后逐个运行:
result = compute_factor(df)
再用对应的 validate.py 做检查。
结果很明确:
15 个因子全部运行成功,覆盖率都在 98.5% 以上。

更关键的是,15 个因子全部通过了无未来函数验证,max_diff = 0.00。
所以这个 Skill 更适合解决一个很具体的问题:
手里的因子类型比较单一,想快速补充一批已经整理好、可以直接计算和验证的风险/形态类因子。
而不是自己重新查公式、写代码、再从头验证一遍。

怎么判断这个因子是否有效?
这是做因子研究最容易卡住的一步。
比如刚算出一个因子:
Rank IC = 0.04
第一反应可能是:
“还不错,继续回测。”
但其实还早。
一个因子 IC 看起来不错,不代表它就值得继续。
还得看看:
Rank IC 和 Pearson IC 是不是差很多?
分组收益是不是单调?
换手率高不高?
回测结果是不是被几个极端值撑起来的?
这时候可以用:
skill-factor-evaluate
一个专门给单个因子做全面评价的Skill。
它能帮你快速判断这个因子值不值得继续深入。

怎么用?
先选一个你要测试的因子,在 GOOGL / MSFT / TSLA 三只美股的真实日 K 数据上跑了一遍。
它会依次检查:
Rank IC、Pearson IC、多头回测、分组单调性、年化换手率、综合评分,最后形成一份完整的因子评价结果。
跑完发现,这个因子在 3 只美股样本上被体检出完全无效(score = -1.295)

这个结果反而挺有价值。
因为研究里最浪费时间的,不是发现一个因子不好。
而是:
IC 看着不错 → 继续调参数 → 再做回测 → 再做组合 → 最后才发现不值得。
先做一次标准化评价,至少可以帮你决定:
接下来的一个小时,还要不要继续研究这个因子。

因子越来越多,会不会重复?
因子多起来以后,还有一个很容易忽略的问题:
你以为是 100 个因子,实际上可能只有几个不同的信号。
单独看,每个因子都能算,也都有自己的 ICIR。
但放在一起,很可能高度相关。
这时候可以试试:
skill-factor-review

这个Skill会对已有因子库做复盘,检查因子之间的相关性、重复程度,以及哪些因子真正带来了新的信息。
为了准备这次复盘,可以先从:
skill-quant-factor-volume-stat-alpha
里挑一些因子组成候选库。

这个库目前收录 216 个 OHLCV 因子,覆盖成交量、量价关系、时序排名、收益分布和流动性五类。

怎么用?
从 volume-stat-alpha 或自己的因子库中选取一批因子;
准备对应的因子卡和实验日志;
将因子库交给 factor-review;
输出因子重复情况、最优加入路径和下一步建议。
实际使用时,可以直接让 AI:
用 factor-review 复盘我从volume-stat-alpha 组的因子库。
给出三层报告:
-
哪些因子同质重复
-
最优路径在何处
-
下一步应该补哪个因子族
它会从因子卡中扫描信息,计算相关性,并回溯因子加入后的效果,最后给出三层复盘结果。

在实测中,12 个候选因子最后接受 4 个、拒绝 8 个,其中 4 个因为和已有因子相关性太高,被相关性门控拒绝。
更有意思的是,组合 ICIR 从:
+0.023 → +0.153
而明显的提升出现在引入新的 base 之后,而不是继续往同一个因子族里增加变体。
所以做到这一步,真正该问的可能已经不是:
“我还能再找多少因子?”
而是:“我的因子库现在缺什么?”
这也是 factor-review 和 factor-evaluate 的区别:
factor-evaluate 看单因子质量;factor-review 看因子库里的增量信息。

做因子挖掘,怎么知道是哪一步有效?
做因子挖掘,最怕的不是没想法,而是一次改太多东西。
因子改了、标签改了、组合方式也改了,最后结果变了,却不知道到底是谁起了作用。
这时候可以试试:
skill-factor-mine

它可以把因子挖掘变成一套可重复、可归因、可回滚的实验流程。
核心规则就一个:
每轮只改一个问题。
怎么用?
先读取研究规则;
写 ITER_NOTE;
每轮只修改一个 op_type;
用 runner.once 验证;
根据结果 ACCEPTED / REJECTED / CRASH 归档或回滚。
简单来说,它把一次实验拆成 5 步:
读宪法 → 写 ITER_NOTE → 改代码 → 跑验证 → 归档/回滚

其中,ITER_NOTE 必须先写清楚 4 个字段:
op_type、hypothesis、change、expected
也就是:
这轮改什么、为什么改、具体改了什么、预计会发生什么。
然后用 runner.once 跑验证。
结果被接受,就归档;被拒绝或者运行失败,就回滚。
这套流程并不复杂,但它解决了一个很实际的问题:
过一段时间再回头看,你还能知道这一轮到底改了什么。
另外还有一道相关性门控:新因子与已有因子的 Spearman 截面相关性达到 0.85 及以上,会直接拒绝。
简单说,它管的不是:
“怎么多挖几个因子?”
而是:
“这次实验到底改了什么,结果为什么会变?”
对经常做因子迭代的人来说,这个可能比再多找几个因子更有用。

写在最后
做量化研究,真正需要自己花时间的,应该是:
研究什么、为什么研究、结果意味着什么。
至于找候选因子、重复计算、标准化评价、检查相关性这些重复工作,能交给 Skill,就没必要每次从头做一遍。
说到底,Skill 干的事情很简单:
把那些重复的研究工作,先接过去。
剩下的时间,留给真正需要判断的问题。

319

被折叠的 条评论
为什么被折叠?



