任务2-4 诊断报告
执行时间: 2026-09-18
状态: ✅ 完成
标注: 基于简化版回测,结论有局限
任务2:回撤来源分析
2.1 整体回撤
| 指标 | 值 |
|---|---|
| 最大回撤 | -46.47% |
| 回撤区间 | 20260622 ~ 20260720 |
| 峰值日期 | 20260622(累计117.9) |
| 谷底日期 | 20260720(累计63.1) |
| 回撤持续 | 21个交易日 |
2.2 分月表现
| 月份 | 天数 | T+1命中率 | T+5命中率 | 平均收益 | 净收益 | 结论 |
|---|---|---|---|---|---|---|
| 202606 | 21 | 49.0% | 50.0% | +1.32% | +0.46% | 持平 |
| 202607 | 23 | 46.3% | 48.5% | -0.48% | -1.34% | ❌ 最差 |
| 202608 | 21 | 55.7% | 58.3% | +1.85% | +0.99% | 最好 |
| 202609 | 7 | 44.3% | 17.9% | +1.21% | +0.35% | 数据不全 |
2.3 最大回撤时段分析(6/22-7/20)
行情特征:
- 6月22日累计峰值117.9(+17.9%)
- 7月20日累计谷底63.1(-36.9%)
- 21个交易日中15天亏损,连续亏损最长6天
最差5天:
| 日期 | 收益 | T+1命中率 | 池子规模 |
|------|------|-----------|----------|
| 07/15 | -6.22% | 25% | 1338 |
| 07/16 | -5.24% | 5% | 1335 |
| 07/06 | -4.90% | 20% | 1332 |
| 07/10 | -4.69% | 30% | 1332 |
| 07/14 | -4.57% | 45% | 1338 |
回撤根因分析:
1. 选股失效: 7月T+1命中率46.3%,低于随机50%
2. 池子膨胀: 6/22起池子从768只跳至1183只,7/20跳至3264只(扩容3倍)
3. 因子钝化: 大盘股涌入后,A1/B5/B6因子区分度下降
4. 缺少止损: 简化版无veto/止损机制,连续亏损无干预
5. 行情因素: 7月为传统弱势月,但策略未做择时
标注: 基于简化版(代理A1+无layer3),回撤分析有局限。
任务3:手工池同期对比
3.1 对比条件
| 项目 | 手工池 | 自动池Top20 |
|---|---|---|
| 股票数 | 12只固定 | 20只/日动态 |
| 选股方式 | 人工挑选 | 因子排序 |
| 样本天数 | 16天(8/19-9/9) | 72天(6/1-9/9) |
| 回测版本 | 真实价格 | 代理A1 |
3.2 对比结果
| 指标 | 手工池(12只) | 自动池Top20 | 差值 |
|---|---|---|---|
| T+1命中率 | 44.3% | 49.7% | -5.4pp |
| T+5命中率 | 35.9% | 48.8% | -12.9pp |
| 平均收益T+1 | +0.17% | +0.90% | -0.73pp |
| 净收益T+1 | -0.69% | +0.04% | -0.73pp |
| 夏普比率 | -7.12 | 0.14 | -7.26 |
| 最大回撤 | -11.35% | -46.47% | +35.12pp |
| 累计收益 | -10.64% | -1.79% | -8.85pp |
3.3 分月对比
| 月份 | 手工T+1% | 自动T+1% | 手工净收益 | 自动净收益 |
|---|---|---|---|---|
| 202608 | 53.7% | 55.7% | -0.67% | +0.99% |
| 202609 | 32.1% | 44.3% | -0.71% | +0.35% |
3.4 结论
- ❌ 手工池表现更差: T+1命中率44.3% < 自动池49.7%,净收益-0.69% vs +0.04%
- ❌ 夏普为负: 手工池夏普-7.12,说明风险调整后收益极差
- ⚠️ 样本局限: 手工池只有16天、12只,样本量不足
- ⚠️ 对比不公平: 手工池无选股逻辑(固定12只),自动池有动态选股
标注: 手工池12只为stock_pool.csv中10只+持仓2只,非用户所说的28只。找不到28只列表。
任务4:补齐缺失模块工作量评估
4.1 因子实现现状
| 因子 | 当前状态 | 真实实现位置 | 补齐难度 | 工时 |
|---|---|---|---|---|
| sector_z | ✅ 真实 | backtest_msv2_real.py:397 | 已完成 | 0h |
| concept_z | ⚠️ 有误 | 用ts_code后6位匹配 | 低 | 2h |
| chip | ❌ 代理 | chip_concentration_pro.py(913行) | 高 | 8h |
| holder | ❌ 代理 | 需tushare股东数据 | 中 | 4h |
| tb | ❌ 代理 | tdx_core.py(120行) | 高 | 6h |
| sentiment | ❌ 代理 | 需情绪指标数据源 | 中 | 4h |
| margin | ❌ 硬编码50 | margin_layer.py(324行) | 中 | 4h |
4.2 层级模块现状
| 模块 | 文件 | 大小 | 可调用 | 补齐难度 | 工时 |
|---|---|---|---|---|---|
| layer1_filter | backtest_msv2_real.py | ✅ 已调用 | ✅ | 已完成 | 0h |
| layer2_filter | backtest_msv2_real.py | ✅ 已调用 | ⚠️ 代理 | 中 | 12h |
| layer3_filter | 不存在 | ❌ | ❌ | 高 | 16h |
| war_council | war_council.py | 61K | ✅ 可调用 | 中 | 8h |
| veto_engine | veto_engine.py | 4.6K | ✅ 可调用 | 低 | 4h |
| entry_score | entry_score.py | 4.2K | ✅ 可调用 | 低 | 4h |
4.3 工作量汇总
| 优先级 | 模块 | 工时 | 说明 |
|---|---|---|---|
| P0 | veto_engine集成 | 4h | 已有4.6K实现,直接调用 |
| P0 | entry_score集成 | 4h | 已有4.2K实现,直接调用 |
| P1 | margin真实化 | 4h | margin_layer.py已有 |
| P1 | concept_z修正 | 2h | 逻辑有误需修 |
| P1 | holder真实化 | 4h | 需tushare股东数据 |
| P2 | chip真实化 | 8h | chip_concentration_pro.py需集成 |
| P2 | tb真实化 | 6h | tdx_core.py需集成 |
| P2 | sentiment真实化 | 4h | 需情绪指标数据源 |
| P3 | layer3实现 | 16h | 需从零写共振确认 |
| P3 | war_council集成 | 8h | 61K实现需适配 |
| 合计 | 60h | 约7.5个工作日 |
4.4 关键发现
layer2_filter的7个深度因子中,6个是代理或硬编码:
# backtest_msv2_real.py 第390-409行
sector_z = zscore_data.get(sector, 50) # ✅ 真实
concept_z = zscore_data.get(ts_code[-6:], 50) # ⚠️ 逻辑有误
chip = 100 - factors.get('B6_volatility', 50) # ❌ B6代理
holder = min(100, a2 * 2) # ❌ A2代理
tb = 50 + b1 * 25 # ❌ B1代理
sentiment = b4 # ❌ B4代理
margin = 50 # ❌ 硬编码
这是策略无效的核心原因: layer2_filter号称7因子加权,实际只有1个真实因子。
输出文件
| 文件 | 路径 |
|---|---|
| 回撤分析数据 | reports/backtest/drawdown_analysis.json |
| 手工池对比数据 | reports/backtest/manual_pool_comparison.json |
| 本报告 | reports/backtest/任务2-4诊断报告.md |
报告生成时间: 2026-09-18 23:50 CST