Source: task4-all-weather/input/task6-brief-v0.md
Last modified: 2026-05-16 18:29:50 · 14,539 bytes

Task #6 — 行业 ETF 轮动 · Brief v0

Author: @RayDario

Pairs with: Task #4 全天候 brief (shares macro overlay) + Kaite mandate (#mini-cypress:509fb538)

Status: v0 — for Kaite verification + @JimSimons data/backtest spec

---

0. 一页摘要

A 股 行业 ETF 月度轮动, 三层信号 (趋势 + 相对强度 + 拥挤/风险) + macro overlay (复用 Task #4 regime 标签)。

**目标** (Kaite locked): 年化 12-18%, MDD ≤ 20%

**Universe**: 申万一级 31 行业 ETF (有可投 ETF 的, 约 25-27 个), 不进概念 ETF (v1 讨论)

**调仓**: 月度, 持有 Top-N (N=5 默认), Equal weight

**关键不做**:

- 不日频 / 周频调仓 (吃交易成本不偿失)

- 不单纯 momentum (regime shift 时 lag 严重 — 见 §6 失败模式)

- 不进概念 ETF v0 (容量小, 折溢价大)

- 不做 行业内 stock picking (那是 Task #5)

**关键做**:

- 三层信号融合 (趋势 + RS + 风险) → 选 Top-N

- macro overlay 加层 (regime 4 选 2-3 个倾斜行业)

- 严格风控 (单行业 ≤ 25%, 单次换仓 ≤ 全组合 40%)

---

1. Framework 综合

1.1 学术 anchor

- **Jegadeesh-Titman (1993)**: cross-sectional momentum (12-1 月)

- **Asness (2013)**: value + momentum everywhere — momentum 在多市场多资产稳健

- **Faber (2007 GTAA)**: trend filter (10M moving average) + momentum + crash protection

- **Antonacci (2014 dual momentum)**: absolute momentum (vs cash) + relative momentum (vs peers)

- **国内研究**: 东方证券金工 / 中信证券金工 / 申万宏源 等 行业轮动 系列报告 — 公开报告显示三层信号 + macro overlay 是行业共识

1.2 mini-cypress 设计原则

- **不是单 momentum**: pure momentum 在 regime shift 时 (e.g. 2024-09-24 政策转向) 滞后严重

- **不是单 fundamental**: 行业基本面变化慢, 月度调仓用不上

- **是 trend + RS + risk + macro overlay 四要素融合**, 让信号互相补 (trend 抓动量, RS 抓相对位置, risk 防回撤, macro overlay 校 regime)

1.3 与 Task #4 全天候 的关系

- **全天候**: core 底仓, 跨资产 (股 / 债 / 商品), 风险均衡, 低波动 (vol 6-8%)

- **ETF 轮动**: satellite alpha, 股内行业 rotation, 中等波动 (vol 15%)

- **共享 macro overlay**: 复用 Task #4 §3 的 4 regime 标签 (节省研究 + 提高 portfolio 一致性)

- **不共享 universe**: 全天候用宽基 ETF, 轮动用 行业 ETF (不冲突)

---

2. Universe 定义

2.1 申万一级 31 行业 (2021 新版分类)

基础: 申万一级行业 2021 改版后 31 个行业。

**可投 (有 broad ETF, 规模 ≥ 5 亿, 日均成交 ≥ 5000 万)**: ~25-27 个

**不可投 / 流动性差 / 无 ETF**: 综合 / 部分小众如 美容护理

2.2 v0 ETF 标的池 (JimSimons 数据层用)

按"规模优先 + 跟踪误差 + 流动性"原则, 每行业选 1 主代理:

# 申万一级 主代理 ETF 代码 备代理
1 电子 国泰 半导体 ETF 512760 华夏 半导体 (512480)
2 计算机 华夏 计算机 ETF 159998 国泰 计算机 (512720)
3 通信 华夏 5G 通信 ETF 515050 通信 ETF (515880)
4 传媒 鹏华 传媒 ETF 159805 嘉实 中证传媒 (512980)
5 国防军工 国泰 军工 ETF 512660 富国 军工 (512560)
6 汽车 国泰 智能汽车 ETF 159801 鹏华 汽车 (516110)
7 机械设备 华夏 机械 ETF 159886
8 电力设备 (含新能源) 华夏 中证新能源车 ETF 515030 华泰柏瑞 中证光伏 (515790)
9 化工 (基础化工) 国泰 中证化工 ETF 159870
10 钢铁 国泰 中证钢铁 ETF 515210
11 有色金属 国泰 中证有色 ETF 159980 (能源不是, 用 512400 有色) 华夏 有色 (516650)
12 煤炭 国泰 中证煤炭 ETF 515220
13 建筑材料 国联安 中证建材 ETF 159745
14 建筑装饰 国寿安保 中证建筑 ETF 516970
15 房地产 华夏 房地产 ETF 515160
16 银行 华宝 中证银行 ETF 512800 华夏 银行 (515020)
17 非银金融 华宝 中证证券 ETF 512000 华夏 证券 ETF (512880)
18 食品饮料 鹏华 酒 ETF 512690 (酒 ETF) 招商 食品 (515170)
19 家用电器 华夏 家电 ETF 159996
20 纺织服装 国联安 纺织 ETF (流动性差, 候选) 159825
21 轻工制造 (流动性差, 候选用 中证 1000 / 中小盘代理)
22 医药生物 国泰 中证 医药 ETF 512010 华宝 医疗 (512170)
23 农林牧渔 国泰 农业 ETF 159825
24 商贸零售 (无主流 ETF, v0 不进)
25 社会服务 (无主流 ETF, v0 不进)
26 公用事业 国泰 中证 公用事业 ETF 159611
27 交通运输 (无主流 ETF, v0 暂不进)
28 环保 (新分类) 国寿安保 中证环保 ETF 516300
29 美容护理 (新) (无 ETF, v0 不进)
30 综合 跳过
31 银行 / 非银金融 (已列)

**v0 实际 universe ≈ 24-26 个**, 准确名单由 JimSimons 在 数据层落地时按"规模 + 流动性"再筛, 在 task thread 报告最终入选名单。

2.3 benchmark

- 沪深 300 ETF (510300) — 用于相对强度 RS 计算

- 中证 800 (515800) — 备用 (覆盖更全)

2.4 v0 不进的 (v1 讨论)

- 概念 ETF: AI / 半导体设备 / 储能 / 创新药 / 元宇宙 等 — 容量小, 申赎限制, 折溢价波动大

- 主题 ETF: ESG / 央企 / 共同富裕 等

- 行业内细分 ETF: e.g. "5G 通信" 已包含在通信里, 不重复

- 行业基金 (主动管理): 不在 ETF 轮动范围内

---

3. 三层信号 spec (JimSimons 回测可执行)

3.1 趋势信号 (Trend)

对每个 ETF i, 计算月度:

- **T_short_i**: 过去 60 日累计收益率

- **T_med_i**: 过去 120 日累计收益率

- **T_long_i**: 过去 250 日累计收益率

- **T_ma_slope_i**: 60 日 MA 当前值 vs 30 天前 60 日 MA → 上行 +1, 下行 -1, 否则 0

- **T_composite_i** = (T_short_i 分数 z 标准化) × 0.3 + (T_med_i z) × 0.4 + (T_long_i z) × 0.2 + T_ma_slope_i × 0.1

3.2 相对强度信号 (RS)

- **RS_250_i** = ETF i 过去 250 日收益 - 沪深 300 过去 250 日收益

- **RS_rank_i** = RS_250_i 在 universe 内 cross-section rank (1 = best)

3.3 拥挤/风险信号 (Risk)

- **vol_60_i** = ETF i 过去 60 日年化波动率

- **dd_60_i** = ETF i 过去 60 日 max drawdown (负数, 越小越差)

- **turnover_60_i** = ETF i 过去 60 日日均换手率

- **risk_score_i** = -1 × (vol_60_i z 标准化) × 0.4 + (dd_60_i z) × 0.4 + (-1 × turnover_60_i z, 因换手过高 = 拥挤) × 0.2

- **风险评分越高越好** (低 vol / 浅 DD / 适度换手)

3.4 综合 score

- **score_i** = T_composite_i × 0.4 + (-RS_rank_i 标准化, 让 rank 高变 z 大) × 0.4 + risk_score_i × 0.2

3.5 选股规则

- Top-N (N=5) by score_i

- Equal weight (20% each)

- 月度再平衡

3.6 退出规则 (在月度再平衡之外)

- 持仓 ETF score 跌出 Top-10 → 下次月度强制退出

- 持仓 ETF 单月跌幅 > 15% → 即时退出 (next day open)

- 持仓 ETF 跌破 250 日 MA + RS_rank 跌出 universe 前 50% → 即时退出

---

4. Macro Overlay (复用 Task #4 regime 标签)

4.1 Regime → 行业偏好映射

Regime 偏好 +20% 加权 行业 规避 -20% 减权 行业
R1 复苏 (Growth ↑ Inflation ↓) 早周期: 银行 / 房地产 / 汽车 / 家电 / 建材 / 非银金融 防御: 医药 / 公用事业
R2 过热 (Growth ↑ Inflation ↑) 资源周期: 有色 / 钢铁 / 煤炭 / 化工 / 机械 利率敏感: 房地产 / 银行
R3 滞胀 (Growth ↓ Inflation ↑) 防御 + 稳通胀: 食品饮料 / 医药 / 公用事业 / 农林牧渔 / 黄金 (跨 Task #4) 周期: 钢铁 / 有色 / 汽车
R4 衰退 (Growth ↓ Inflation ↓) 防御 + 高股息 + 利率敏感: 银行 (高股息) / 公用事业 / 红利 / 医药 周期 + 成长: 有色 / 电子 / 计算机

4.2 应用方式

- 月度计算 Top-N 时, score_i 在 regime 偏好行业上乘 1.2, 在 regime 规避行业上乘 0.8

- 这样 Top-N 名单受 regime 影响但不强制 (信号本身仍有决定权)

- 避免 regime label 错误时整个组合受灾

4.3 Regime 切换的 churn 控制

- 当 regime 切换发生, 当月不重新洗牌, 等下一个月度再平衡再 apply 新 overlay (减少 churn)

---

5. Position sizing + 再平衡

5.1 持仓规模

- Top-N = 5, equal weight (20% each)

- N=5 是基础, 回测中可测 N=3, N=5, N=7, N=10 对比 (作为 robustness test)

- 单行业 cap ≤ 25% NAV (防止某 ETF 极端拉升导致权重溢出)

5.2 现金 / 防御

- 默认 0% 现金 (Top-N 满仓)

- 触发**全市场风控**时: 沪深 300 跌破 250 日 MA + 国家级负面事件 (e.g. 流动性危机) → 仓位减至 60%, 现金 + 红利 ETF 替代

5.3 调仓频率

- **月度** (每月最后一个交易日决策, 下一个月第一个交易日执行)

- 不日频, 不周频

- 急触发 (单 ETF 跌幅 > 15%, 或 跌破 250 MA + RS rank 出前 50%) 即时退出

5.4 单次调仓 cap

- 单次月度调仓 总换手 cap ≤ 40% NAV

- 如新名单与旧名单变化超过 40%, 优先换 score 最低的旧持仓, 保留其余

5.5 交易成本预算

- 假设单边 ETF 交易成本 ~10 bp (含佣金 + 冲击)

- 月度 40% 换手 × 2 (单边) × 10 bp = 0.8% / 月 ≈ 9.6% / 年 (annualized cost)

- 这是合理上限 (我们用月度而非周度就是为了控制此项)

---

6. 失败模式备忘

6.1 Regime shift 时 momentum lag (核心风险)

- 风险: pure momentum 在 regime 切换时损失严重 (e.g. 2024-09-24 政策转向, 防御股突然弱, 成长股突然强, momentum 模型还在持有防御)

- 应对: §4 macro overlay 给 score 加 regime bias; 但 overlay 也不会瞬时调整 (依赖 regime label, label 本身有 2 月 lag)

- **接受**: 这是 momentum 策略的本质问题, 不可完全消除, 只能缓解

- **监测**: OOS-B (2024-09-24 至 2025-06-30) 表现是核心 KPI

6.2 拥挤交易踩踏

- 风险: 行业 ETF 在某个 hot 主题被基金追逐, 单 ETF 流动性骤降 (e.g. 2021 新能源)

- 应对: §3.3 拥挤信号 (turnover 过高反扣分) 提前减权; §5.4 单次换仓 cap 防止追高

- 监测: 单 ETF 持仓 vs 该 ETF 流通份额 比例 ≤ 1% (避免大额冲击)

6.3 概念 ETF 替代主题 (诱惑)

- 风险: 概念 ETF 信号好看但容量差, 想用进 universe

- 应对: v0 不进, v1 严格 capacity + 折溢价 滤波后讨论

6.4 行业分类调整 (申万 reform)

- 风险: 2021 申万一级 从 28 → 31, 历史数据需要重新映射

- 应对: JimSimons 在数据层处理 — 早期用旧 28 分类, 2021-08 之后用 31 分类, 期间映射保持一致性

6.5 政策黑天鹅

- 风险: 个别 行业被政策定点打压 (e.g. 2021 教育 / 互联网, 2024 房地产)

- 应对: 信号自然会让排名跌出 Top-N → 月度调仓退出; 急触发规则 (单月 -15%) 也会触发即时退出

- **不预判政策**: 林颖颖 framework 一致, 我们不主观规避行业, 让信号说话

6.6 信号过拟合

- 风险: 三层信号权重 (0.4 / 0.4 / 0.2) 是我拍的, IS 过拟合

- 应对: 回测中测多组权重 (0.3/0.5/0.2 / 0.5/0.3/0.2 / 0.4/0.4/0.2 等) 看稳健性; 选 OOS 表现最稳的, 不选 IS 收益最高的

---

7. JimSimons 数据 + 回测 spec

7.1 数据层

拉取 §2.2 中所有 ETF 标的 + benchmark:

- ETF 日线 OHLCV + 复权

- ETF 规模 / 跟踪误差 / 折溢价 (月度)

- 沪深 300 / 中证 800 日线 (benchmark)

- **复用 Task #4 的 macro signal** (PMI / CPI / PPI / 工业增加值 / 社融) — 无需重复拉

- 历史: 2018-01-01 至今 (部分 ETF 上市晚, 上市后回测起)

- 落地: ~/data/mini-cypress/rqdata/etf_industry/2018-2026/

7.2 回测任务

- regime label 复用 Task #4 输出 (调用 JimSimons Task #4 输出)

- 三层信号 + macro overlay → score → Top-N (N=5)

- 月度调仓, 急触发即时退出

- 全市场风控触发 → 仓位减至 60%

7.3 OOS 拆分

- IS: 2018-01-01 至 2023-12-31 (ETF 历史普遍较短, 比 Task #4 IS 起点稍晚)

- OOS-A / B / C: 与 Task #4 同 (2024-01-01 至 2024-09-23 / 2024-09-24 至 2025-06-30 / 2025-07-01 至今)

7.4 输出指标 (每个 OOS 段独立)

- 年化 / vol / Sharpe / Sortino / Calmar

- max DD + recovery 时长

- 月度换手率 + 总交易成本

- 单行业最长持有时长 / 切换次数

- vs 沪深 300 / 中证 800 / 等权 ETF 比较 (alpha / IR)

- regime 切换前后表现 (验证 macro overlay 是否真有效)

- 不同 N (3/5/7/10) sensitivity

- 不同信号权重 (0.3/0.5/0.2 等) sensitivity

7.5 Failure case (回测异常时 ping 我)

- IS 年化 > 25% → overfit, 检查信号权重 / N

- IS Sharpe > 2.0 → 异常高, 检查交易成本是否计入

- OOS-A 年化 > 15% → 检查是否未捕捉 2024 上半年震荡

- OOS-B 年化 < 沪深 300 alpha → macro overlay 失效

---

8. 给 @Kaite 的 verification 请求

8.1 信号 + Top-N + 调仓

- 三层信号权重 0.4 / 0.4 / 0.2 (趋势 / RS / 风险) 是我拍的, 你有偏好吗?

- Top-N = 5, equal weight — 你接受还是建议不等权 / 不同 N?

- 月度调仓 — 你接受还是建议双周 / 季度?

8.2 Macro overlay

- §4.1 我对 4 regime 偏好的行业映射, 你有补充 / 修改?

- ±20% 加权幅度是否合适? (大了会过 overlay, 小了 overlay 无效)

8.3 Universe

- v0 不进概念 ETF — 你接受?

- 申万一级 31 行业, 实际 ~24-26 有 ETF — JimSimons 落地后我会同步最终名单给你, 是否有具体行业你点名必须 in / out?

8.4 触发规则

- 急触发: 单月 -15% / 跌破 250 MA + RS 出前 50% → 即时退出 (next day) — 你接受?

- 全市场风控: 沪深 300 跌破 250 MA + 流动性危机 → 仓位减至 60% — 你接受?

- 单次换仓 cap 40% NAV — 你接受?

---

9. 与其他 task 的接口

- **Task #4 全天候**: 共享 macro regime 标签; ETF 轮动不与全天候持仓重叠 (全天候用宽基 ETF, 轮动用行业 ETF)

- **Task #5 领头羊**: 同为 A 股, 但 Task #5 是 stock-picking, Task #6 是 ETF 轮动 — 不冲突, 可并存

- **Task #7 可转债**: 不重叠

- **Task #8 组合层**: ETF 轮动占组合 **资金权重 25% / 风险预算 ~30%** (per Kaite 锁定 + 我初版)