← 返回因子观察
因子观察 · 原理与口径说明只观察 · 不交易
最后更新 2026-11-02 · 数据:本地通达信全市场日线(2026-11-02 可买池 4,497 只) · 位置:tools/factor_watch.py → site/factor/
一、这个页面在干什么
每天收盘后,用两组因子各自在全市场筛出前 10 只,写进台账;之后每个交易日事后回填它们的 T+1 / T+5 / T+10 收益,并和「当天全市场等权」对比。
目的不是下单,是证伪:一个因子到底有没有用,只看它在真实时间轴上前滚、逐日记账能不能跑赢市场平均。所以两组并列:A 组是"看起来靠谱但没验证过",B 组是"本地回测过"。
二、A 组:文章因子的本地代理版(未验证)
来源是知乎那篇「流动性冲击修复」因子。问题在于:原文依赖的三个底层字段是 QuantZone 平台专有值,本地拿不到。
所以这里只能用 OHLCV 近似复刻它的结构 —— 不是平台原值,逻辑对得上,数值对不上。
| 分量 | 算法(本地近似) | 想抓什么 |
| t1 | 非流动性 = |当日收益| ÷ 成交额(亿元),截断 0~50;取它的 EMA5 减去「近 25 日去掉最近 5 日」的最低基数 | 冲击过后流动性修复的抬升 |
| t2 | 16 个 22 日滚动窗口里,corr(日收益, log 成交量) 的极差(最大 − 最小) | 量价关系结构切换的幅度 |
| t3 | 非流动性相对 12 日前的变化量 | 冲击是否正在二次放大(反向扣分) |
合成打分:score_A = rank(t1) + rank(t2) − rank(t3)(三个分量都先在当日可买池里做百分位排名),取前 10。
注意:t3 是减号 —— 非流动性继续放大说明冲击没结束,要扣分。
三、B 组:实测通过版(低价 + 20 日反转 + 缩量)
三个方向等权 rank,取前 10:
① 低价:收盘价越低 rank 越高;
② 20 日反转:过去 20 日跌幅越大 rank 越高;
③ 缩量:近 20 日均量 ÷ 近 60 日均量 越小 rank 越高。
score_B = (rank(1−价) + rank(1−20日收益) + rank(1−缩量比)) / 3
本地全市场回测(2010-04 ~ 2026-10,5,252 只):IC t 值 2.7–6.4,多头超额 +2.7% ~ +6.5%。
四、可买池(两组共用同一套过滤)
| 过滤 | 阈值 | 为什么 |
| ST / 退市 | 名字含「ST」或「退」一律剔除 | 涨跌停 5%、退市风险,与中枢回归同口径 |
| 价格 | ≥ 2.00 元 | 低价股滑点大、易被操纵 |
| 成交额 | ≥ 3,000 万 | 买得进、卖得出 |
| 上市时长 | ≥ 120 根 K 线 | 因子需要历史窗口 |
| 当日涨幅 | < 9.5%(即当天涨停的剔除) | 次日大概率高开,按收盘价买不到 → "能买入"不成立 |
2026-11-02:全市场 4,497 只通过过滤进入可买池。
五、跟踪口径(这些数字怎么算的)
· 收益口径:T+1 等权、收盘↔收盘、不含成本(先用不含成本的干净口径看因子有没有信息,成本单独再算)。
· 每只股票的 T+5 / T+10 也一并回填,台账里能直接看到衰减速度。
· 灰色曲线 = 同期全市场等权(同一天涨跌家数的平均),它是"闭着眼睛买全市场"的对照。
· 累计曲线上的数字是逐日等权复利,不是某一只票的涨幅。
六、已知限制(必须知道)
1. A 组未经验证,而且是代理版:拿不到平台原字段,只能用 OHLCV 复刻结构,不能用它的历史结论背书。
2. 样本还几乎没有:本页 2026-10-31 上线,当前可回填的交易日只有 1 天(A 组 1 笔、B 组 1 笔)。一天的成绩毫无统计意义。
3. 不含成本:A 股双边约 0.12%~0.20%,短线因子扣完成本能剩多少,要单独看。
4. 幸存者偏差:本地日线没有退市股,长期统计会略微高估。
5. 单日截面:每天只取 10 只,个股噪声大;判断因子要攒到 20 个交易日以上再看。
七、证伪条件(出现就撤或改)
· A 组:跟踪满 20 个交易日后,次日胜率仍不显著高于 50%,或累计跑输全市场等权 → 判定代理失败,撤掉。
· B 组:重跑后 IC t 值跌破 1.5,或多头超额转负 → 因子失效。
· 任一组:连续 3 个月跑输同期全市场等权 → 停止记账,重新审核。
· 注意:本页不产实盘信号,即使 B 组持续跑赢,也只是"候选池",要进实盘还需另过一轮样本外验证。
自动生成 · 因子观察 | 说明页更新 2026-11-02 |
返回因子观察