【量化投资从入门到精通 #46】价值投资也能量化?Greenblatt魔法公式,挑便宜又最能赚的公司
专题阶。前几篇用了不少"因子",这一篇回到最朴素的价值投资灵魂一问:怎么用财报,挑出"又便宜、又能赚"的公司? Greenblatt 的"魔法公式"把这件事压缩成两个排名。
一、这个方法解决什么投资问题
价值投资听起来很"艺术"——读财报、懂生意、等低估。但 Joel Greenblatt 在《股市稳赚》里把它量化成两个数字:
- 这家公司资本回报率高不高?(赚钱效率高不高)
- 买它贵不贵?(收益率高不高)
两个都好的公司,长期跑赢市场。问题是:怎么"同时"挑出两者都好的?答案是——分别排名、再加起来。
二、核心思想:两个排名拧成一个分
魔法公式只依赖两张表的数据:
指标 公式 越好=
收益率 EY EBIT ÷ 企业价值 越高(越便宜)
资本回报率 ROC EBIT ÷(净营运资本 + 净固定资产) 越高(越能赚)
做法是:
- 对所有股票,按 EY 从高到低排名(第 1 名最便宜);
- 按 ROC 从高到低排名(第 1 名最能赚);
- 两个排名相加 = 魔法综合分;
- 选综合分最低的(最便宜 ∩ 最能赚)。
为什么相加而不是相乘?排名相加对极端值更稳健,且天然做了"跨指标中性"——不会因为某个指标量纲大就一家独大。
三、实操演示
合成示意财报(200 只,固定种子):算 EY/ROC,分别排名相加,挑综合分最低的前 5。
import numpy as np, pandas as pd
rng = np.random.default_rng(46082026)
N = 200
ebit = rng.uniform(5, 80, N); ev = rng.uniform(40, 600, N)
nwc = rng.uniform(10, 150, N); ppe = rng.uniform(20, 200, N)
df = pd.DataFrame({"EBIT": ebit, "EV": ev, "NWC": nwc, "PPE": ppe})
df["EY"] = df["EBIT"] / df["EV"]
df["ROC"] = df["EBIT"] / (df["NWC"] + df["PPE"])
df["rank_EY"] = df["EY"].rank(ascending=False)
df["rank_ROC"] = df["ROC"].rank(ascending=False)
df["magic_score"] = df["rank_EY"] + df["rank_ROC"] # 越低越好
print(df.sort_values("magic_score").head(5)[["EY","ROC","rank_EY","rank_ROC","magic_score"]].round(3))
运行结果(合成示意,N=200,综合分最低的前 5):
EY ROC rank_EY rank_ROC magic_score
1.338 0.547 3 13 16
0.761 0.646 8 10 18
1.471 0.512 2 16 18
1.038 0.493 4 17 21
0.498 0.624 19 11 30
数据需求标注:EBIT/企业价值/净营运资本/固定资产/PE 等财报基本面属需求 R1,行情服务补全后即可用真实财务替换 synthetic 段,魔法公式算法完全一致。本 demo 用合成数据演示方法。
四、结果解读
上榜的公司,EY 和 ROC 两个排名都靠前(比如第 1 行 EY 排第 3、ROC 排第 13,综合 16)。这正是魔法公式的精髓:不要求单项第一,要求两项都好。
有趣的一点:魔法公式综合分和"单看 PE"的相关系数≈ −0.002(几乎为零)。说明魔法公式捕捉的是 PE 之外的"盈利能力"维度——它挑的不只是便宜,更是"便宜且真能赚"。纯看 PE 会漏掉那些"不便宜但极能赚"、或"便宜但平庸"的公司。
五、常见陷阱
- 财务质量陷阱:EBIT、企业价值都要用"干净"的财报;商誉、递延税、少数股东权益处理不当会扭曲 EY/ROC。
- 幸存者偏差:只测当前还在上市的公司,魔法公式的历史回测会因此虚高(#04)。
- 小市值失真:小公司 EY/ROC 容易因一笔大额资产波动而极端,需要市值过滤。
- 周期性行业:景气顶端 ROC 虚高、景气底部 EY 虚高,要在行业中性后看。
- 不择时持有:魔法公式讲究"长期持有整篮",频繁换手会被资本利得税和交易成本吃掉超额(#31)。
六、小结 + 下篇预告
基本面量化 ≠ 拍脑袋价值投资。魔法公式把"便宜 + 能赚"翻译成 EY、ROC 两个排名,相加成综合分,挑最低者——一个可复制、可回测的价值投资框架。
最后一篇 #47 讲AI 量化入门——用机器学习给因子打分,以及它的边界与风险(过拟合、未来函数、不可解释)。依赖因子特征工程(需求 R4),补全后即可实跑。
免责声明
本文为量化方法教学,代码示例使用合成示意数据,不构成投资建议,不承诺收益。投资有风险,入市需谨慎。

浙公网安备 33010602011771号