第四章:因子分类体系——估值、成长、质量、动量、波动率、流动性
做量化这几年,我见过不少新手一上来就猛怼几百个因子,结果回测曲线漂亮得像假图,实盘一跑就崩。说白了,因子不是越多越好,关键得知道每个因子背后在讲什么故事。
今天咱们就把六大类因子掰开揉碎聊清楚。我个人习惯把因子分成两类:一类是「赚什么钱」,另一类是「怎么亏钱」。估值、成长、质量属于前者,动量、波动率、流动性属于后者。你想想看,是不是这个理?
核心观点:因子分类不是为了分类而分类,而是为了理解收益来源和风险暴露。每类因子都有其经济学逻辑和统计特征,乱用会出大问题。
1. 估值因子:便宜才是硬道理?
估值因子是量化界的「老炮儿」。PE、PB、PS、PCF,这些指标大家应该不陌生。但我得说句实话——光看PE低就买,你可能会掉坑里。
我在项目中遇到过一只银行股,PE只有4倍,看着便宜得离谱。结果呢?坏账率飙升,PE从4倍变成2倍,股价腰斩。为什么?因为PE是静态的,它反映的是过去,不是未来。
我的经验:估值因子最好做「相对估值」,也就是和行业均值比、和历史分位数比。绝对数值意义不大。比如一个科技公司PE 30倍,看着贵,但如果行业平均是50倍,它反而是便宜的。
常用的估值因子构造方式:
- PE_TTM: 滚动市盈率,用过去12个月净利润
- PB_LF: 市净率,用最新财报净资产
- PS_TTM: 市销率,适合亏损企业
- EV/EBITDA: 企业价值倍数,跨行业比较更靠谱
# 估值因子计算示例
import pandas as pd
def calc_pe_ttm(market_cap, net_profit_ttm):
"""计算滚动市盈率,注意处理负利润"""
pe = market_cap / net_profit_ttm
# 负PE没有意义,设为NaN
pe[net_profit_ttm <= 0] = np.nan
# 极端值截断,我一般用1%和99%分位数
lower = pe.quantile(0.01)
upper = pe.quantile(0.99)
pe = pe.clip(lower, upper)
return pe
2. 成长因子:买的是未来
成长因子,说白了就是看一家公司「跑得快不快」。营收增速、利润增速、分析师预期增速,这些都是成长因子的核心。
但这里有个坑——高成长往往伴随着高估值。我记得2019年有一批科技股,营收增速超过100%,市场给到100倍PE。结果增速一放缓,股价直接腰斩。所以成长因子不能单独用,得和估值因子搭配。
| 成长指标 | 计算方式 | 注意事项 |
|---|---|---|
| 营收增长率 | (本期营收 - 上期营收) / 上期营收 | 剔除并购带来的非内生增长 |
| 净利润增长率 | (本期净利润 - 上期净利润) / 上期净利润 | 注意非经常性损益 |
| ROE增长率 | 杜邦分解后的可持续增长率 | 比单纯利润增速更稳定 |
| 分析师预期调整 | 上调家数 - 下调家数 | 反映市场情绪变化 |
避坑指南:我曾经用单季度营收增速做因子,结果回测效果极好。后来发现是因为金融行业季度波动大,导致因子在季报发布前后有严重的「未来信息泄露」。解决办法是用TTM增速,或者做行业中性化处理。
3. 质量因子:好公司不等于好股票
质量因子衡量的是公司的「体质」。ROE、毛利率、资产负债率、现金流质量,这些指标能告诉你一家公司是不是「优等生」。
但有意思的是,纯质量因子在A股表现并不好。为什么?因为好公司大家都看得到,价格已经反映在股价里了。我做过一个测试,用ROE最高的10%股票构建组合,年化收益还不如沪深300。
质量因子真正的用法是「排雷」——把财务质量差的公司剔除掉,而不是用它来选股。比如毛利率低于行业均值1个标准差以上的公司,直接排除。
# 质量因子排雷示例
def quality_screening(df):
"""多维度质量筛选"""
# 毛利率低于20%的剔除
df = df[df['gross_margin'] > 0.2]
# 资产负债率高于80%的剔除(金融行业除外)
df = df[(df['debt_ratio'] < 0.8) | (df['industry'] == '金融')]
# 经营现金流为负的剔除
df = df[df['operating_cf'] > 0]
return df
4. 动量因子:趋势是你的朋友
动量因子,就是「追涨杀跌」的量化版本。过去3-12个月涨得好的股票,未来一段时间往往继续涨。这个现象在学术界叫「动量效应」。
但我得提醒你,A股的动量效应和美股不太一样。美股是长期动量(12个月)有效,A股是短期动量(1-3个月)更明显。而且A股有严重的「反转效应」——涨多了必跌,跌多了必涨。
关键点:动量因子在A股需要做「动量+反转」的复合处理。我常用的方法是:用过去3个月收益做动量,但剔除过去1个月收益最高的10%股票(防止追高被套)。
5. 波动率因子:低波动异象
波动率因子很有意思。传统金融学认为高风险高收益,但现实中恰恰相反——低波动率的股票长期收益反而更高。这就是著名的「低波动异象」。
为什么会这样?我个人的理解是:高波动股票往往被散户追捧,导致价格虚高;低波动股票没人关注,反而有安全边际。再加上机构投资者有「彩票偏好」,喜欢买高波动股票搏一把,结果反而亏了钱。
波动率因子的构造方式:
- 历史波动率: 过去60天日收益率的标准差
- 特异波动率: 剔除市场因子后的残差波动率
- 下行波动率: 只考虑负收益的波动率
6. 流动性因子:能买能卖才是王道
流动性因子,说白了就是「能不能顺利买卖」。换手率、成交额、买卖价差、Amihud非流动性指标,这些都是衡量流动性的工具。
我在实盘中吃过流动性的亏。有一次策略信号出来,我买了一只小盘股,结果挂单半小时都没成交。等成交了,价格已经滑了2%。这就是流动性风险——你看到的收益,可能被交易成本吃掉一大半。
| 流动性指标 | 含义 | 阈值参考 |
|---|---|---|
| 日均换手率 | 交易活跃度 | < 1% 为低流动性 |
| 日均成交额 | 资金容量 | < 5000万 需谨慎 |
| Amihud指标 | 价格冲击成本 | > 0.1 为高冲击 |
| 买卖价差 | 交易摩擦成本 | > 0.5% 需注意 |
实用技巧:流动性因子最好作为「权重调整」工具,而不是选股标准。比如低流动性股票降低仓位,高流动性股票正常配置。这样既能控制交易成本,又不会错过潜在机会。
嗯,这六大类因子,每一类都有它的脾气。估值因子怕「价值陷阱」,成长因子怕「增速放缓」,质量因子怕「价格透支」,动量因子怕「趋势反转」,波动率因子怕「黑天鹅」,流动性因子怕「交易枯竭」。
做多因子模型,说白了就是把这些因子组合起来,让它们互相弥补、互相制约。下一章咱们就聊聊怎么把这些因子「揉」在一起,构建真正的Alpha信号。