Appearance
第 9 讲:先定股票池 Universe
本讲要点
没有写死的池子,就没有可复核的横截面比较。
1. 为何第 8 讲之后先讲池子
第 8 讲已演示 动量轮动:在四只 ETF 里按月排名、持有 Top-2。那四只并不是随手点的——它们构成了研究用的 Universe(可投资集合)。
本讲把这一步单独写清楚:
轮动比较的是「池内相对强弱」。池子未定义,排名就没有合法对象。
阅读顺序上,B 单元以第 8 讲建立主线直觉,第 9–10 讲补全其前置组件:谁能进场(Universe)、进场后各买多少(权重)。
2. Universe 是什么
Universe = 事先约定、可复现的一篮子标的,以及它们在回测中「何时有资格被选中」的规则。
| 随意选股 | 有 Universe | |
|---|---|---|
| 比较范围 | 今天想比谁就比谁 | 只在名单内比较 |
| 复现 | 他人无法重做 | 名单与规则可公开复核 |
| 偏差 | 易混入事后才出名的票 | 仍须警惕,但边界更清楚 |
入门阶段常用两类池子:
- ETF / 指数篮子(本课程演示):流动性好、规则简单、少涉及个股停牌细节。
- 股票池:还需写明市值、流动性、上市天数等过滤;并处理幸存者、退市与停牌——后面可扩展,本讲先用 ETF 把概念立住。
3. 本课程冻结的演示池
与第 8 讲相同,研究期内不临时加减成分:
| 代码 | 名称 | 在池中的角色 |
|---|---|---|
510300.SS | 沪深300ETF | A 股大盘 |
510500.SS | 中证500ETF | A 股中盘 |
159915.SZ | 创业板ETF | 成长风格 |
518880.SS | 黄金ETF | 商品 / 避险代理 |
规则窗口:2021-01-01—2026-03-04(与全书主实验一致)。
为何放入黄金:三只权益 ETF 之间相关较高,黄金与之相关偏低,使「横截面轮动」有机会在风格切换时换仓,而不是四只几乎同涨同跌。
4. 代码:列出池子并检查覆盖
python
UNIVERSE = [
("510300.SS", "沪深300ETF", "A股大盘"),
("510500.SS", "中证500ETF", "A股中盘"),
("159915.SZ", "创业板ETF", "成长风格"),
("518880.SS", "黄金ETF", "商品/避险代理"),
]
raw = yf.download(
[s for s, _, _ in UNIVERSE],
start="2021-01-01",
end=...,
auto_adjust=True,
progress=False,
)["Close"]
for code, name, role in UNIVERSE:
ser = raw[code].dropna()
print(name, ser.index[0].date(), "→", ser.index[-1].date(), "n=", len(ser))
month_ret = raw.dropna(how="any").resample("ME").last().pct_change().dropna()
print(month_ret.corr().round(2))脚本:easy-quant/code/09_universe.py
5. 运行结果
text
Universe 规则窗口: 2021-01-01 → 2026-03-04
成分数量: 4
成分列表(代码 / 名称 / 角色):
510300.SS 沪深300ETF [A股大盘]
510500.SS 中证500ETF [A股中盘]
159915.SZ 创业板ETF [成长风格]
518880.SS 黄金ETF [商品/避险代理]
数据覆盖:
沪深300ETF: 2021-01-04 → 2026-03-04 交易日 1248 缺失 0
中证500ETF: 2021-01-04 → 2026-03-04 交易日 1248 缺失 0
创业板ETF: 2021-01-04 → 2026-03-04 交易日 1248 缺失 0
黄金ETF: 2021-01-04 → 2026-03-04 交易日 1248 缺失 0
四者同时有价的交易日: 1248
月收益相关系数:
创业板ETF 沪深300ETF 中证500ETF 黄金ETF
创业板ETF 1.00 0.87 0.88 0.12
沪深300ETF 0.87 1.00 0.83 0.09
中证500ETF 0.88 0.83 1.00 0.18
黄金ETF 0.12 0.09 0.18 1.00
读法:权益三只两两相关约 0.8–0.9;黄金与它们约 0.1–0.2。池子因此同时具备「可比的横截面」与「一定分散度」。若四只几乎完全相关,轮动只是在噪声里换仓。
6. 必须知道的坑(点到为止)
即使用 ETF,也要养成边界意识;换成股票池时这些问题会更尖锐:
- 幸存者偏差:只用「今天还活着」的名单回测过去,会抬高历史表现。
- 上市 / 退市:某日尚未上市的标的,当日不得进入可选集合。
- 停牌与缺失:无有效价格则不应参与排名,或需事先写明替代规则。
- 事后挑选池子:因「这段好看」才把某 ETF 加进 Universe,等于另一种过拟合。
本演示池在样本起点四者均已交易、覆盖完整,适合入门;扩展到个股时,须把上述规则写进代码,而不是口头保证。
7. 本讲小结
- Universe 是轮动的前提:名单与资格规则必须事先写死
- 本课程演示池:四只 ETF,角色清晰,相关结构合理
- 下一讲在同一池子、同一选人信号下,只改「各买多少」