致命红旗诊断报告(任务1-3)
执行时间: 2026-09-18
状态: ✅ 完成
任务1:验证真实A1的38.8%
发现
- 真实A1 T+1命中率: 38.8%(124/320)
- 代理A1 T+1命中率: 49.7%(715/1440)
- 市场平均上涨率: 52.9%(同期)
分析
| 指标 | 真实A1 | 代理A1 | 市场 |
|---|---|---|---|
| T+1命中率 | 38.8% | 49.7% | 52.9% |
| p值(vs 50%) | 0.0001 ❌ | 0.8125 | - |
结论:
- 真实A1显著低于随机(p=0.0001)
- 真实A1也低于市场(38.8% vs 52.9%)
- 可能是A1因子方向问题,或样本太少(16天)
逐日跑赢市场分析
| 日期 | 策略T+1% | 市场% | 结果 |
|---|---|---|---|
| 0819 | 80% | 73.7% | ✅跑赢 |
| 0820 | 90% | 46.7% | ✅跑赢 |
| 0821 | 0% | 31.8% | ❌跑输 |
| 0826 | 90% | 61.7% | ✅跑赢 |
| 0831 | 20% | 67.6% | ❌跑输 |
| ... | ... | ... | ... |
16天中只有9天跑赢市场,7天跑输 → 说明因子确实有问题
任务2:验证基准(市场实际上涨率)
关键发现
- 市场平均上涨率: 52.9%(非假设的50%)
- 市场平均收益: +0.44%/天
- 上涨率范围: 21.5% ~ 77.4%(波动很大)
市场表现
| 日期 | 上涨率 | 评价 |
|---|---|---|
| 0819 | 73.7% | ✅强势 |
| 0820 | 46.7% | ✅正常 |
| 0821 | 31.8% | ❌低迷 |
| 0824 | 77.4% | ✅强势 |
| 0901 | 21.5% | ❌低迷 |
| 0902 | 30.4% | ❌低迷 |
结论:
- 用50%作为随机基准是错误的
- 应使用市场实际上涨率作为基准
- 策略应追求"跑赢市场"而非"绝对上涨"
任务3:命中率定义不一致
发现的问题
| 脚本 | 命中率定义 | 结果 |
|---|---|---|
run_scheme_b_batch_real.py |
ret > 0 |
38.8% |
run_scheme_b_batch_fast.py |
ret > 0 |
49.7% |
backtest_msv2_real.py |
ret > COST_RATE (0.432%) |
- |
分析
- 两个批量脚本使用相同定义(ret>0),但结果差异巨大
- 这说明不是定义问题,而是因子质量差异
- 真实A1用的是真实moneyflow数据,代理A1用的是pct_chg代理
正确基准
命中率 = 跑赢市场天数 / 总天数
而不是: ret > 0 或 ret > COST_RATE
修正建议(任务4)
新命中率定义
# 正确做法:跑赢市场
bench_ret = get_market_return(date) # 当日市场平均收益
hit = strategy_ret > bench_ret
修正步骤
- 修改
run_scheme_b_batch_real.py和run_scheme_b_batch_fast.py - 添加市场收益计算函数
- 重新运行16天真实A1回测
- 对比修正前后的结果
输出文件
| 文件 | 路径 |
|---|---|
| 诊断脚本 | tools/diagnose_red_flags.py |
| 诊断结果 | reports/backtest/diagnostic_red_flags.json |
| 本报告 | reports/backtest/致命红旗诊断报告.md |
等待确认: 是否继续执行任务4(修正后重算)?