日期:2026-08-03 | 策略文件:strategies/examples/alpha16_select_v1.py(全参数化)| 因子缓存:data/parquet/factors/alpha16/
Alpha16 = −CORR(RANK(VOLUME), RANK(CLOSE), 6):当日截面内对成交量、收盘价分别升序排名(归一化 0~1),取过去 6 日两个排名序列的相关系数并取负。因子值高 = 量价排名背离(量升价跌/量跌价升),预期价格修复反转。
因子层验证(前序工作,全部成立):
tools/build_alpha16_cache.py(缓存构建)、tools/alpha16_ic.py(IC)、tools/alpha16_topk.py(三窗口harness)、tools/alpha16_topk_full.py(全窗口harness三成本情景)策略形态:每月首个交易日按因子降序取前 K 只等权满仓,次月再调仓;P_K / P_MARGIN / P_MONTHLY / P_NO_FILTER / P_FULL_REBAL / P_MIN_LIST / P_MIN_PRICE 环境变量全参数化。
统一回测口径:2018-01-02→2026-06-05,本金 100 万,佣金万0.5(最低5元/笔)+ 滑点 0.025%/边 + 印花税(仅卖出,2023-08-28 前 0.001、之后 0.0005,rqalpha PIT 口径)。
| 变体 | 过滤 | 频率 | K | 全窗口 | 年化 | 最大回撤 | 夏普 | 交易笔数 | 总成本 |
|---|---|---|---|---|---|---|---|---|---|
| v1 | 有 | 周 | 30+滞后10 | -40.1% | -6.1% | -61.7% | — | 23,628 | 24.7万 |
| v2a | 无 | 周 | 30全换 | -10.8% | -1.4% | -51.7% | 0.06 | 24,117 | 27.0万 |
| v2c | 无 | 周 | 30+滞后50 | -12.1% | -1.6% | -52.5% | 0.05 | 23,567 | 26.6万 |
| v2b | 无 | 月 | 30 | +92.5% | +8.4% | -42.0% | 0.46 | 5,468 | 8.1万 |
| v3a | 有 | 月 | 30 | +78.7% | +7.4% | -41.7% | 0.42 | 5,433 | 7.9万 |
| v3d | 无 | 月 | 20 | +93.5% | +8.5% | -35.0% | 0.46 | 3,803 | 7.3万 |
| v3e | 有 | 月 | 20 | +61.6% | +6.1% | -35.9% | 0.37 | 3,742 | 6.9万 |
| v3c | 无 | 月 | 50 | +100.2% | +8.9% | -36.7% | 0.49 | 8,779 | 9.7万 |
| v3f | 有 | 月 | 50 | +75.9% | +7.2% | -37.8% | 0.42 | 8,699 | 9.3万 |
| 情景 | 全窗口 | 年化 | 回撤 |
|---|---|---|---|
| A 原口径(扁平0.0003/边,无印花税) | +203.9% | +14.2% | -39.7% |
| B +PIT印花税 | +113.6% | +9.5% | -42.0% |
| C +最低5元佣金 | +97.7% | +8.5% | -42.6% |
2018 -25.2% | 2019 +33.6% | 2020 +13.0% | 2021 +29.1% | 2022 -7.8% | 2023 +4.6% | 2024 +10.4% | 2025 +27.6% | 2026H1 +1.2%
网页报告:results/alpha16_v3c_报告.html;各变体 pkl/日志/指标在 results/alpha16_v*.{pkl,log,txt}。
第一幕——成本结构(harness A→C):印花税一项把复利砍掉近半(+203.9%→+113.6%),最低佣金再砍到 +97.7%。周频全换的年换手约 52 倍,股票印花税是策略级一阶变量(ETF 策略无此问题)。1M 本金 K=30 时单笔约 3.3 万,比例佣金 1.65 元被最低 5 元抬高到万1.5 有效费率。
第二幕——调仓频率(v2a vs v2b,核心发现):周频全换即使无过滤也 -10.8%,且死因不是成本 alone——v2a 毛 alpha 仅约 +16%(净-10.8%+成本27%),v2b 毛 alpha 约 +100%。机制:alpha 半衰期在多周级(IC(T+5)=0.046 > IC(T+1)=0.033),周频全换是在排名噪音上 churn,每 5 天付一次双边全程成本只收割 5 天 alpha;月频持有一段才进入 alpha 兑现期。排名滞后(margin)完全无效:v2c margin=50 交易笔数几乎不降(23,567 vs 24,117)——因子尾部排名周间完全是噪音,锁不住持仓;月频下 v2b 日志也显示每月"新入30"(全换)。能降换手的只有拉长调仓周期。
第三幕——过滤器(v2b vs v3a、v3d vs v3e、v3c vs v3f):月频下过滤代价 K=30 时 -14pp、K=20 时 -32pp、K=50 时 -24pp。alpha 有一小部分确实在 ST/低价/次新股里,但过滤器不是 v1 惨败的主凶——有过滤的月频 v3a 仍 +78.7%。v1 之死在"周频 churn",过滤只是从犯。
执行摩擦定性:v2b +92.5% ≈ harness C +97.7%(差距 5pp),月频尺度下 T+1/整手/拒单(v2b 130次、v3c 209次,多为涨跌停日拒单)合计只值个位数百分点——执行层不是主凶。harness 与 rqalpha 剩余差异主要是 harness 对停牌/退市股的"免费退出"假设。
.BJ 北交所代码崩溃:因子缓存含北交所代码(831726.BJ 等)但引擎无 instrument,P_NO_FILTER=1 时选股选中即 InstrumentNotFound。修复:无过滤模式也剔除 .BJ(可交易域约束,非 alpha 过滤),harness 同步剔除保持口径一致。tgt_pct - cur > 0.03 在 K=50(tgt 2%)时恒假,v3c 首跑 93 次调仓全部"无需调仓"、净值纹丝不动。修复:> min(0.03, tgt_pct*0.9),K≤33 行为不变(v2b/v3a/v3d/v3e 结果不受污染)。P_NO_FILTER 实际输出(日志规范:日志必须反映真实决策参数)。# 冠军 v3c (月频/无过滤/K=50) P_MONTHLY=1 P_NO_FILTER=1 P_K=50 python runner.py strategies/examples/alpha16_select_v1.py \ --start 2018-01-02 --end 2026-06-05 --cash 1000000 --freq 1d --commission-bps 0.5 --slippage 2.5 --web # 实盘交付形态 v3f (月频/有过滤/K=50) P_MONTHLY=1 P_K=50 python runner.py strategies/examples/alpha16_select_v1.py \ --start 2018-01-02 --end 2026-06-05 --cash 1000000 --freq 1d --commission-bps 0.5 --slippage 2.5 --web # harness 全窗口三成本情景对照 python tools/alpha16_topk_full.py