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 锁定 + 我初版)