news 2026/9/5 9:53:25

【量化投资从入门到精通 #46】价值投资也能量化?Greenblatt魔法公式,挑便宜又最能赚的公司

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【量化投资从入门到精通 #46】价值投资也能量化?Greenblatt魔法公式,挑便宜又最能赚的公司

专题阶。前几篇用了不少"因子",这一篇回到最朴素的价值投资灵魂一问:怎么用财报,挑出"又便宜、又能赚"的公司?Greenblatt 的"魔法公式"把这件事压缩成两个排名。

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

价值投资听起来很"艺术"——读财报、懂生意、等低估。但 Joel Greenblatt 在《股市稳赚》里把它量化成两个数字

  1. 这家公司资本回报率高不高?(赚钱效率高不高)
  2. 买它贵不贵?(收益率高不高)

两个都好的公司,长期跑赢市场。问题是:怎么"同时"挑出两者都好的?答案是——分别排名、再加起来

二、核心思想:两个排名拧成一个分

魔法公式只依赖两张表的数据:

指标公式越好=
收益率 EYEBIT ÷ 企业价值越高(越便宜)
资本回报率 ROCEBIT ÷(净营运资本 + 净固定资产)越高(越能赚)

做法是:

  1. 对所有股票,按EY 从高到低排名(第 1 名最便宜);
  2. ROC 从高到低排名(第 1 名最能赚);
  3. 两个排名相加= 魔法综合分;
  4. 综合分最低的(最便宜 ∩ 最能赚)。

为什么相加而不是相乘?排名相加对极端值更稳健,且天然做了"跨指标中性"——不会因为某个指标量纲大就一家独大。

三、实操演示

合成示意财报(200 只,固定种子):算 EY/ROC,分别排名相加,挑综合分最低的前 5。

importnumpyasnp,pandasaspd rng=np.random.default_rng(46082026)N=200ebit=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):

EYROCrank_EYrank_ROCmagic_score
1.3380.54731316
0.7610.64681018
1.4710.51221618
1.0380.49341721
0.4980.624191130

数据需求标注: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),补全后即可实跑。

免责声明

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/5 9:48:58

如何阻止Telegram短信验证码骚扰:权限管理与安全防护指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/5 9:48:15

GPU服务器实战:CUDA环境配置、PyTorch对接与DCGM监控

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/5 9:47:10

多个AI编程助手同时跑?用tmux和git worktree打造可控终端环境

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/5 9:45:26

Unity动态引擎声效开发:基于GE90涡扇发动机的3D音频实现方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/5 9:42:37

大模型服务从实验到生产的工程化挑战与解决方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华