【量化投资从入门到精通 #46】价值投资也能量化?Greenblatt魔法公式,挑便宜又最能赚的公司
本系列进度:#01–#45 ✅ #46 ✅ 余 #47 待数据补全后补齐(系列收官在即) 专题阶。前几篇用了不少"因子",这一篇回到最朴素的价值投资灵魂一问:怎么用财报,挑出"又便宜、又能赚"的公司? 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),补全后即可实跑。
七、合规收尾
本文为量化方法教学,代码示例使用合成示意数据,不构成投资建议,不承诺收益。投资有风险,入市需谨慎。
想用真实财报跑魔法公式?麦蕊智数的财报基本面数据补全后(需求 R1),同一套 EY/ROC 排名算法即可无缝接入;实时快照与历史 K 已稳定可用,免费版即可起步、证书即取即用。配套 Demo(含 main.py + RUN.md)见 麦蕊智数 www.mairuiapi.com 站内「API 文档」与「证书获取」(免费版 500 次/日,邮箱验证即领)。



