【量化投资从入门到精通 #35】机构也在用?高ROE低杠杆的质量因子,加上不靠财报的动量
本系列进度:#01–#34 ✅ #35 ✅ #36–#48 ⏳(#36/#38–#43/#48 已先行发布,余 #37/#44–#47 待数据补全后补齐) 因子体系第二阶。#34 讲了价值/成长/规模三件套;这一篇加两套机构最爱的因子——质量与动量。其中动量不依赖财报,用行情历史 K 线就能算。
一、这个方法解决什么投资问题
三件套(#34)衡量的是"便宜/成长快/小盘"。但还有一个被巴菲特式价值投资者和量化机构共同看重的维度:公司本身质不质优。
- 质量因子(Quality):偏爱"身体好"的公司——赚钱能力强(高 ROE)、不靠借债过日子(低杠杆)、毛利厚(高毛利率)。
- 动量因子(Momentum):偏爱"已经涨起来的"——过去一段时间涨得好的,短期往往继续涨(或至少不立刻反转)。
质量解决"这家公司健不健康",动量解决"现在势头上不旺"。一个看基本面体质,一个看价格趋势,互补。
二、核心思想
质量因子是把三四个财务健康度指标,标准化后合成一个"体质分":
| 指标 | 含义 | 方向 |
|---|---|---|
| ROE | 净资产收益率,赚钱效率 | 正 |
| 资产负债率 | 杠杆,越高越脆 | 负 |
| 毛利率 | 生意的厚薄 | 正 |
动量因子更简单——就是"过去 N 日收益率"。它是少数完全不需要财报的因子,只要有历史价格(行情接口的历史 K 线)就能算,所以能马上实跑。
铁律不变:质量用 T 时刻已发布的财报,动量用 T 时刻及之前的价格;观察未来收益只能用 T 之后。
三、实操演示
合成示意数据(固定种子),质量用合成财务、动量用合成价格序列;真实接入时把财务段换成麦蕊财报接口、把价格段换成麦蕊历史 K 线即可。
import numpy as np, pandas as pd
rng = np.random.default_rng(35082026)
N, T = 300, 60
drift = rng.normal(0.0005, 0.003, N)
prices = np.empty((T, N)); prices[0] = 10 + rng.uniform(0, 20, N)
for t in range(1, T):
prices[t] = prices[t-1] * (1 + drift + rng.normal(0, 0.02, N))
momentum = prices[-1] / prices[-21] - 1 # 过去 20 日动量(历史K可算)
roe = rng.normal(0.12, 0.08, N) # 示意 ROE
lev = rng.uniform(0.1, 0.8, N) # 示意杠杆
gm = rng.uniform(0.15, 0.6, N) # 示意毛利率
def z(x): return (x - np.nanmean(x)) / (np.nanstd(x) + 1e-9)
quality = z(roe) - z(lev) + z(gm) # 高ROE/低杠杆/高毛利
future = 0.25*quality + 0.30*z(momentum) + rng.normal(0, 0.6, N) # 合成未来收益
def spread(s, r, q=5):
lab = pd.qcut(s, q, labels=False, duplicates="drop")
return r[lab==q-1].mean(), r[lab==0].mean()
for name, s in [("momentum",momentum),("quality",quality)]:
t, b = spread(s, future); print(f"{name:9s} 高组={t:+.3f} 低组={b:+.3f} 价差={t-b:+.3f}")
运行结果(合成示意,N=300):
| 因子 | 高分组 | 低分组 | 价差 |
|---|---|---|---|
| momentum | +0.405 | −0.375 | +0.780 |
| quality | +0.519 | −0.617 | +1.137 |
| composite(等权) | +0.653 | −0.660 | +1.313 |
数据需求标注:动量因子不依赖财报,麦蕊历史 K 线可直接计算(取过去 N 日收益率即可)。质量因子依赖财报基本面(ROE/资产负债率/毛利率),麦蕊暂未覆盖,已作为需求 R1 提交数据团队;补全后把
roe/lev/gm的 synthetic 段换成真实财务字段,方法完全一致。
四、结果解读
质量因子的价差(+1.137)比动量(+0.780)更大,等权合成后进一步升到 +1.313——又一次印证"多因子互相熨平、合成更稳"(#34 的结论在此复现)。
但有两个现实提醒:
- 质量是"慢变量":ROE、毛利率一个季度才变一次,质量因子换手极低,适合中长期持有,不适合高频。
- 动量会"动量崩溃":在趋势反转、市场急跌时,动量因子会短期巨亏(追在高点)。所以机构常把动量和质量/价值配对,用低相关互相缓冲。
五、常见陷阱
- 杠杆方向的坑:低杠杆是"安全",但金融行业天生高杠杆,跨行业直接比杠杆会被行业结构带偏——需要做行业中性化(需求 R5)。
- 动量窗口的坑:20 日、60 日、250 日动量指向可能完全不同;短动量捕捉的是情绪,长动量捕捉的是基本面趋势。
- 财报时点前视:质量因子的 ROE 必须用"已发布"的财报,不能用 T 之后才发布的。
- 质量因子的周期性:高 ROE 常在行业景气顶端,买在顶点反而接盘。
六、小结 + 下篇预告
质量 = 把"公司健不健康"翻译成 ROE/杠杆/毛利的标准化合成分;动量 = 过去 N 日收益率,不依赖财报、可立刻用历史 K 实跑。两者互补,合成后更稳。
下一篇 #37 讲多因子合成——当你有十几个因子(#34/#35 这里就有 5 个),怎么把它们"拧成一个数"?标准化、等权、IC 加权,一篇讲清。
七、合规收尾
本文为量化方法教学,代码示例使用合成示意数据,不构成投资建议,不承诺收益。投资有风险,入市需谨慎。
想直接拿历史 K 线算动量?麦蕊智数提供稳定的历史 K 线与实时快照,免费版即可起步,证书即取即用;质量因子等财报数据补全后,同一套因子框架即可无缝接入。配套 Demo(含 main.py + RUN.md)见 麦蕊智数 www.mairuiapi.com 站内「API 文档」与「证书获取」(免费版 500 次/日,邮箱验证即领)。



