做投资的人书架上大概率都放着一本《聪明的投资者》。翻过的人不少但真正照着格雷厄姆这套特价股票理论去筛选股票的人少之又少。原因不难理解他当年提出的那些指标放到今天要么数据找不到要么阈值明显对不上再加上A股这种高波动、强风格切换的市场环境死抠原版公式反而容易把自己套进去。但如果换个角度把格雷厄姆理论里的核心逻辑抽出来——安全边际、内在价值、资产与盈利的双重保守估计——再用现代的数据接口、Python脚本、财务质量检验工具重新落地一遍你会发现这套老理论不但没有过时反而能在市场最狂热或最恐慌的时候给你提供一台相对客观的估值坐标仪。这篇文章我把自己这几年用格雷厄姆逻辑做股票筛选的完整流程整理出来包括底层逻辑、指标取舍、数据实现和避坑经验。不推荐任何具体标的只给你一套可以复用的方法。1. 特价股票理论的底层逻辑安全边际为什么仍然成立1.1 什么是特价股票便宜不是标准打折才是我先给“特价股票”做一个更准确的定义。格雷厄姆说的“特价”不是指“股价很便宜”而是指市场价格显著低于这只股票背后保守估计的内在价值。打个比方同样一件衣服地摊杂牌卖50元你觉得便宜品牌专柜正品卖100元你觉得贵但如果是专柜正品打到60元而这件东西实际价值是200元那它才是真正的“特价”。格雷厄姆要找的就是这种“财务价值确定性高、市场价格却只有价值一半甚至更低”的股票。为什么市场会长期存在这样的错价呢以我的观察原因主要有三个第一投资者情绪在恐慌时会把坏消息放大导致资产价格低于清算价值第二小市值和冷门板块长期被机构研究覆盖不足定价效率天然偏低第三公司有利空事件或行业景气度下行资金批量撤离使估值指标被砸到极端区间。这三类机会在A股并不少见问题只在于你敢不敢接、用什么标准去接。1.2 安全边际买入价格与价值之间的缓冲带安全边际是整个理论最核心的概念说白了就一句话买得足够便宜才能承受错误和意外。格雷厄姆的意思不是说你买了便宜货就一定能赚钱而是在你算错估值、公司经营下滑、甚至市场整体杀跌时买入价与价值之间那块余量能帮你少亏甚至不亏。我举一个直观的例子。假设你经过保守测算认为一只股票的内在价值是10元你在6元买入你的安全边际是4元安全边际率40%。如果后来证明你之前测算乐观了10%实际内在价值只有9元那你的持仓仍有不少缓冲反过来如果有人在9.5元买入同样的测算偏差之下他就可能站岗很长时间。安全边际越厚你对未来的容错空间就越大。这也是为什么我一直强调估值测算宁可保守不要激进。1.3 内在价值估算的三种锚资产法、盈利法与格雷厄姆公式格雷厄姆体系里的内在价值并不是精确到小数点后两位的“计算值”而是一个合理的价值区间。实操中我会用三种方式互相印证。第一种是资产法。把公司总资产减去总负债再剔除最容易被高估的无形资产和商誉得到每股的“净资产底价”。如果股价比这个清算价值还低那就等于市场在用“倒闭价”交易。第二种是盈利法。用公司过去5到10年的平均盈利剔除异常年份除以一个合理的资本化率。比如一间稳定的公司你要求10%的回报率相当于给10倍市盈率盈利法就会给出一个对应价格。第三种是格雷厄姆增长公式V EPS × (8.5 2g)其中EPS是每股收益g是未来5到7年预期增长率。举个例子EPS为1元g为5%则V 1 × (8.5 10) 18.5元。注意这个公式里的g不能乱填超过15%时结果会失控最好只在5%到10%之间使用。这三种方法算出来的结果可能差异很大我的习惯是取三者的下限或者中低值再在这个基础上要求至少30%的折价才会纳入观察池。宁可错过机会也不能让自己站在悬崖边上。2. 经典筛选指标的继承与修正哪些能用、哪些要改2.1 格雷厄姆原版选股标准逐条回顾格雷厄姆在《聪明的投资者》里给防御型投资者提出了七条选股标准。我整理成表格方便对照指标原始标准核心意图规模年销售额不低于1亿美元当时排除小盘、流动性差的标的财务状况流动比率不低于2确保短期偿债能力充足盈利稳定性近10年每年都有盈利要求经营具备持续性股息记录连续20年派发股息验证股东回报的长期承诺盈利增长近10年每股收益增长至少33%排除停滞不前的公司市盈率不高于15倍避免为乐观预期支付过高价格市净率不高于1.5倍防止买贵了账面资产同时他还有一个著名的组合约束市盈率与市净率的乘积不超过22.5。这个数字正是15 × 1.5的来由。从数学上看如果某只股票PE为15、PB为1.5乘积正好是22.5如果PE只有10倍PB最高可以到2.25倍相当于放宽了资产端的约束。2.2 至今仍好用的指标盈利稳定性与股息记录先说结论盈利稳定性与股息记录这两个维度到今天依然是极其有效的质量过滤器。一家能够连续多年盈利、分红从不中断的公司大概率商业模式扎实、现金流健康、治理结构相对稳定。A股里能连续5年稳定分红的企业数量本身就不多以此作为初筛条件能瞬间过滤掉大量讲故事的公司。流动比率对制造业、批发零售这类重存货行业依然有意义。但这个指标对银行、保险、房地产等强杠杆行业基本无效因为这些行业天然负债率高用流动比率去卡会把好公司全部排除掉。所以我会在具体行业里灵活对待而不是一刀切。2.3 必须调整的指标规模、市盈率与市净率的现代版首先规模标准必须改。以现在的市值口径A股里我会选“总市值50亿到300亿”作为观察区间。50亿以下退市风险、操纵风险、流动性风险都不小300亿以上已经是大票机构覆盖充分被甩出特价的机会少。这个区间跟格雷厄姆当时的标准不完全对应但精神一致要有安全边际又要能买得进去、出得来。其次市盈率15倍、市净率1.5倍的绝对阈值在A股要按行业做分层。A股银行股PE普遍在5到8倍PB经常在0.5到0.815倍PE的银行反而算贵而消费类股票PE长期在20倍以上你强行用15倍去卡几乎永远选不出消费白马。所以更合理的做法是看行业分位数选估值处于自身历史分位后30%、且绝对PE不超过行业历史中位数的标的。第三股息连续20年这个条件太苛刻A股能连续20年分红且不间断的公司屈指可数。我会放宽为“近5年至少3年有现金分红且不存在连续亏损”。这样既考察了分红意愿又不至于把太多正常公司排除在外。2.4 格雷厄姆数一个更现代的快速温度计如果你觉得上面一整套标准太复杂可以先从一个简化指标入手格雷厄姆数Graham Number。它本质上是PE15、PB1.5这两条线叠加后的合流约束Graham Number √(22.5 × EPS × BVPS)。我来演示一下某公司EPS为0.8元BVPS为5元则Graham Number √(22.5 × 0.8 × 5) √90 ≈ 9.49元。如果当前股价5元说明价格只有保守合理价的一半左右明显偏低如果股价12元就已经超过这个理论红线。当然格雷厄姆数也有明显的时代局限。它没有考虑资产负债表的债务结构异常、没有区分非经常性损益、更不适用于高成长型公司。我的用法是把它当作温度计——超过它说明偏贵低于它说明有进入观察区的潜力但最终要不要买必须回到财报去做定性分析。3. 现代化筛选系统搭建从数据源到Python初筛3.1 免费数据源够用吗AKShare与Tushare Pro如何选要把理论落地第一步是解决数据问题。我平时主要用三类数据源免费的AKShare和Tushare Pro适合个人研究权威稳定的Wind、Choice适合机构或者资金量大的个人投资者。AKShare胜在免Token、上手快行情、财务、分红都能拉但接口偶尔会调整所以代码里我会写清楚版本与日期。Tushare Pro需要积分机制但数据稳定性和字段完整性更好适合做长期历史回测。我的建议是如果你只是做初筛AKShare就够了如果要建回测库或做精细化的财务数据清洗Tushare Pro更合适。3.2 先统一口径PE、PB、市值这些字段最容易出错筛选之前先把字段列清楚。我常用的初始字段包括代码、名称、最新价、总市值、PE(TTM)、PB、股息率、近5年归母净利润、近5年经营现金流、流动比率、资产负债率。这里有两个口径特别容易踩坑。第一个是PE口径。行情软件里默认的“市盈率动态”是按最近季度年化计算的容易在周期底部失真我建议统一用PE(TTM)也就是过去四个季度归母净利润加总后计算的市盈率并且要优先用扣非净利润。第二个是总市值口径。A股有总市值与流通市值之分小盘股的流通盘小容易被少量资金拉起如果你买的是流通市值很低的冷门标的实际进出成本会很高。所以流动性过滤项里我一般会加一条“日均成交额不低于3000万元”。3.3 用Python把初筛流程跑起来下面我用AKShare演示一个最小可行的初筛脚本。接口版本可能随时间变化但代码逻辑可以直接复用。import akshare as ak import pandas as pd # 1. 拉取A股全市场实时行情快照 spot ak.stock_zh_a_spot_em() # 2. 提取需要的字段并统一重命名 df spot[[代码, 名称, 最新价, 总市值, 市盈率-动态, 市净率]].copy() df.columns [code, name, price, mktcap, pe_dynamic, pb] # 3. 将字符串格式的市值转为数值 df[mktcap] pd.to_numeric(df[mktcap], errorscoerce) df[pe_dynamic] pd.to_numeric(df[pe_dynamic], errorscoerce) df[pb] pd.to_numeric(df[pb], errorscoerce) # 4. 初筛市值区间 低估值约束 filtered df[ (df[mktcap] 50_0000_0000) # 总市值 50亿 (df[mktcap] 300_0000_0000) # 总市值 300亿 (df[pe_dynamic] 0) (df[pe_dynamic] 15) (df[pb] 0) (df[pb] 1.5) ].sort_values(pb, ascendingTrue) # 5. 输出前20名 print(filtered.head(20))需要说明的是这个脚本只做了行情层的初筛还没有合并财务数据。完整的流程应该是先跑这个脚本拿到候选池再借助AKShare的财务摘要接口逐只拉取净利润、现金流、分红记录最后把前面讲的质量校验条件全部套上去。我通常把整个过程封装成一个函数每周跑一次输出的CSV用Excel打开复核效率比手动翻行情软件高出太多。3.4 三层筛选结构流动性、估值与质量我把筛选分成三层。第一层是流动性防火墙总市值50亿以上、日均成交额3000万以上、非ST。第二层是估值初筛PE、PB、股息率满足基本阈值。第三层是质量复筛连续盈利年限、经营现金流净额为正、股息记录、财务体检无重大瑕疵。之所以分三层是因为估值指标必须建立在“这家公司是活的、健康的”基础上。一个连续四年亏损的公司PE是负值软件里显示为“—”你用PE大于0过滤后就把它们排除了这是对的但一个刚刚扭亏的公司PE可能是个很大的数也不应该入选。质量复筛的意义就是把这些财务细节拉出来逐一核实避免仅仅因为“PE看起来低”就冲动买入。4. 实操案例在A股市场跑一遍特价策略4.1 筛选条件怎么设从基础阈值到极端行情处理为了让你更直观地看到这套理论是怎么落地的我以某交易日为例演示全过程。先声明以下数据仅为演示方法论不构成任何投资建议。具体标的名称我都用“样本股”替代结论也仅是当时的快照请你关注方法本身。我设定这样一组条件总市值50亿到300亿元。PE扣非TTM0到15倍。PB0到1.5倍。股息率不低于2%。经营质量近5年归母净利润均为正最新年度经营现金流净额大于0。为什么把股息率设为2%一方面延续格雷厄姆“要有长期分红记录”的要求另一方面在A股2%已经是整个市场前三分之一水平的股息率了能同时筛掉大量纯题材公司。如果你遇到极端年份候选池被股息率标准筛空了我会建议先不动这个条件而是降级去看“近3年分红记录”——空仓也是一种选择不必强行买入。4.2 筛选结果长什么样先看估值更要看行业按上述条件跑完之后候选池一般不会太多尤其在行情偏热的时候甚至可能少到几乎没有。这时我就会把门槛放宽一级比如把PE从15倍放宽到18倍、PB从1.5倍放宽到1.8倍再看结果。以下为演示范例数据表格序号名称行业总市值(亿)PEPB股息率毛利率ROE1样本A制造业889.40.93.1%28%9.2%2样本B基建13212.11.12.4%15%7.8%3样本C煤炭1758.61.04.2%32%11.5%4样本D医药商业7613.21.42.2%17%8.9%看到这个结果你的第一反应不应该是“这些都能买”而应该拆成两个问题第一为什么它们会被市场定价到这么低第二这里面有没有真正的特价机会还是各有各的瑕疵这时候就需要进入下一步做财务体检。4.3 打开财报做体检四步排雷法把候选池拿到手之后我不会直接看K线图而是打开近三年的三张报表按以下顺序排雷。第一步看扣非净利润与净利润的差距。如果一家公司每年利润都靠政府补助或变卖资产撑住扣非后是亏损这类“纸面盈利”要直接剔除。第二步看经营现金流净额与净利润的比值。连续多年低于0.7说明利润没有真金白银流入可能是应收账款堆积也可能是存货跌价正在酝酿。第三步看资产负债表结构。有息负债率如果超过60%同时货币资金远小于短期借款碰到信用收紧会很难受。第四步看商誉占净资产的比例超过30%就要格外小心商誉减值往往是价值陷阱的引爆点。这个体检过程用不了多长时间我用Excel模板把三年财务数据对齐后一眼就能看出趋势。真正让我决定放弃的往往不是某一个指标差而是多个指标同时变差利润下滑、现金流恶化、负债上升、分红削减四件事同时发生再便宜的估值我都不敢碰。5. 价值陷阱识别与避坑清单便宜货不等于好货5.1 低估值为什么常常是陷阱市场不傻格雷厄姆理论在现代市场最容易受质疑的点就是价值陷阱股价便宜但便宜有便宜的道理——市场并不是瞎子低估值持续存在往往意味着资产质量在恶化。举几个典型场景。传统百货和纸媒在十年前PE、PB都低得惊人但电商与移动互联网重塑了行业格局这些公司的净资产在持续缩水看起来“便宜”实则“贵”。地产链条上的部分公司同样如此账面净资产还在但土地储备的变现价值可能远低于账面值负债又高一旦销售端持续走弱净资产会快速蒸发。低PE低PB在这里不是特价而是市场对“资产继续减值”的合理定价。5.2 快速排雷的六个财务信号结合我的实操列出六个高频危险信号供你逐项检查经营性现金流连续两年以上为负或者长期低于净利润的60%。应收账款同比增速连续高于营业收入增速说明收入可能是“赊”出来的。存货周转天数一年比一年长说明产品开始卖不动了。短期借款持续攀升同时货币资金不断下降这是资金链紧张的前兆。资产减值损失每年都“意外”出现且金额巨大说明历史报表利润可能虚高。审计意见不是标准无保留或者频繁更换会计师事务所这是最严重的红旗警告。这六个信号不需要全部踩中才走只要命中两条以上我就会默认放弃不再去猜“会不会反转”。5.3 用Piotroski F-Score给财务质量打分在市场越发复杂的今天单靠格雷厄姆原始指标已经不够用。我建议把Piotroski分数作为质量筛选的搭档。这个方法用9个财务信号给企业打分分数越高说明基本面的“身体状态”越好。九个信号分为三组。第一组是盈利能力ROA为正、经营现金流为正、ROA改善、应计质量经营现金流大于净利润第二组是杠杆和流动性资产负债率下降、流动比率改善、未增发新股第三组是运营效率毛利率提升、资产周转率提升。最后总分为0到9分8到9分为高质量低于5分需要提高警惕。用我做筛选时的习惯候选池里的股票F-Score达到8分以上优先研究6到7分可以纳入观察5分以下直接剥离不管估值有多低。把格雷厄姆的“便宜”标准与Piotroski的“质量”标准结合起来能过滤掉相当一部分价值陷阱。5.4 行业差异处理别把银行和消费混在一起筛再补充一个实操细节估值指标在不同行业之间没有可比性。银行的PE、PB天然低煤炭钢铁是强周期消费成长的估值中枢又高。如果全市场混在一锅里筛最后往往就剩下银行和地产。我的处理方法是先分类再过滤把金融、地产、能源、制造业、消费、医药等大类拆开分别用行业适配的估值分位数做初筛。比如筛选银行股时我会看不良率、拨备覆盖率、净息差而不是硬套流动比率筛选煤炭股时则要看煤价周期所处的阶段PE低很可能只是周期顶部的假象。这样处理会增加一些工作量却能显著减少误伤。6. 常见问题速查与我的几点实操体会6.1 常见问题速查表这一节做一张速查表把常见问题与处理建议直接列出来方便你复盘时对照现象可能原因我的处理方式筛出来全是银行地产这类行业ROE结构拉低了PB、PE中枢分类筛选金融地产单独用行业指标标的估值极低但股价阴跌不止市场在为其资产持续减值定价检查现金流、应收、存货、负债命中两条危险信号即放弃同一只股票不同数据源PE差异大每股收益口径、总股本或扣非口径不一致统一使用扣非后TTM口径定期核对财报披露回测收益很漂亮实盘却亏损忽略了流动性、滑点以及分散度不足增加日均成交额下限单只股票仓位上限不超过10%用原版指标选出某只股票后财报暴雷数据滞后或公司在上一年度报表中隐藏风险关注季度财报与重大事项公告在雷区信号出现时第一时间复核这张表不能解决所有问题但能帮你省下不少复盘时间。出现异常时先按表格排查而不是急着加仓或者割肉。6.2 参数周期与再平衡左侧策略怎么拿得住格雷厄姆式筛选的策略逻辑是偏左侧的买入之后股价不一定马上涨甚至可能继续下跌一段时间。我的应对方式是定期重新跑一遍筛选比如每月或每季度一次把基本面恶化的个股踢出池子把新出现的、符合特价条件的标的纳进来形成一个简单的再平衡纪律。不要天天看盘做调整情绪很容易在频繁操作中失控。我个人的做法是用每月最后一个周末跑一遍脚本输出新的候选池再手动检查前几名替换掉不再符合条件的持仓。这个频率不需要太高高频操作在低估值策略里往往只会增加交易成本并不会显著提高收益。6.3 最后几句实在话这套方法在我个人实践里最大的价值不是替我抓到过什么牛股而是让我在无数次要追高买进的冲动时刻能够冷静问一句现在的价格离它的保守价值到底还有多少价差如果没有价差安全边际为零那它涨得再好也与我无关。我承认格雷厄姆特价股票理论在现代市场并不能每次都对被价值陷阱咬伤的经历我也有过。但把筛选标准、质量复核、行业判断这三件事做扎实之后至少可以让你在市场情绪极端的时候有一份可以依赖的清单而不是凭感觉做决定。最后分享一个小技巧把每次筛选出的候选池和当时放弃的原因都记录下来隔几个月回头看你会发现自己的判断体系在一点点变清晰。先看懂生意再谈便宜顺序千万别反了。
