← 返回博客列表

量化投资从入门到精通

【量化投资从入门到精通 #34】便宜、成长还是小盘?价值、成长、规模,风格因子的教科书三件套

2026年08月22日 17:04 · 麦蕊智数 MyData

本系列进度:#01–#33 ✅ #34 ✅ #35–#48 ⏳(其中 #36/#38–#43/#48 已先行发布,余 #35/#37/#44–#47 待数据补全后补齐) 进入因子体系第一阶。#33 把"好公司"翻译成了可排序的数;这一篇给你三把最经典、也最被机构验证过的"尺子"——价值、成长、规模。

一、这个方法解决什么投资问题

"买便宜的,还是买涨得快的,还是买小盘股?"——这三类偏好背后,是量化里最古老的三个风格因子(style factor)

  • 价值(Value):偏爱"便宜"——低 PE、低 PB 的公司。
  • 成长(Growth):偏爱"长得快"——营收、利润高速扩张的公司。
  • 规模(Size):偏爱"小盘"——市值小、弹性大的公司。

它们被称为"教科书三件套",不是因为复杂,而是因为长期、跨市场、被无数论文重复验证过。你不需要押注某一个,但必须理解它们各自在赚什么钱、又会踩什么坑。这一篇就用可计算的数字,把这三把尺子造出来。

二、核心思想:把"偏好"翻译成横截面的数

和 #33 一样,因子是同一天、所有股票横截面上的排序,不是单只股票的时间序列。三件套的构造逻辑极简:

因子 想捕捉的偏好 用的数字 方向
价值 便宜 PE、PB(越低越好) 取负号
成长 扩张快 营收增速、利润增速
规模 小盘弹性 总市值(越小越好) 取负号

关键两步:

  1. 标准化(z-score):PE 是 10 还是 1000 量纲不同,先减均值除标准差,让所有因子在同一把尺上。
  2. 方向对齐:把"越好越高"统一成"分数越高越好",方便后面相加合成。

铁律不变:打分只能用当下/历史数据,观察未来收益只能用 T 之后的数据,否则前视偏差(#04)会把噪声当成信号。

三、实操演示

下面用 Python 把三件套造出来并做分组检验。数据为合成示意(固定随机种子,可复现),仅用于演示流程;真实接入时把 synthetic 段换成麦蕊行情/财务接口即可。

import numpy as np, pandas as pd
rng = np.random.default_rng(20260817)
N = 300
pe   = np.exp(rng.normal(3.2, 0.6, N))   # 市盈率(示意)
pb   = np.exp(rng.normal(0.6, 0.5, N))   # 市净率(示意)
rev_g = rng.normal(0.12, 0.18, N)        # 营收同比(示意)
eps_g = rng.normal(0.10, 0.22, N)        # 利润同比(示意)
mcap = np.exp(rng.normal(23.0, 1.1, N))  # 总市值(亿元)(示意)

def z(x): return (x - np.nanmean(x)) / (np.nanstd(x) + 1e-9)
value  = -z(np.log(pe)) - z(np.log(pb))   # 低 PE/PB 得分高
growth =  z(rev_g) + z(eps_g)             # 增速高得分高
size   = -z(np.log(mcap))                 # 小市值得分高

# 合成"未来收益":与三因子正相关 + 噪声(仅演示分组流程)
future = 0.30*value + 0.20*growth + 0.12*size + rng.normal(0, 0.6, N)

# 分组检验:按单因子 5 等分,看最高组 vs 最低组
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 [("value",value),("growth",growth),("size",size)]:
    t, b = spread(s, future)
    print(f"{name:7s} 高组={t:+.3f} 低组={b:+.3f} 价差={t-b:+.3f}")

运行结果(合成示意数据,N=300):

因子 高分组未来收益 低分组 多空价差
value +0.738 −0.598 +1.336
growth +0.413 −0.415 +0.828
size +0.356 −0.121 +0.476

把三件套等权合成一个数后再分组:

合成因子 高分组 低分组 价差
composite +0.797 −0.752 +1.550

数据需求标注:价值/成长依赖财报基本面(PE/PB/增速),规模可用麦蕊实时快照提供的「总市值」字段(zsz/lt)直接计算,无需新数据。财报类数据麦蕊暂未覆盖的部分,已作为需求 R1 提交数据团队补全;补全后即可用真实财务替换上述 synthetic 段,方法完全一致。

四、结果解读

三件套各自的多空价差都为正,说明"在这个示意样本里,便宜/成长快/小盘"相对"贵/慢/大盘"都有正溢价——这正是三件套被写进教科书的原因。

更关键的是最后一行:等权合成后的价差(+1.550)大于任一单因子。这是因子投资的日常:单因子容易受某一阶段风格拖累,多因子组合能互相熨平,这也是 #37 要展开讲的主题。

但务必泼冷水:上面所有数字都是合成示意,只用来演示"打分→分组→看未来→算价差"的标准动作。真实市场里:

  • 价值因子在成长股牛市(如 2020)会长期跑输;
  • 小盘因子在流动性收紧时会剧烈回撤;
  • 成长因子对"增速不及预期"极其敏感。

因子有效,但有效性是轮动的、有条件的。

五、常见陷阱

  • 把某一阶段的方向当永恒:价值/成长/规模会周期性轮动,没有永远赢的风格。
  • 忽略标准化:PE 和营收增速量纲差上万倍,不 z-score 直接相加,大数会淹没小数。
  • 前视偏差:算 PE 用的是 T 时刻的价和 T 时刻的财报,但财报是 T 之前发布的——必须对齐"财报发布日",不能用未来财报。
  • 小样本幻觉:N=300 都未必稳,实盘至少几百只、滚动几十期截面才有统计意义。
  • 规模因子的流动性黑洞:小盘流动性差,回测赚的价差,实盘可能变不成成交价(#32 讲过实盘与回测的鸿沟)。

六、小结 + 下篇预告

风格因子三件套 = 把"便宜/成长快/小盘"三种偏好翻译成横截面可排序的数,经 z-score 标准化、方向对齐后,既能单因子检验,也能等权合成。合成因子往往比单因子更稳。

下一篇 #35 讲质量与动量——机构也在用的另外两套套路(高 ROE/低杠杆的质量因子,以及用历史 K 线就能算的价格动量),其中动量因子不依赖财报,可以马上用麦蕊历史 K 线实跑。

七、合规收尾

本文为量化方法教学,代码示例使用合成示意数据,不构成投资建议,不承诺收益。投资有风险,入市需谨慎。

想亲手跑通上面的因子流水?麦蕊智数提供稳定的实时快照与历史 K 线(规模因子可直接取「总市值」,动量因子可直接取历史 K),免费版即可起步,证书即取即用。配套 Demo(含 main.py + RUN.md)见 麦蕊智数 www.mairuiapi.com 站内「API 文档」与「证书获取」(免费版 500 次/日,邮箱验证即领)。

标签: Python量化 量化投资从入门到精通
QQ 客服 3826425416 咨询时请提供证书号或订单号,便于快速处理
咨询