基于王星著,《那些滚雪球的人》
《那些滚雪球的人》记录了成功的中国投资者,并提炼出他们的方法为可操作的框架。标题引用了巴菲特的比喻:"人生就像滚雪球。重要的是找到湿雪和长长的山坡。"本书探讨了中国投资者如何适应西方投资原则——并开发出原创方法——应用于中国A股市场的独特动态。
核心论点:没有单一正确的投资方式。成功的中国投资者涵盖价值投资、成长投资和量化方法——但他们都具备纪律、独立思考和严格的风险管理。
本书记录了三类投资者:
关键洞察:由于散户主导、信息不对称和政策驱动的波动性,A股是全球效率最低的主要市场之一——为三种方法都创造了机会。
画像特征:
典型指标:
| 指标 | 阈值 |
|---|---|
| PB 比率 | < 1.0(或激进深度价值 < 0.7) |
| PE 比率 | < 10 倍 |
| 股息收益率 | > 4% |
| 市值 | > 50 亿人民币(避免微盘股) |
| 负债权益比 | < 0.5 |
A股特殊调整: 中国的深度价值投资者特别关注SOE改革催化剂。在0.6倍账面价值交易的国有公司,有改革催化剂可能在12个月内实现50-100%的重估。
画像特征:
选择标准:
画像特征:
目标画像:
| 指标 | 范围 |
|---|---|
| 收入增长 | > 30% 同比 |
| 盈利增长 | > 40% 同比 |
| 行业增长率 | 每年 > 20% |
| 相对增长的 PE | PEG < 1.5 |
| 市值 | 50 亿 - 1000 亿人民币(成长最佳点) |
画像特征:
| A股特征 | 对价值投资的影响 |
|---|---|
| 散户主导(80%+ 成交量) | 创造更深的错误定价;情绪极端更极端 |
| 政策驱动周期 | 政府政策可以一夜之间创造/摧毁价值;必须监测政策风险 |
| SOE所有权结构 | 控股股东可能不优先考虑小股东回报 |
| 10% 日价格限制 | 防止闪崩但创造多日动能级联 |
| 卖空限制有限 | 估值过高可以持续更长时间;价值陷阱更常见 |
| 快速经济转型 | "便宜"公司可能因结构性原因而便宜(夕阳产业) |
传统的安全边际(低于内在价值购买)必须在A股中加强:
政策安全边际 — 公司是否与政府优先事项一致?受不利行业(例如2021年整顿后的教育辅导)的公司可能无论估值如何都会损失80%+。
治理安全边际 — 控股股东是否有关联方掏空的历史?股票质押?会计异常?治理风险是A股第一大价值陷阱。
流动性安全边际 — 股票是否足够流动可以退出?低成交量的小盘股价值陷阱可以困住资金多年。
结构性安全边际 — 行业是否结构性下降?中国经济正在快速转型;"便宜"的旧经济股票如果其行业正在被颠覆,可能是价值陷阱。
| 行业 | 为什么有效 | 风险 |
|---|---|---|
| 银行(银行) | 持续便宜(0.5-0.8 倍 PB),高股息,国家支持 | 不良贷款风险、利率改革 |
| 保险(保险) | 嵌入价值折扣、中产阶级增长 | 监管变化 |
| 公用事业(公用事业) | 稳定现金流、政策保护定价 | 低增长天花板 |
| 房地产(地产) | 周期底部便宜 | 政策风险(三条红线)、结构性下降 |
| 周期底部 | 钢铁、煤炭、化学品在周期底部 | 周期时机困难 |
本书中的成长投资者关注三大趋势:
趋势 1:消费升级(消费升级)
趋势 2:技术本地化(国产替代)
趋势 3:医疗健康(医疗健康)
| 卖出信号 | 描述 |
|---|---|
| 连续 2 个季度收入减速 | 成长故事可能结束 |
| 无解释的利润率压缩 | 竞争加剧或成本上升 |
| 关键高管离职 | 通常是麻烦的第一个信号 |
| 行业监管收紧 | 政府政策可以扼杀成长行业 |
| 估值超过 3 倍 PEG | 即使成长也有极限 |
| 其他地方有更好的机会 | 机会成本很重要 |
本书记录了几位使用因子模型的量化投资者。A股中有效的因子:
| 因子 | 描述 | A股功效 |
|---|---|---|
| 价值(低估值) | 低PE、PB、PS | 长期强劲,但有长期表现不佳期 |
| 小市值(小市值) | 市值 < 100 亿人民币 | 在A股历史上非常强劲;2017年后下降 |
| 动能(动量) | 6-12 个月价格动能 | 有效但需要仔细风险管理;急剧反转 |
| 质量(质量) | 高ROE、稳定盈利 | 随市场成熟越来越重要 |
| 低波动(低波动) | 较低历史波动 | 提供下行保护 |
| 反转(反转) | 短期均值回归(1 个月) | 由于散户反应过度在A股强劲 |
评分 = w1 × 价值评分 + w2 × 质量评分 + w3 × 动能评分 + w4 × 规模评分
其中:
价值评分 = z_score(1/PE) + z_score(1/PB) + z_score(股息收益率)
质量评分 = z_score(ROE) + z_score(盈利稳定性) + z_score(经营现金流/净利润)
动能评分 = z_score(12m回报 - 1m回报) # 跳过最近一个月
规模评分 = z_score(-log(市值)) # 负数因为越小 = 越高分
w1 = 0.30, w2 = 0.30, w3 = 0.25, w4 = 0.15
| 规则 | 详情 |
|---|---|
| 重新平衡频率 | 每月或每季度 |
| 组合规模 | 30-50 个等权重仓位 |
| 换手率约束 | 每次重新平衡 < 30%(降低交易成本) |
| 行业约束 | 单一行业 < 20% |
| 流动性过滤 | 平均日成交量 > 1000 万人民币 |
| ST/退市过滤 | 排除所有ST、*ST和有退市风险的股票 |
| IPO过滤 | 排除上市 < 6 个月的股票 |
| 无自主裁量覆盖 | 精确执行模型输出 |
本书中优质价值投资者使用的框架:
好生意(好生意):
好管理(好管理):
好价格(好价格):
对于专注于周期性行业的投资者:
阶段 1:周期底部识别
- 行业产能利用率处于多年低位
- 现货价格低于边际生产成本
- 行业内破产和整合
- 股票以高 PE 或负盈利 交易( paradoxically 看涨)
阶段 2:早期积累
- 在账面价值或以下购买领导者
- 小仓位;预期进一步下行
- 检查资产负债表实力(幸存者获胜)
阶段 3:确认
- 现货价格开始复苏
- 盈利从负转正
- PE 快速下降因为盈利上升
- 增加仓位
阶段 4:峰值识别
- 创纪录盈利、低 PE( paradoxically 看跌)
- 行业宣布产能扩张
- 分析师积极上调目标
- 开始在强势中卖出
阶段 5:退出
- 在盈利峰值确认之前卖出剩余仓位
- 市场在盈利显示之前定价下跌
- 不要等待"确认"——到那时股票已经下跌 30%
无论投资风格如何,所有记录的投资者都共享这些风险原则:
| 原则 | 实施 |
|---|---|
| 永远不要使用你无法承受的杠杆 | 最大杠杆:权益的 30%;最好完全不用杠杆 |
| 仓位确定就是风险管理 | 没有单一仓位成本超过 10%;市值最多 15% |
| 在熊市中保护资本 | 当市场 PE > 第 80 百分位时将权益敞口减少至 30-50% |
| 入场前知道你的退出 | 购买前写下:"如果 [具体条件] 我将卖出" |
| 将信念与固执分开 | 重新评估任何下跌 20% 的仓位;如果原始论点破裂,卖出 |
| 相关性意识 | 持有 10 只银行股不是多元化 |
价值投资者:
成长投资者:
量化投资者:
记录的投资者共享常见的心理特质:
独立思考:
情绪调节:
持续学习:
耐心:
本书为A股引入了反脆弱投资概念:
市场顶部: 兴奋 → "我是天才"
过度自信 → 增加杠杆、集中
早期下跌: 否认 → "它会反弹"
焦虑 → 每小时检查价格
中期下跌: 恐惧 → "我应该全部卖出吗?"
投降 → 在最糟糕的时刻卖出
市场底部: 沮丧 → "我永远不会投资了"
抑郁 → 避免所有市场信息
早期复苏: 怀疑 → "这只是熊市反弹"
希望 → 谨慎返回
中期复苏: 释然 → "我活过来了"
乐观 → 重建仓位
接近顶部: 兴奋 → "这次不同了"
快感 → 周期重复
记录的投资者通过以下方式打破这个周期:
价值投资者错误:
| 错误 | 描述 |
|---|---|
| 价值陷阱 | 购买应该便宜的便宜股票(夕阳产业、糟糕治理) |
| 忽视政策风险 | 5 倍 PE 的股票如果政府即将监管该行业并不便宜 |
| 过早买入 | 在衰退中过早购买周期性股票;"接落下的刀" |
| 锚定历史估值 | 股票以前是 20 倍 PE 并不意味着它应该再次是 |
| 忽视管理层质量 | 糟糕的管理层可以随着时间摧毁账面价值 |
成长投资者错误:
| 错误 | 描述 |
|---|---|
| 为成长付出过多 | 以 100 倍 PE 购买因为"它将增长到估值" |
| 将收入与利润混淆 | 许多成长公司从未实现盈利 |
| 忽视竞争动态 | 增长的市场吸引竞争;护城河很重要 |
| 爱上了故事 | 伟大的叙事 ≠ 伟大的投资 |
| 在破裂的成长上补仓 | 如果增长减速,股票可能永远无法恢复到之前的 PE |
量化投资者错误:
| 错误 | 描述 |
|---|---|
| 过度拟合 | 策略在回测中完美有效,但实盘失败 |
| 生存者偏差 | 仅在当前上市的股票上测试,忽略退市的股票 |
| 制度变化盲目 | 在 2010-2015 年有效的因子可能在 2020-2025 年无效 |
| 忽视交易成本 | 理论回报在实际滑点和费用下侵蚀 |
| 覆盖模型 | 在回撤期间打破纪律使目的落空 |
来源:季度财务筛选
行业:消费品 — 家庭清洁产品
公司:分散行业中占 35% 份额的市场领导者
初步指标:
收入增长:18% CAGR(5 年)
ROE:26% 平均
净利润率:15% 稳定
PE:22 倍(5 年范围:18 倍 - 40 倍)
PB:5.5 倍
股息收益率:2.5%
业务分析:
✓ 强大品牌组合(品类中前 5 品牌中的 3 个)
✓ 分销网络:200 万+ 零售销售点
✓ 定价权:5 年内提价 3 次但无销量下降
✓ 研发管道:每年推出 50+ 新产品
✓ 低资本强度:capex/收入 = 5%
财务深入分析:
✓ 经营现金流 / 净利润 = 1.3 倍(高质量盈利)
✓ 营运资金管理:库存天数下降,现金周期缩短
✓ 债务:净现金状况(无财务风险)
✓ 商誉:资产的 2%(无收购风险)
✓ 收入多元化:最大客户 = 销售额的 8%
管理层评估:
✓ 创始人-CEO,领导公司 20+ 年
✓ 干净的治理记录
✓ 股票质押:0%
✓ 管理层持有 15% 股份 — 利益一致
✓ 关键人员的员工股票计划
已识别风险:
- 原材料价格上涨(棕榈油、化学品)→ 被定价权缓解
- 新竞争对手(外国品牌)→ 被分销优势缓解
- 消费者信心低迷 → 防御性行业,低选择性暴露
内在价值估计:
方法 1:DCF(10 年预测,10% 折现率)→ ¥45
方法 2:盈利功率 × 历史中位数 PE → 2.5 × 22 倍 = ¥55
方法 3:可比公司中位数 PE 应用 → ¥50
范围:¥45 - ¥55
当前价格:¥38
安全边际:15-30%
决策:买入
仓位规模:组合的 6%(低于最大 10%)
入场:¥38
书面退出条件:
- 如果 ROE 连续 2 年低于 18% 则卖出
- 如果出现管理层治理问题则卖出
- 如果 PE 超过 35 倍则削减 50%
- 如果 PE 超过 45 倍则全卖
第一季度:收入 +20%,盈利 +23%,符合论点。持有。
第二季度:市场下跌 15%。股票跌至 ¥33。
→ 基本面不变。增加 2%(现在 8% 仓位)。
第三季度:收入 +22%,利润率扩张。股票回升至 ¥42。
→ 接近公允价值。持有,不增加。
第四季度:全年业绩强劲。股票在 ¥48。
→ 接近内在价值。持有但注意估值过高。
第二年:股票因市场热情达到 ¥58。PE 在 38 倍。
→ 在 ¥58 削减 50% 仓位。锁定收益。
第三年:股票回调至 ¥44。PE 在 25 倍。增长仍然 18%。
→ 重新加仓至满仓。
第五年:新外国竞争对手获得 10% 市场份额。
公司收入增长减速至 8%。
ROE 降至 19%(仍高于阈值但下降)。
管理层回应不明确。
决策:在 ¥52 卖出剩余仓位。
总收益:5 年约 85%(平均每年约 13%)
加股息:约 12% 累计
总计:约 97% 总收益
事后分析:好流程。折价入场,纪律性回调加仓,
估值过高时削减,竞争力下降时卖出。
记录在日志中供将来参考。
def screen_by_style(universe, style):
"""
按投资风格筛选A股范围。
"""
candidates = []
for stock in universe:
# 通用过滤器
if stock.is_st or stock.is_star_st:
continue
if stock.days_since_ipo < 180:
continue
if stock.avg_daily_volume_3m < 10_000_000: # 1000 万人民币
continue
if style == 'deep_value':
if (stock.pb < 1.0 and
stock.pe > 0 and stock.pe < 10 and
stock.dividend_yield > 0.04 and
stock.debt_to_equity < 0.5 and
stock.market_cap > 5_000_000_000):
candidates.append(stock)
elif style == 'quality_value':
if (stock.roe_5y_avg > 0.20 and
stock.revenue_cagr_3y > 0.10 and
stock.net_margin_trend == 'stable_or_expanding' and
stock.pe_percentile_5y < 50 and
stock.ocf_to_ni > 0.8 and
stock.share_pledge_ratio < 0.1):
candidates.append(stock)
elif style == 'growth':
if (stock.revenue_growth_yoy > 0.30 and
stock.earnings_growth_yoy > 0.40 and
stock.industry_growth_rate > 0.20 and
stock.peg < 1.5 and
stock.market_cap > 5_000_000_000 and
stock.market_cap < 100_000_000_000):
candidates.append(stock)
elif style == 'quant_multi_factor':
score = compute_factor_score(stock)
if score > 0:
candidates.append((stock, score))
if style == 'quant_multi_factor':
candidates.sort(key=lambda x: x[1], reverse=True)
return [c[0] for c in candidates[:50]]
return candidates
class QualityValueManager:
"""
管理集中优质价值组合。
"""
def __init__(self, max_positions=12, max_single_weight=0.10):
self.max_positions = max_positions
self.max_single_weight = max_single_weight
self.positions = {}
self.journal = []
def evaluate_entry(self, stock, portfolio_value):
"""决定是否建仓。"""
# 三好检查
business_score = self.score_business(stock)
management_score = self.score_management(stock)
price_score = self.score_price(stock)
if business_score >= 7 and management_score >= 7 and price_score >= 6:
# 计算仓位规模
conviction = min(business_score, management_score, price_score)
if conviction >= 9:
target_weight = 0.08 # 高信念
elif conviction >= 7:
target_weight = 0.05 # 中等信念
else:
target_weight = 0.03 # 试点仓位
shares = int(target_weight * portfolio_value / stock.price / 100) * 100
return {
'action': 'BUY',
'shares': shares,
'target_weight': target_weight,
'exit_conditions': self.define_exit_conditions(stock)
}
return {'action': 'PASS'}
def quarterly_review(self, portfolio):
"""每季度审查所有仓位。"""
actions = []
for ticker, position in portfolio.items():
stock = get_current_data(ticker)
# 检查退出条件
if stock.roe < 0.18 and position.quarters_below_roe_threshold >= 2:
actions.append({'ticker': ticker, 'action': 'SELL', 'reason': 'ROE 恶化'})
elif stock.pe_percentile_5y > 90:
actions.append({'ticker': ticker, 'action': 'TRIM_50', 'reason': '估值过高'})
elif stock.governance_red_flag:
actions.append({'ticker': ticker, 'action': 'SELL', 'reason': '治理风险'})
elif stock.pe_percentile_5y < 20 and position.weight < self.max_single_weight:
actions.append({'ticker': ticker, 'action': 'ADD', 'reason': '估值吸引'})
else:
actions.append({'ticker': ticker, 'action': 'HOLD', 'reason': '论点完整'})
return actions
def assess_cycle_phase(sector_data):
"""
确定当前行业周期阶段。
"""
capacity_util = sector_data.capacity_utilization
spot_price_vs_cost = sector_data.spot_price / sector_data.marginal_cost
yoy_capex_growth = sector_data.capex_growth_yoy
bankruptcies_12m = sector_data.bankruptcies_trailing_12m
pe_median = sector_data.median_pe
if capacity_util < 0.65 and spot_price_vs_cost < 1.0 and bankruptcies_12m > 5:
return '谷底', {
'action': '在账面价值或以下积累领导者',
'position_size': '小(每个 2-3%)',
'risk': '可能进一步下行;使用宽止损'
}
elif capacity_util < 0.75 and spot_price_vs_cost > 1.0:
return '早期复苏', {
'action': '在盈利确认时增加仓位',
'position_size': '增加至每个 5-7%',
'risk': '可能虚假复苏'
}
elif capacity_util > 0.80 and spot_price_vs_cost > 1.3:
return '中期周期', {
'action': '持有;享受盈利动能',
'position_size': '维持当前水平',
'risk': '监测峰值信号'
}
elif capacity_util > 0.90 and yoy_capex_growth > 0.20:
return '后期周期', {
'action': '开始在强势中卖出',
'position_size': '减少 30-50%',
'risk': '峰值盈利创造价值幻觉(低 PE 陷阱)'
}
elif capacity_util > 0.85 and spot_price_vs_cost < 1.1 and pe_median < 8:
return '峰值', {
'action': '退出剩余仓位',
'position_size': '零',
'risk': '多年下行即将到来'
}
return '不确定', {'action': '等待明确'}
def monthly_rebalance(universe, current_portfolio, constraints):
"""
A股量化策略的基于因子的月度重新平衡。
"""
# 步骤 1:对所有股票评分
scored = []
for stock in universe:
if not passes_liquidity_filter(stock):
continue
value = z_score(1/stock.pe) + z_score(1/stock.pb) + z_score(stock.div_yield)
quality = z_score(stock.roe) + z_score(stock.earnings_stability) + z_score(stock.ocf_ni)
momentum = z_score(stock.return_12m - stock.return_1m) # 跳过最近一个月
size = z_score(-math.log(stock.market_cap))
composite = 0.30*value + 0.30*quality + 0.25*momentum + 0.15*size
scored.append((stock, composite))
scored.sort(key=lambda x: x[1], reverse=True)
target_portfolio = scored[:50] # 前 50 只股票
# 步骤 2:应用行业约束
target_portfolio = apply_sector_cap(target_portfolio, max_sector_weight=0.20)
# 步骤 3:计算换手率约束的交易
trades = calculate_rebalance_trades(
current=current_portfolio,
target=target_portfolio,
max_turnover=0.30
)
# 步骤 4:执行
for trade in trades:
execute_trade(trade)
return target_portfolio
"找到湿的雪和长长的坡,然后让时间做你的朋友。"
"在A股做价值投资,你需要比巴菲特多一项能力:读懂政策。"
"便宜不是买入的理由,便宜且好才是。"
"成长股最大的风险不是估值高,而是增长不及预期。"
"量化投资的核心不是模型,而是纪律。"
"投资风格没有优劣,只有适合不适合。"
"护城河在中国同样重要,但你需要加上一条:政策护城河。"
"在这个市场上活得久,比赚得多更重要。"
"最好的投资者都是最好的学习者。"
"不要用一种方法去评判另一种方法的投资者。价值投资者不应该嘲笑趋势投资者,反之亦然。"