# ETF 动量 × 52w 形成期跳过近月（skip-1m formation）

**日期**: 2026-10-26 约 09:17（Asia/Shanghai）  
**结论**: **上影子**  
**产物**: `result.json` · `run_study.py` · 本报告  

---

## 结论先行

在站点同一底座（主题 CAP=1 + QDII 溢价 8% + 2pp 钝化 + 月初换仓 + 换手×0.1%）上，事前冻结的 **形成期跳过近月**（`px=df.shift(21)` 后再算 52w nearness 排名；其余流程同 `_base_picks` + `_dampen_swap`）：

| 区间 | 基线 Sharpe / CAGR / MDD | skip-1m (SKIP=21) | Δ Sharpe |
|------|--------------------------|-------------------|----------|
| IS（≤2021-12） | 1.24 / 18.3% / −18.1% | 0.90 / 12.9% / −24.5% | **−0.34** |
| **OOS（≥2022-01）** | **0.23 / 2.4% / −29.9%** | **0.64 / 8.0% / −13.4%** | **+0.41** |
| 全期 | 0.87 / 12.5% / −31.6% | 0.81 / 11.2% / −24.5% | −0.06 |

- OOS 日超额约 **+496bp 年化**，IR **0.34**，t **0.73**（N=1162）——点估计大，但统计显著性仍弱。
- **持仓实质不同**：166 月中 **122** 月终仓与基线不同（**73.5%**）；OOS 约 50/58 月不同。月均换手 0.255→**0.287**。
- **成本网格** 5/10/20/30bp：OOS ΔSharpe 均为 **+0.38 ~ +0.41**，不翻转。
- **邻域**（只报告不回挑）：`SKIP=10` OOS Δ**+0.83**（事后更好）；主候选 `21` **+0.41**；`SKIP=42` **−0.26**（反向）。**不回挑 SKIP=10**。

**判决**: 冻结主候选 OOS 明显改善、成本稳健、持仓高度不同 → **上影子**（只记账不下单）。需正视：IS 明显变差、全期略逊、`SKIP=42` 反向、超额 t 仅 0.73；影子期继续盯 OOS，不改站点、不改 `engine_gates.py`。

---

## 逻辑

经典 Jegadeesh/Titman 动量在排名时跳过最近约 1 个月，避免短期反转污染形成期。现行站点用信号日 `P[t]/rolling_max(250)`；本支改为在 **滞后 SKIP 个交易日** 的价格上算同一 nearness，再用该分数做主题/QDII/钝化/月初换仓。与已有旁支正交：

- `rev5_10`：选完后拦短期暴涨**新买**（继续影子）
- dual abs-mom：选完后按 252d 收益符号改现金（已停挖）
- corr cap / gold prem / inflow avoid / 行业52w：已停挖
- 本支：改**排名信号本身**的形成窗口终点

## 冻结规则（回测前写死）

1. 底座 = `engine_gates` 同站点：TOPK=3, CAP=1, MARGIN=0.02, PGATE=0.08, COST=0.001, W=250, MINP=200, START=20130101，月初换仓。
2. **主候选 SKIP=21**（约 1 个月交易日）。`px = df.shift(SKIP)` 后 `sig = px / px.rolling(250, min_periods=200).max()`，在信号日 `dates[i-1]` 上排名；其余流程照 `_base_picks` + `_dampen_swap`。
3. 基准 = 同引擎 `mode='baseline'`（标准 nearness，非沪深300）。
4. IS ≤ 2021-12-31，OOS ≥ 2022-01-01。
5. 邻域只报告不回挑：`SKIP ∈ {10, 21, 42}`。
6. 成本网格 5/10/20/30bp 只报主候选 OOS Sharpe vs 基线。
7. 换手：相对上月持仓名集合，`turnover=1-|交集|/3`，首日扣 `turnover×cost`。

实现：`run_study.py` import `engine_gates`，自写 `run_skip`；**未改** `engine_gates.py`。

## 相对基准

同一引擎无 skip 基线（非沪深300）。

## 持仓差异与活动

| 指标 | 数值 |
|------|------|
| 月份数 | 166 |
| 终仓≠基线的月 | 122（**73.5%**） |
| OOS 差异月 | **50** |
| IS 差异月 | 72 |
| 月均换手 | 基线 0.255 → skip 0.287 |

典型差异：跳过近月后，短期冲高主题（如电子/消费）排名回落，黄金·外 / 宽基等替补进入；路径依赖钝化后差异在多数月份持续。

## 成本网格（主候选 OOS Sharpe）

| 成本 | 基线 | skip-1m | Δ |
|------|------|---------|---|
| 5bp | 0.25 | 0.66 | +0.41 |
| 10bp（站点） | 0.23 | 0.64 | +0.41 |
| 20bp | 0.21 | 0.61 | +0.40 |
| 30bp | 0.19 | 0.57 | +0.38 |

## 邻域（不回挑）

| 变体 | OOS Sharpe | Δ vs 基线 | 持仓差异月率 | OOS 超额年化 | 备注 |
|------|------------|-----------|--------------|--------------|------|
| SKIP10 | 1.06 | **+0.83** | 75.3% | +929bp | 事后更好，**不回挑** |
| **SKIP21（主）** | **0.64** | **+0.41** | **73.5%** | **+496bp** | 主候选 |
| SKIP42 | −0.03 | **−0.26** | 83.1% | −407bp | 窗口过长变差 |

三档均在 IS 变差；仅短/标准 skip 在 OOS 改善。窗口敏感 → 影子期用冻结的 SKIP=21，不切到 10。

## 分年 Sharpe（基线 → skip21）

2013: 0.94→0.33；2014: 2.28→2.24；2015: 1.60→1.09；2016: 1.89→1.67；2017: 1.63→1.09；2018: 0.07→−0.27；2019: 1.30→**2.17**；2020: 2.11→1.38；2021: 0.39→0.46；**2022: −0.67→−0.24**；**2023: 0.04→1.03**；**2024: 0.86→1.15**；**2025: 2.89→0.64**（OOS 主要拖累）；**2026: −1.10→0.89**。

OOS 改善主要来自 2022–2024 与 2026 减亏/增盈；2025 基线大胜被 skip 错过，需在影子期继续观察。

## 路径

- 研究目录: `/root/cb-allotment/research/etf_skip1m_form_20261026_09/`
- 引擎（只读）: `/root/cb-allotment/scripts/etf_gate_shadow/engine_gates.py`

## 判决

**上影子**。建议挂只记账不下单的影子账本（SKIP=21 冻结），不改站点、不改 `engine_gates.py`、不回挑 SKIP=10。风险记录：IS 拖累、全期略逊、SKIP=42 反向、超额 t≈0.73、2025 年反向——若影子期 OOS 优势消退则降为观察或停挖。
