# A 股行业 ETF 轮动策略
## 从零开始的量化投资实践指南（第七篇）

> **配套代码**：`quant_etf_rotation_demo.py`
> **目标读者**：量化投资初学者，有 Python 基础，计划在 A 股实战
> **核心主题**：用动量信号驱动行业 ETF（Exchange-Traded Fund，交易所交易基金）轮动，构建兼顾收益与风控的量化策略

---

## 目录

1. [为什么选 ETF 轮动？](#1-为什么选-etf-轮动)
2. [A 股 ETF 的独特优势](#2-a-股-etf-的独特优势)
3. [核心武器：动量因子](#3-核心武器动量因子)
4. [策略一：相对动量轮动](#4-策略一相对动量轮动)
5. [策略二：双动量策略](#5-策略二双动量策略)
6. [A 股交易成本模型](#6-a-股交易成本模型)
7. [回测结果深度解读](#7-回测结果深度解读)
8. [动量策略的局限性与风险](#8-动量策略的局限性与风险)
9. [进阶优化方向](#9-进阶优化方向)
10. [实战路径：接入真实数据](#10-实战路径接入真实数据)
11. [双语术语表](#11-双语术语表)

---

## 1. 为什么选 ETF 轮动？

### 1.1 初学者面临的困境

刚进入量化投资领域，你可能遇到这样的困惑：

- 选哪只股票？A 股有 5000+ 只，信息量巨大
- 如何避免个股"雷"？财务造假、黑天鹅事件防不胜防
- 机构有研究员团队，个人投资者如何竞争？

**行业 ETF 轮动**（Sector ETF Rotation）正是为了解决这些问题而生的策略。

### 1.2 轮动策略的核心逻辑

```
不去赌哪只股票涨
而是判断哪个"赛道"当前最强
持有最强赛道的 ETF，定期切换
```

这背后有坚实的经济学逻辑：**行业景气周期**（Industry Business Cycle）。

经济不同阶段，不同行业表现各异：

```
经济复苏期 → 消费、金融领跑
经济过热期 → 能源、原材料领跑  
经济衰退期 → 防御性行业（医疗、国债）抗跌
经济萧条期 → 国债、黄金是避风港
```

### 1.3 ETF 轮动 vs 个股选股 对比

| 维度 | ETF 轮动 | 个股选股 |
|------|---------|---------|
| **难度** | ⭐⭐ 较低 | ⭐⭐⭐⭐⭐ 极高 |
| **所需信息** | 行业趋势（公开）| 个股基本面（深度研究）|
| **黑天鹅风险** | 低（ETF 内部分散）| 高（单只股票可能暴雷）|
| **信息竞争** | 与机构差距较小 | 机构有绝对信息优势 |
| **成本** | 低（管理费 0.15-0.5%/年）| 低 |
| **回测可靠性** | 较高（无幸存者偏差）| 低（需处理退市股票）|

> 💡 **初学者建议**：先用 ETF 轮动打好基础，建立量化思维框架，再逐步进阶到个股 Alpha 挖掘。

---

## 2. A 股 ETF 的独特优势

### 2.1 最关键的规则：ETF 可以 T+0 交易

A 股个股有 **T+1**（Trade plus 1 day）限制：今天买入的股票，明天才能卖出。

但 ETF 是个例外：

```
ETF（场内）= T+0
  → 今天买入，今天就可以卖出
  → 策略执行更灵活
  → 急跌时可以当天止损

个股 = T+1
  → 买入后被"锁仓"一天
  → 暴跌时无法当天止损
```

> ⚠️ 注意：ETF 的 T+0 指的是**场内交易**（通过股票账户买卖）。场外申购赎回仍然是 T+1 或 T+2。

### 2.2 A 股热门行业 ETF 池

以下是常见的 A 股行业/主题 ETF（供参考，实际投资请核实最新信息）：

| 代码 | 名称 | 跟踪指数 | 特点 |
|------|------|---------|------|
| 159995 | 芯片 ETF | 中华半导体芯片指数 | 高波动，含存储/AI芯片 |
| 159819 | 人工智能 ETF | 人工智能主题指数 | 2019年后成立，历史短 |
| 516160 | 新能源 ETF | 中证新能源指数 | 涵盖光伏/风电/储能 |
| 159928 | 消费 ETF | 中证主要消费指数 | 防御性，波动较低 |
| 512170 | 医疗 ETF | 中证医疗指数 | 防御性，受政策影响大 |
| 512880 | 证券 ETF | 中证全指证券公司指数 | 与市场 Beta 高度相关 |
| **511010** | **国债 ETF** | **上证5年期国债指数** | **避险资产，熊市避风港** |

> 💡 **关键设计**：在 ETF 池中纳入**国债 ETF**（Bond ETF）作为"避险舱位"（Safe Haven）。当所有行业 ETF 动量均为负时，资金自动切换到国债 ETF，而不是空仓等待。

### 2.3 A 股 ETF 的局限性

- **历史短**：多数主题 ETF 在 2018-2020 年后才成立，回测样本不足 5 年
- **规模效应**：小规模 ETF（<5亿）存在清盘风险，流动性差
- **跟踪误差**（Tracking Error）：ETF 实际表现与指数有偏差
- **同质化严重**：芯片/半导体相关 ETF 众多，高度重叠

---

## 3. 核心武器：动量因子

### 3.1 什么是动量？

**动量**（Momentum）是量化投资中最经典的异象（Anomaly）之一：

> **过去表现强的资产，在未来短期内倾向于继续表现强。**
> 
> *(Assets that have performed well in the past tend to continue performing well in the near future.)*

这个现象最早由 Jegadeesh & Titman（1993）在美股系统性记录，此后在全球多个市场都得到了验证。

### 3.2 动量为什么有效？行为金融学解释

动量之所以持续存在，背后有两个行为偏差支撑：

**① 反应不足（Under-reaction）**

```
好消息发布 → 投资者缓慢消化 → 价格缓慢上涨（而非一步到位）
→ 动量策略可以"搭便车"
```

**② 追涨杀跌（Herding / Trend-chasing）**

```
价格上涨 → 媒体报道 → 更多投资者买入 → 继续上涨
→ 趋势自我强化，直到过度（Overshooting）
```

### 3.3 动量的三个维度

| 维度 | 定义 | 回望期 |
|------|------|-------|
| **短期动量** | 近期强势，可能含"反转"噪音 | 1-3 个月 |
| **中期动量** | 经典动量信号，最稳定 | 6-12 个月 |
| **跳过期** | 跳过最近 1 个月（避免短期反转）| 1 个月 |

**经典公式（12-1 动量）**：

```
动量得分 = 前 12 个月收益率（跳过最近 1 个月）

Momentum = Price[t-1] / Price[t-13] - 1
```

### 3.4 复合动量得分（Composite Momentum Score）

单一窗口的动量信号容易过拟合（Overfitting）。Demo 中使用三个窗口的等权平均：

```python
# 三个窗口的动量因子
mom_12_1  = 过去12个月动量（跳过1个月）   # 中长期趋势
mom_6_1   = 过去6个月动量（跳过1个月）    # 中期趋势
mom_3_1   = 过去3个月动量（跳过1个月）    # 短期趋势

# 复合得分 = 三者等权平均
mom_composite = (mom_12_1 + mom_6_1 + mom_3_1) / 3
```

**为什么要多窗口平均？**
- 减少单一参数的过拟合风险
- 兼顾不同时间尺度的趋势
- 提高信号的稳定性

---

## 4. 策略一：相对动量轮动

### 4.1 策略逻辑

**相对动量**（Relative Momentum）回答的是：

> "在当前所有行业 ETF 中，谁是最强的？"

```
每月月末执行：
1. 计算所有行业 ETF 的复合动量得分
2. 排序，选出得分最高的前 K 只（Demo 中 K=3）
3. 等权持有，下月月末再次评估
```

### 4.2 伪代码（Pseudo Code）

```python
每月月末:
    scores = {}
    for etf in sector_etfs:
        scores[etf] = calc_momentum(etf, lookback=12, skip=1)
    
    # 选出最强的前 3 只
    top_3 = sorted(scores, by=score, descending=True)[:3]
    
    # 等权持有
    target_weights = {etf: 1/3 for etf in top_3}
    
    # 执行换仓（扣除成本）
    rebalance(current_weights, target_weights)
```

### 4.3 相对动量的优缺点

**优点**：
- ✅ 逻辑简单，规则清晰，不受主观判断影响
- ✅ 自动轮换到最强赛道，捕获行业趋势
- ✅ 历史上在多数市场有效

**缺点**：
- ❌ **熊市无保护**：即使所有行业都在跌，也会持有"跌得少"的行业 ETF
- ❌ 换手率较高（月度换仓约 17%），成本不可忽视
- ❌ 趋势逆转时可能遭受较大回撤（Drawdown）

---

## 5. 策略二：双动量策略

### 5.1 Gary Antonacci 的原创思想

**双动量**（Dual Momentum）由量化基金经理 Gary Antonacci 在其 2014 年著作《双动量投资》（*Dual Momentum Investing*）中系统提出。

核心思想：**把绝对动量和相对动量结合，既追强者，也知进退。**

### 5.2 双动量的两道过滤

```
第一道：绝对动量过滤（Absolute Momentum Filter）
  → 问题："这只 ETF 比无风险收益（国债）表现得更好吗？"
  → 如果动量 < 0（即跑输无风险），说明处于下行趋势，切换至国债 ETF 避险

第二道：相对动量排序（Relative Momentum Ranking）
  → 问题："在通过第一道过滤的 ETF 中，谁最强？"
  → 选相对最强的前 K 只
```

### 5.3 完整决策流程

```
月末执行双动量策略：

for each ETF in 行业ETF池:
    if 该ETF动量得分 > 0:            ← 绝对动量为正（跑赢无风险）
        候选池.add(ETF)
    else:
        跳过（趋势向下）

if len(候选池) == 0:
    持有国债ETF（全部资金避险）      ← 全市场下行，切换至避险
else:
    选候选池中动量得分最高的前K只    ← 相对动量选最强
    等权持有
```

### 5.4 为什么要有"绝对动量"这一关？

一个直觉性的例子：

```
假设某月，6 只行业 ETF 的动量得分分别是：
  芯片    -15%   ← 在跌
  AI      -12%   ← 在跌
  新能源  -18%   ← 在跌
  消费    -5%    ← 跌最少（相对最强！）
  医疗    -8%    ← 在跌
  证券    -20%   ← 在跌

相对动量策略：会买消费 ETF（相对最强），结果仍然亏损
双动量策略：全部动量为负 → 切换至国债 ETF，保住本金
```

**绝对动量是双动量策略最核心的风控机制。**

### 5.5 回测中的实际表现

在 Demo（2019-2024 牛市主导）的结果中：

```
双动量切换至国债 ETF 的月数：1 次（约占 2%）

解读：
2019-2024 年 A 股整体处于震荡偏牛格局，
绝对动量为负的情形极少出现，
因此双动量的避险机制几乎没有触发机会。

但在 2018 年（A股全面熊市）或 2022 年（新能源大跌），
双动量的避险效果会非常显著。
```

> 💡 **关键认识**：双动量在**牛市中跑输相对动量和等权**（因为避险机制是"成本"），但在**熊市和震荡市中保护效果极佳**。评估策略要看完整市场周期，而非单一牛市区间。

---

## 6. A 股交易成本模型

### 6.1 为什么成本比你想象的重要？

很多初学者的回测**忽略了交易成本**，导致实盘效果大幅低于回测。

对于月度再平衡的 ETF 轮动策略，成本明细如下：

| 成本类型 | 方向 | 费率 | 说明 |
|---------|------|------|------|
| **佣金**（Commission）| 买卖双向 | 0.03% | 网络券商优惠后，通常 0.02-0.03% |
| **印花税**（Stamp Duty）| 仅卖出 | 0.10% | 国家税收，A股特有，ETF 同样收取 |
| **滑点**（Slippage）| 买卖双向 | 0.05% | 因订单冲击导致的不利价差 |

**单次月度再平衡的双边成本**：

```
买入成本 = 佣金 0.03% + 滑点 0.05% = 0.08%
卖出成本 = 佣金 0.03% + 印花税 0.10% + 滑点 0.05% = 0.18%
双边合计 = 0.26%

年度 12 次再平衡（假设每次换手 20%）：
年化成本拖拽 ≈ 12 × 0.26% × 20% ≈ 0.62%

若换手率更高（如每次 50%）：
年化成本拖拽 ≈ 12 × 0.26% × 50% ≈ 1.56%
```

> ⚠️ **实战建议**：
> - 选择低佣金券商（如华泰、富途等，佣金可低至 0.015%）
> - 控制换手率（考虑季度再平衡替代月度）
> - ETF 点差通常比个股小，但也要在流动性好时交易

### 6.2 成本对策略的影响

Demo 回测显示，相对动量策略的总交易成本约占净值的 **4.25%**（跨越 6 年，平均每年约 0.7%）。

这个数字看似不大，但复利效应显著：

```
假设策略毛收益 18%，扣除成本后：
  年化成本 0.7% × 6年 → 累计净值差异约 5-6%
  即：回测累计 178% → 实际约 170%（差异约 8 个百分点）
```

---

## 7. 回测结果深度解读

### 7.1 三策略绩效汇总

| 指标 | 等权基准 | 相对动量 | 双动量 |
|------|---------|---------|-------|
| 年化收益率 (CAGR) | **18.1%** | 18.6% | 15.9% |
| 年化波动率 (Volatility) | **17.5%** | 20.3% | 20.4% |
| 夏普比率 (Sharpe) | **0.926** | 0.847 | 0.729 |
| 最大回撤 (Max Drawdown) | **-27.3%** | -32.2% | -39.1% |
| 卡玛比率 (Calmar) | **0.663** | 0.578 | 0.407 |
| 月度胜率 (Win Rate) | 52.2% | 47.8% | 44.9% |

### 7.2 等权基准为何最优？——牛市的陷阱

**这个结果出乎很多人的意料，但背后有清晰的逻辑：**

2019-2024 年，A 股整体处于"结构性牛市"（Structural Bull Market）：

```
芯片/AI/新能源轮番领涨 → 行业轮动 ETF 池整体表现强劲

等权基准 = 始终全仓持有，没有错过任何一波行情

相对动量 = 追涨热门板块，但错过了"从低位起涨"的初期涨幅
          （因为动量是滞后信号，Lagging Indicator）

双动量 = 额外的避险机制在牛市里是"白交保险费"
```

**这说明了一个重要的回测教训：**

> 在单一市场环境（纯牛市）中评估策略，结论极不可靠。
> 真正有价值的策略需要跨越完整市场周期（牛市 + 熊市 + 震荡市）来评估。

### 7.3 如何正确评价双动量策略？

尽管在 Demo 的牛市数据中表现靠后，双动量策略在以下情形下优势明显：

| 市场环境 | 等权基准 | 相对动量 | 双动量 |
|---------|---------|---------|-------|
| 牛市（全面上涨）| ✅ 最优 | 次优 | 最差 |
| 熊市（全面下跌）| ❌ 随市大跌 | ❌ 跌得少一点 | ✅ 切债避险 |
| 震荡市（分化）| 中 | ✅ 捕获强势 | ✅ 回避弱势 |

**结论：双动量的价值在于"不对称性"——牛市少赚一点，熊市保住本金。**

对于注重本金安全的初学者，这个特性极为宝贵。

### 7.4 持仓集中度分析

从持仓热力图可以看到一个有趣的现象：

```
芯片 ETF 被选中频率最高（82%的月份）
医疗 ETF 排第二（70%）

这反映了 2019-2024 年 A 股的主要趋势：
半导体/科技 + 医疗健康是这一周期的主赛道
```

> ⚠️ **重要警示**：历史持仓集中度≠未来持仓集中度。
> 不能因为芯片 ETF 过去 5 年强，就预设它未来也会被持续选中。

---

## 8. 动量策略的局限性与风险

### 8.1 动量崩溃（Momentum Crash）

动量策略最大的单一风险是**动量崩溃**（Momentum Crash）：

```
发生条件：市场快速从下跌趋势逆转为强劲上涨
          （通常发生在熊市见底后的"V形反弹"）

典型案例：2009年3月全球股市V形反弹
          动量策略空仓"弱势股"、持有"强势股"
          结果：弱势股（低价小盘股）反而率先暴涨
                强势股反而横盘，动量策略大幅跑输

A股案例：2020年3月疫情底部反弹、2022年底政策转向
         持有前期强势行业反而错过了反弹
```

**应对方法**：
1. 在动量信号基础上叠加**估值过滤器**（避开极度高估行业）
2. 设置**止损机制**（如最大回撤超过 15% 时切换至国债）
3. 降低单一赛道集中度（强制分散，如最多持有行业不超过 2 只）

### 8.2 过拟合风险（Overfitting Risk）

回测中 Demo 选择了 12-1 月、6-1 月、3-1 月三个窗口。如果不断调整这些参数直到回测结果最好，就会陷入**过拟合**：

```
过拟合的症状：
  回测夏普比率 > 2.0
  换不同参数结果差异极大
  真实数据（实盘）效果远低于回测

防止方法：
  1. 固定参数（如永远用 12-1 月，不要调整）
  2. 预留测试集（后 30% 的数据不参与参数选择）
  3. 参数敏感性测试（改变 ±2 个月，结果不应剧烈变化）
```

### 8.3 主题 ETF 历史过短

这是 A 股 ETF 轮动策略的致命弱点之一：

```
A 股主要主题 ETF 成立时间：
  芯片 ETF（159995）：2019年5月
  人工智能 ETF（159819）：2019年10月
  新能源 ETF（516160）：2021年6月
  存储芯片 ETF（562850）：2022年12月

问题：
  → 最长历史仅 5-6 年（不含完整牛熊周期）
  → 成立于牛市阶段的 ETF，回测结果天然偏好
  → 历史太短，难以区分"策略有效"还是"恰好运气好"
```

> 💡 **建议**：至少需要 10 年以上历史（含一次完整熊市）才能对策略可靠性有初步信心。A 股历史较长的 ETF（如沪深 300 ETF 510300，2012年成立）更适合做长期回测验证。

### 8.4 政策风险与流动性风险

A 股特有风险，ETF 也不能免疫：

| 风险类型 | 描述 | 影响 |
|---------|------|------|
| **政策突变** | 双减政策（教育）、反垄断（互联网）| 行业 ETF 单日 -10% |
| **涨跌停传导** | ETF 内部成分股大面积涨停/跌停 | ETF 价格与净值偏离（折溢价）|
| **清盘风险** | 规模低于 5000 万的小 ETF 可能被清盘 | 被迫在低点卖出 |
| **流动性枯竭** | 小众主题 ETF 某些时段成交量极低 | 买卖价差扩大，滑点增加 |

---

## 9. 进阶优化方向

### 9.1 叠加估值过滤器

纯动量有时会在行业极度高估时继续追入。加入估值信号可以降低这种风险：

```python
# 概念示例：动量 + 估值复合信号
def composite_score(etf, date):
    mom_score = calc_momentum(etf, date)          # 动量得分
    
    # 估值得分：PE 历史分位数越低，分数越高
    pe_percentile = calc_pe_percentile(etf, date)  # 0~1，1表示历史最贵
    val_score = 1 - pe_percentile                  # 越便宜分数越高
    
    # 复合信号：动量 70% + 估值 30%
    return 0.7 * normalize(mom_score) + 0.3 * val_score
```

**实战 ETF 估值参考**：
- 中证指数官网提供各指数 PE/PB 历史数据
- 恒生前海基金等定期发布行业估值分位数报告
- AKShare 可获取宽基指数 PE 数据

### 9.2 波动率调仓（Volatility Scaling）

在高波动时期降低持仓比例，类似"自动降速"机制：

```python
def vol_scaled_weight(base_weight, current_vol, target_vol=0.15):
    """
    目标波动率（Target Volatility）仓位调整
    若当前波动率过高，则降低持仓比例
    
    例：目标波动 15%，当前波动 30%
        → 实际持仓 = 50%（另 50% 转为国债 ETF）
    """
    scale = min(target_vol / current_vol, 1.0)
    return base_weight * scale
```

### 9.3 宏观择时信号

利用宏观指标提前判断牛熊切换，辅助双动量的避险决策：

```
信号类型        数据来源             使用逻辑
-----------------------------------------------------------------
利率曲线        国债收益率           10Y-2Y 倒挂 → 熊市预警
信用利差        企业债 vs 国债       利差扩大 → 风险偏好下降
PMI 趋势        国家统计局           PMI < 50 且下行 → 降低权益仓位
市场情绪        北向资金流入/流出    持续流出 → 外资撤退信号
```

### 9.4 季度再平衡降低成本

将月度再平衡改为季度再平衡，换手率降低约 2/3，成本拖拽从 ~1.5% 降至 ~0.5%：

```
月度再平衡：年化成本约 1.0-2.5%（视换手率）
季度再平衡：年化成本约 0.3-0.8%
半年度再平衡：年化成本约 0.2-0.4%

代价：信号响应更慢，可能错过行情初期
```

---

## 10. 实战路径：接入真实数据

### 10.1 环境准备

```bash
# 安装真实数据接口
pip install akshare        # 免费，数据较全
pip install tushare        # 部分接口需积分/付费
```

### 10.2 用 AKShare 获取 ETF 真实数据

```python
import akshare as ak
import pandas as pd

def get_etf_history(etf_code: str, 
                    start_date: str = "20190101",
                    end_date:   str = "20241231") -> pd.DataFrame:
    """
    获取 A 股 ETF 历史日线数据
    Get A-Share ETF historical daily data
    
    参数：
      etf_code  : ETF 代码，如 "159995"（不含交易所后缀）
      start_date: 开始日期，格式 "YYYYMMDD"
      end_date  : 结束日期，格式 "YYYYMMDD"
    
    返回：包含 date, close, volume 等列的 DataFrame
    """
    df = ak.fund_etf_hist_em(
        symbol=etf_code,
        period="daily",
        start_date=start_date,
        end_date=end_date,
        adjust="qfq"          # 前复权（Forward Adjusted Price），处理分红/拆股
    )
    df = df.rename(columns={"日期": "date", "收盘": "close", 
                             "成交量": "volume", "开盘": "open"})
    df["date"] = pd.to_datetime(df["date"])
    df = df.set_index("date").sort_index()
    return df[["open", "close", "volume"]]


# 示例：批量获取 ETF 池数据
ETF_CODES = ["159995", "159819", "516160", "159928", "512170", "512880", "511010"]

etf_data = {}
for code in ETF_CODES:
    try:
        etf_data[code] = get_etf_history(code)
        print(f"✅ {code}: {len(etf_data[code])} 条记录")
    except Exception as e:
        print(f"❌ {code}: 获取失败 - {e}")

# 合并为价格矩阵
price_matrix = pd.DataFrame({
    code: df["close"] 
    for code, df in etf_data.items()
})
```

### 10.3 关键注意事项：前复权 vs 后复权

| 复权方式 | 说明 | 用途 |
|---------|------|------|
| **前复权**（Forward Adjusted）| 以当前价格为基准向历史调整 | **回测首选**：历史价格连续，收益率计算准确 |
| **后复权**（Backward Adjusted）| 以上市初始价为基准向未来调整 | 长期持有者参考 |
| **不复权** | 原始价格，含分红跳空 | ❌ 不适合回测，会产生虚假信号 |

> ⚠️ **前复权的陷阱**：前复权价格会随时间变化（每次分红后历史价格都重新调整）。在回测中，必须在**同一时点**下载数据，否则历史价格不一致。

### 10.4 从合成数据切换到真实数据的步骤

```python
# 替换 Demo 中的 §0 数据生成部分
# 将合成 price_df 替换为真实数据：

# 原来（合成数据）：
# price_df = (1 + returns_df).cumprod()

# 替换为（真实数据）：
price_df = price_matrix  # 已经是收盘价，无需转换

# 注意：真实数据可能有以下问题需要处理：
# 1. 缺失值（节假日、停牌）→ 前向填充 ffill()
# 2. 各 ETF 成立时间不同 → 统一以最晚成立的 ETF 作为回测起点
# 3. 价格单位不统一 → 统一转为净值形式（除以第一个有效价格）

price_df = price_df.ffill()                   # 填充缺失值
start_common = price_df.dropna().index[0]     # 统一起始日期
price_df = price_df.loc[start_common:]        # 裁剪至共同起始日
price_df = price_df / price_df.iloc[0]        # 标准化为净值形式（从1开始）
```

---

## 11. 双语术语表

| 中文术语 | English Term | 简要说明 |
|---------|-------------|---------|
| 行业 ETF 轮动 | Sector ETF Rotation | 在不同行业 ETF 间周期性切换 |
| 动量因子 | Momentum Factor | 过去表现预测未来表现的信号 |
| 相对动量 | Relative Momentum | 横截面比较，选相对最强 |
| 绝对动量 | Absolute Momentum | 纵向比较，判断趋势正负 |
| 双动量 | Dual Momentum | 结合绝对和相对动量的策略 |
| 避险资产 | Safe-Haven Asset | 市场下跌时表现抗跌的资产 |
| 再平衡 | Rebalancing | 定期调整组合权重至目标配置 |
| 换手率 | Turnover Rate | 组合中被替换的资产比例 |
| 印花税 | Stamp Duty | A 股卖出时征收的税，0.1% |
| 滑点 | Slippage | 订单执行价与预期价的差异 |
| 复权 | Price Adjustment | 对历史价格进行分红/拆股调整 |
| 前复权 | Forward Adjusted | 以当前价为基准调整历史价格 |
| 最大回撤 | Maximum Drawdown | 从历史最高点的最大跌幅 |
| 夏普比率 | Sharpe Ratio | 单位风险所获得的超额收益 |
| 卡玛比率 | Calmar Ratio | 年化收益 / 最大回撤 |
| 行业景气周期 | Industry Business Cycle | 行业随经济周期的景气变化 |
| 动量崩溃 | Momentum Crash | 趋势逆转时动量策略的大幅亏损 |
| 过拟合 | Overfitting | 策略参数过度适应历史数据 |
| 跟踪误差 | Tracking Error | ETF 实际表现与指数的偏差 |
| 清盘风险 | Liquidation Risk | ETF 规模过小被强制清算的风险 |
| 估值分位数 | Valuation Percentile | 当前估值在历史中所处的位置 |
| 波动率调仓 | Volatility Scaling | 根据波动率动态调整持仓比例 |
| 目标波动率 | Target Volatility | 组合设定的波动率上限目标 |
| 信用利差 | Credit Spread | 企业债与国债的收益率差异 |
| T+0 | T+0 Trading | 当天买入当天可以卖出 |
| T+1 | T+1 Trading | 当天买入次日才能卖出（个股规则）|
| 折溢价 | Premium/Discount | ETF 市价与净值的偏离程度 |

---

## 附录：策略参数速查

| 参数 | Demo 默认值 | 可调范围 | 影响 |
|------|----------|---------|------|
| 动量回望期 | 12-1, 6-1, 3-1 月 | 3-24 月 | 更长=更稳定但更滞后 |
| 持仓 ETF 数量 (K) | 3 | 1-5 | 更少=更集中，更多=更分散 |
| 再平衡频率 | 月度 | 周/月/季 | 更频繁=响应快但成本高 |
| 佣金率 | 0.03% | 0.015-0.05% | 影响成本拖拽 |
| 印花税 | 0.10% | 固定 | 不可更改 |

---

> **下一步建议**：
> 1. 用 AKShare 接入真实 A 股 ETF 数据，替换合成数据后重新回测
> 2. 在动量信号基础上叠加**估值过滤器**（参考第 9.1 节）
> 3. 参考《双动量投资》（Gary Antonacci）原著，深入理解策略理论基础
> 4. 结合 `doc_06_astock_practice_guide.md` 的风险管理框架，制定完整的实战纪律

---

*本文档配套代码：`quant_etf_rotation_demo.py`*
*系列文档索引：doc_01（数据准备）→ doc_02（策略回测）→ doc_03（事件驱动）→ doc_04（Alpha因子）→ doc_05（组合优化）→ doc_06（A股实战指南）→ **doc_07（ETF轮动）***
