指数、行业与主题:给股票分组的三种方式#
研究里经常要回答”这只股票和哪些股票是一类”。指数、行业、主题(A 股常说的”概念”)都在回答这个问题, 但它们由不同的人、按不同的规则、为不同的目的划分。混用它们,会得到看似合理却经不起推敲的结论:拿今天的 主题名单回测三年前,拿指数成分当行业,或者把一只股票同时算进两个”互斥”的行业。
先看三者的区别:
指数 |
行业 |
主题(概念) |
|
|---|---|---|---|
谁来划分 |
指数公司:中证、国证、标普道琼斯…… |
分类体系:申万、GICS…… |
数据商或市场叙事:同花顺…… |
按什么划分 |
公开的选样规则:市值、流动性、财务指标 |
主营业务,通常看收入构成 |
业务关联、政策、技术或事件 |
一只股票可以属于 |
任意多个指数,也可以一个都不属于 |
同一体系的同一层级里恰好一个 |
任意多个主题 |
权重 |
有,按编制方法计算 |
没有,只有名单 |
没有,只有名单 |
多久变一次 |
定期调样,如沪深 300 每半年 |
很少;体系偶尔改版,公司转型时重新归类 |
随时新设、调入调出 |
典型用途 |
业绩基准、股票池、对冲 |
行业中性、行业轮动、风险模型 |
热点与事件研究 |
libfinance 代码 |
|
|
|
三者在 libfinance 里用同一组形状的函数查询——证券属于哪些、某个对象包含哪些、成分权重是多少——并且都按
as_of 回答”那一天的事实”,见 4 行业和概念信息。
指数:一篮子股票加一套计算规则#
指数不只是一份名单,它由三部分组成:
选样规则:哪些股票进来。沪深 300 选沪深两市规模大、流动性好的 300 只股票;中证 500 选排在沪深 300 之后的 500 只;标普 500 由委员会按市值、流动性、盈利等条件挑选。
加权方式:每只股票占多少。最常见的是自由流通市值加权;道琼斯工业平均按股价加权;也有等权、红利加权、 对单只成分设上限的修正市值加权。
基日与基点:从哪天、从多少点开始算。点位只在同一个指数内部可比——沪深 300 的 4000 点和上证指数的 3000 点 之间没有高低之分。
按选样规则,指数大致分为宽基(沪深 300、中证 1000、标普 500,代表一个市场或一个市值段)、行业(中证 银行)、风格与策略(红利、价值、低波)和主题(中证新能源)。另外两点值得注意:
价格指数与全收益指数。常见的指数点位是价格指数,成分股分红后点位不会补回,长期看会低估真实收益。 拿价格指数做基准,相当于让基准少算了分红。
发布日之前的点位是回算的。一个 2014 年发布、基日 2004 年的指数,2004–2014 年的点位是编制者事后按规则推算 的,当时并没有人能投资它。
常见用途:业绩基准(”跑赢沪深 300”);股票池(”在中证 800 里选股”);对冲(用股指期货对冲组合的市场 暴露)。
陷阱:成分是变化的。用今天的沪深 300 成分回测 2018 年,选进来的全是”后来变大的公司”——这是典型的幸存者
偏差。历史股票池要用 get_index_constituents(..., as_of=...)。
行业:一棵互斥、全覆盖的分类树#
行业分类按公司的主营业务(通常看收入构成)把股票分进一棵树。两条性质让它和指数、主题完全不同:
互斥:在同一个分类体系的同一层级,一只股票只属于一个行业。
全覆盖:每只股票都有行业。
因此同一层级的行业正好把整个市场切成互不重叠的几块,这是”行业中性”的前提:可以对每个行业单独做事,而不会 重复计算。
体系 |
市场 |
说明 |
|---|---|---|
申万 SW |
A 股 |
申万宏源研究编制,A 股研究最常用。三级结构;2021 年改版,一级行业从 28 个调整为 31 个 |
GICS |
全球 |
MSCI 与标普道琼斯联合制定,四级结构,11 个一级行业(Sector),机构投资最常用 |
ICB |
全球 |
富时罗素的行业分类基准,四级结构 |
NAICS |
北美 |
北美产业分类体系,政府统计口径,按生产活动划分,2 到 6 位代码 |
SIC |
美国 |
美国标准产业分类,较老,SEC 登记文件仍在使用 |
常见用途:
行业中性化。一个选股因子如果偏好银行股,它的收益可能大半来自银行板块的涨跌,而不是选股能力。对行业 哑变量回归取残差,或在每个行业内部分别排序,可以去掉这部分。
风险模型。Barra CNE5 的 31 个行业因子就是申万一级行业的哑变量,见 7 因子。
行业轮动与比较。估值高低要在同一行业里比较才有意义:银行的市盈率和软件公司的市盈率不是一回事。
陷阱:分类会变。公司转型会被重新归类,分类体系本身也会改版——申万 2021 年改版前后的行业节点数是 400 与 608,
改版前的”采掘”在改版后拆成了”煤炭”与”石油石化”。拿今天的行业归属回测过去,相当于用后来才知道的业务结构给
当年的公司分类。用 get_instrument_industry(..., as_of=...) 取当时的归属;跨改版的长区间研究,要先决定用哪一版、
如何映射。
主题(概念):围绕叙事的股票集合#
主题把与某个故事相关的股票放在一起:新能源汽车、大飞机、京津冀一体化、算力……它不追求互斥,也不追求全覆盖:
多对多:一只股票可以同时属于几十个主题;一个大主题可以有上千只成分(新能源汽车约 1000 只)。
由叙事驱动:政策出台、技术突破、事件发生时,数据商会新设主题、调入调出成分,主观判断的成分很大。
没有权重:只有名单。libfinance 给出的是由名单推出的等权(
derived_equal_weight),不是供应商权重。
常见用途:追踪市场热点和资金轮动;事件研究(政策发布后相关股票的反应);解释短期的联动——为什么几只 看起来不相关的股票同一天涨停。
陷阱:主题是三者里未来信息最严重的。很多主题是在行情发生之后才设立的,成分也常在事后补入;
用今天的主题名单回测过去,等于提前知道了哪些股票后来会被市场归为一类。libfinance 中的主题数据只从最近开始
(更早的 as_of 会报 CoverageError),它适合研究当下,不适合做长历史回测。
怎么选#
你要做的事 |
用 |
注意 |
|---|---|---|
衡量策略好坏、选业绩基准 |
指数 |
留意价格指数不含分红 |
限定一个历史股票池 |
指数成分 |
传 |
去掉因子里的行业暴露、控制组合风险 |
行业 |
同一体系、同一层级;传 |
研究热点、事件、短期联动 |
主题 |
历史短,不要拿来做长回测 |