2. 因子体系构建:常见因子分类与计算逻辑
做量化这几年,我最大的体会就是:因子体系就像盖房子的地基。地基没打好,后面再漂亮的策略也是空中楼阁。今天咱们就来聊聊这个地基怎么搭。
2.1 因子分类:四大主流门派
市场上因子成百上千,但说白了,大部分都能归到这几类里。我个人习惯把它们分成四大类:动量、价值、质量、波动率。你想想看,这四类基本覆盖了股票收益的绝大部分来源。
| 因子类别 | 核心逻辑 | 典型指标 | 适用场景 |
|---|---|---|---|
| 动量因子 | 强者恒强,弱者恒弱 | 过去N个月收益率 | 趋势行情 |
| 价值因子 | 便宜才是硬道理 | PE、PB、PS | 估值修复行情 |
| 质量因子 | 好公司才能走得远 | ROE、毛利率、负债率 | 熊市防御 |
| 波动率因子 | 低波动≠低收益 | 历史波动率、最大回撤 | 震荡市 |
2.2 动量因子:趋势是你的朋友
动量因子是我最早接触的因子之一。它的逻辑很简单:过去涨得好的股票,未来一段时间大概率还会继续涨。嗯,这里要注意,动量因子在A股的有效期通常偏短,3-6个月的效果最好。
定义与计算逻辑:
- 价格动量:过去N日的累计收益率。比如过去60个交易日的涨幅。
- 成交量动量:过去N日的平均成交量变化率。量在价先,这个我深有体会。
- 标准化动量:用收益率除以波动率,剔除噪音干扰。
核心公式:
# 价格动量计算
price_momentum = (close_price[-1] / close_price[-N-1]) - 1
# 标准化动量
std_momentum = price_momentum / rolling_std(returns, window=N)
我的经验: 我在项目中遇到过动量因子在急涨急跌行情下频繁失效的情况。后来我加了一个过滤条件——只在大盘趋势向上的时候启用动量因子,效果好了不少。
2.3 价值因子:便宜没好货?不一定
价值因子是经典中的经典。说白了就是找那些被市场低估的股票。但这里有个坑——便宜不一定有价值,可能是真烂。
常见指标:
- 市盈率(PE):股价/每股收益。PE越低越便宜,但要小心亏损股。
- 市净率(PB):股价/每股净资产。适合银行、地产等重资产行业。
- 市销率(PS):股价/每股销售额。适合成长型公司,尤其是还没盈利的。
- 股息率:每股分红/股价。稳定分红的公司通常质地不错。
避坑指南: 我曾经用PE选股,结果选到了一堆周期股的高点。后来才明白,PE要在行业内部对比,跨行业比PE基本没意义。你想想看,银行股PE常年个位数,科技股PE动辄几十倍,能放一起比吗?
2.4 质量因子:好公司自带光环
质量因子关注的是公司基本面。我个人的经验是,质量因子在熊市里特别管用。市场不好的时候,资金会往好公司里扎堆。
核心指标:
- ROE(净资产收益率):净利润/净资产。连续3年ROE>15%的公司,基本不会太差。
- 毛利率:(收入-成本)/收入。毛利率高的公司有定价权。
- 资产负债率:总负债/总资产。负债率太高,风险就大。
- 现金流质量:经营活动现金流/净利润。这个指标能看出利润是不是真金白银。
质量因子综合打分示例:
# 质量因子打分
def quality_score(df):
score = 0
# ROE打分
if df['ROE'] > 0.15:
score += 1
# 毛利率打分
if df['gross_margin'] > 0.4:
score += 1
# 负债率打分
if df['debt_ratio'] < 0.5:
score += 1
# 现金流打分
if df['cashflow_ratio'] > 0.8:
score += 1
return score
2.5 波动率因子:低波动≠低收益
这个因子很有意思。很多人觉得波动大的股票收益高,但实际数据告诉我们——低波动率的股票长期收益反而更好。为什么会这样?因为低波动股票往往被低估,而且持有体验好,拿得住。
计算方式:
- 历史波动率:过去N日收益率的标准差。N通常取20或60。
- 最大回撤:从最高点到最低点的最大跌幅。这个指标能看出风险有多大。
- 贝塔系数:股票与大盘的相关性。贝塔>1说明波动比大盘大。
我的小技巧: 我习惯把波动率因子和其他因子组合使用。比如低波动+高质量,或者低波动+高股息。这种组合在震荡市里特别稳。
2.6 因子体系结构图
下面这张图是我自己整理的因子体系框架。你可以看到,四大因子下面还有细分,而且它们之间会有交叉。比如高质量+低波动的组合,就是经典的防御型策略。
2.7 因子计算的注意事项
最后聊几个实战中容易踩的坑。嗯,这些可都是真金白银换来的教训。
避坑指南:
- 数据对齐:计算因子时一定要用前复权价格。我曾经用后复权算动量,结果全是错的。
- 极端值处理:因子数据里经常有异常值。我习惯用MAD(中位数绝对偏差)来剔除,比用标准差更稳健。
- 行业中性化:不同行业的因子分布差异很大。做多因子模型时,一定要做行业中性化处理。
- 频率匹配:日频因子配日频收益,周频因子配周频收益。混着用会出问题。
我的习惯: 每次构建新因子,我都会先跑一遍回测,看看因子IC(信息系数)的稳定性。IC均值低于0.02的因子,我基本不会用。你想想看,一个因子连预测能力都没有,用它干嘛?
好了,因子体系这块就聊到这儿。记住,因子不是越多越好,关键是理解每个因子背后的逻辑。下一章咱们聊聊怎么把这些因子组合起来,构建真正的多因子模型。
公众号:蓝海资料掘金营,微信deep3321