# ETF 量化轮动策略 V2.1 · DD-6.5% 防御版

> 部署日期: 2026-05-15 (V2.1, 砍掉 PV)
> 实盘版本: B 策略 + 5 相位 Ensemble + Filter B + DD-6.5%
> 修订原因: Phase 2 敏感性扫描 (165 候选 + Bootstrap CI B=1000) 证实 PV 在 DD 之上边际贡献不显著 (OOS P=69.6%, CI [-0.061, +0.150] 含 0); 同时审计发现生产 PV 实现与研究引擎不一致 (DD/PV 应互斥, 误写成两个独立 if). 综合 3 项独立证据 (敏感性 / Bootstrap / 独立 reviewer) 决定砍掉 PV.

## 资产宇宙 (3 个 ETF)

| 代码 | 名称 | 用途 |
|---|---|---|
| 513300.SH | 华夏纳指 100 ETF | 海外科技敞口 |
| 159985.SZ | 华夏豆粕 ETF | 商品 / 低相关分散 |
| 159915.SZ | 易方达创业板 ETF | A 股成长 |

辅助信号:
- **000001.SH 上证综指**: 仅用于 Filter B (假牛检测), 不参与持仓

## 核心参数

```
lookback = 20        # 信号回看窗 (交易日)
rebalance = 5        # 调仓周期 (交易日)
PHASES = 5           # 5 相位 Ensemble
fee = 0.005%         # 单边手续费 (万 0.5)
slippage = 0.05%     # 单边滑点 (5bp)
cash_rate = 2.0%/年  # 现金收益率
DD_threshold = -6.5% # 倒 V 防御阈值
TRADE_MIN_AMOUNT = ¥10,000  # 单笔最低交易金额, 低于跳过 (防 ¥5 最低费占比过高)
annual_days = 252
vol_floor = 1e-12
```

## 信号计算流程 (每个交易日 14:50 执行 1 个相位)

对每个资产 s ∈ {纳指, 豆粕, 创业板}, 用最近 lookback+1 个交易日的收盘价:

### Step 1 - 基础动量与波动率
```
R = close[t] / close[t-lookback] - 1       # 20 日总收益
daily_returns = close.pct_change().iloc[1:]
σ_annual = std(daily_returns, ddof=0) × sqrt(252)
score = R / σ_annual                       # 风险调整动量
```

### Step 2 - Filter B 假牛防御 (上证综指 vs 创业板)
```
shang_R = shang_close[t] / shang_close[t-20] - 1
cyb_R = R[创业板]
if shang_R >= cyb_R:
    score[创业板] = 0   # 屏蔽创业板
```

### Step 3 - DD-6.5% 倒 V 防御
```
if score[s] > 0:
    peak = running_max(close[t-20:t+1])
    drawdown = min(close / peak - 1)         # 20日内 peak-to-trough 最大回撤
    if drawdown <= -0.065:
        score[s] = 0   # 已经在跌, 不接刀
```

### Step 4 - 反波动率加权
```
positives = {s : score[s] > 0 AND σ[s] > vol_floor}
if positives 非空:
    inv_vol = {s: 1/σ[s] for s in positives}
    weight[s] = inv_vol[s] / sum(inv_vol) × 100   # 整数百分比
```

### Step 5 - 5 相位 Ensemble
```
5 个虚拟子账户, 每个 1/5 总资金
相位 p ∈ {0,1,2,3,4} 在 pos mod 5 == p 的交易日按 Step 1-4 重新调仓
其他相位维持上次调仓权重不变
总目标权重 = 5 个子账户权重的等权平均
```

## 调仓执行

- 每个交易日 14:50 BJT 执行 (5 相位中的 1 个)
- 实际操作: 计算总目标股数 vs 当前持仓, 差额 ≥ 100 股则下单
- 股数向下取整到整百
- 不下单当日 < 100 股的微调 (避免高频)

## 关键回测数据 (2014-01 ~ 2026-05, 用 Codex 合成豆粕扩展至 2014)

| 指标 | V0 基线 (无 DD) | V2.1 (DD-6.5%) | 改善 |
|---|---:|---:|---:|
| Full Sharpe | 1.503 | **1.605** | +0.10 |
| OOS Sharpe (2023-2026) | 1.590 | **1.832** | +0.24 |
| OOS Bootstrap 95% CI | — | [-0.032, +0.515] | P>0 = 96.5% |
| Full MaxDD | -19.1% | -18.2% | +0.9pp |
| OOS MaxDD | -16.4% | **-12.1%** | +4.3pp |
| 2026 YTD 累计 | +19.0% | **+22.4%** | +3.4pp |
| 2026 YTD MaxDD | -10.8% | **-7.5%** | +3.3pp |
| 平均换手率 | 0.100 | 0.095 | 持平 |

PBO (DD-only 子集): 0.109 (低过拟合区)
DD 触发频次: ~29 次/年 (OOS), 信号 n=97 样本充足

## DD 阈值平台 (-5.5% 到 -8.0% 都接近最优, -6.5% 是中位)

| dd_threshold | Full Sh | OOS Sh | OOS MDD |
|---|---:|---:|---:|
| -5.5% | 1.519 | 1.748 | -11.34% |
| -6.0% | 1.591 | 1.756 | -11.34% |
| **-6.5% (prod)** | **1.605** | **1.832** | -12.10% |
| -7.0% | 1.579 | 1.761 | -13.12% |
| -8.0% | 1.605 | 1.736 | -13.26% |

## 验证规模

- 总候选评估: ~200 (Batch 1-5 + 用户提案 V1/V2 + Phase 1/2 综合 Bootstrap)
- 敏感性扫描: 165 候选 (DD 15 + PV 80 + DD+PV 80) — 砍 PV 的依据
- 文献参考: 17 篇 (Daniel-Moskowitz 2016, Barroso-Santa-Clara 2015 等)
- 回测数据: 2949 交易日 × 5 相位 × 3 资产
- Bootstrap: 1000 次块 bootstrap × 多组比较
- Walk-forward OOS: 4 个独立时间窗 (3/4 胜出)
- 独立 reviewer 验证 (盲审, 结论一致)

## 为什么砍 PV (V2 → V2.1)

| 证据 | 结论 |
|---|---|
| Bootstrap CI | prod vs DD-only OOS Δ=+0.032 [-0.061, +0.150], P=69.6% **不显著** |
| 最优 PV vs DD-only | Δ=+0.067, CI 仍含 0, P=85.8% **不显著** |
| PV-only 最优是 du=4%/md=1 | 与"5 天确认期过滤死猫跳"论证矛盾 |
| PV OOS 触发只 34 次 | n 太小, 单年现象主导 |
| 生产代码 bug | DD/PV 互斥写成独立 if, 跑的是 "DD OR PV" 不是研究的 DD+PV |
| Occam 剃刀 | 参数从 3 个降到 1 个, 复杂度显著下降 |

## 已被数据否决的方案 (不要再推)

- ❌ A1 加速度切半 / A3 OLS 斜率 / M1 FIP / M5 正天比率 / M8 52w 高点 / B7 t-stat / B8 MACD / B9 横截面 Top-1
- ❌ Filter B buffer > 0 / PHASES ≠ 5 / rb ≠ 5
- ❌ V0 替换 benchmark (沪深300/上证50)
- ❌ PV-7.5%/5d (V2 旧版): Bootstrap 不显著, n 太小
- ❌ DD-4.0% (Phase 1 OOS Sh 1.997 看似最优): YTD26 反而落后 5.7pp, 过拟合

## 退出机制 (上线后监控)

如果 6 个月内 (到 2026-11-15):
- DD 触发 < 10 次且无显著 MDD 改善 → 退回 V0 (无 DD)
- DD 触发 ≥ 10 次且 OOS Sharpe 维持 ≥ 1.65 → 维持
- DD 触发 ≥ 10 次但 Sharpe < 1.55 → 退回 V0

## 实盘资金 (2026-05-15 起)
本金: ¥641,459 (卖出 513500 标普 + 原 513300 减仓后)
首次建仓: 按 5 相位 Ensemble 当日权重一次性买入
后续: 每个交易日 14:50 调 1 个相位 (约 1/5 子账户)
