华尔街制胜之道 — 完整实施方案规范

基于 James P. O'Shaughnessy,What Works on Wall Street(第4版,2011)

迄今为止最全面的股票市场因子量化研究。O'Shaughnessy 对数十种单因子和多因子策略在50+年数据(1926-2009)上进行了回测,识别哪些因子实际预测股票回报,哪些只是市场神话。


目录

  1. 概述
  2. 方法论与数据
  3. 价值因子
  4. 成长因子
  5. 动量与相对强度
  6. 股东收益率
  7. 小盘股 vs 大盘股
  8. 基石价值策略
  9. 基石成长策略
  10. 多因子模型
  11. 联合基石策略
  12. 板块分析
  13. 风险与回撤分析
  14. 什么不起作用
  15. 实施伪代码
  16. 核心原则摘要

1. 概述

核心论点

O'Shaughnessy 的核心发现:简单的、量化的、基于因子的策略在长期持续战胜市场和专业基金经理。 大多数投资者失败的原因不是缺乏信息而是缺乏纪律——他们无法在策略不可避免的表现不佳期间坚持下去。

关键结论

"本书的中心信息很简单:在长期中,基于已知、公开和测试过的股票表现进行投资决策的策略,战胜那些依赖希望、故事和主观评估的策略。"


2. 方法论与数据

2.1 数据来源

2.2 宇宙定义

O'Shaughnessy 针对几个宇宙进行测试:

宇宙 定义 近似大小
所有股票 市值 > $200M(通胀调整) ~2,500只股票
大盘股 市值 > 平均市值(按市值排名的前约16%) ~500只股票
小盘股 市值在$200M和平均市值之间 ~2,000只股票
市场领导者 市值 > $1B、盈利 > 平均、财务强劲 ~350只股票

2.3 重新平衡

2.4 统计度量


3. 价值因子

3.1 市销率(P/S)— 价值因子之王

O'Shaughnessy 最重要的发现:P/S是预测未来股票回报的单一最佳价值因子。

按P/S十分位表现(所有股票宇宙,1964-2009):

最便宜P/S的十分位1:  ~18% CAGR
最贵P/S的十分位10: ~4% CAGR
利差:~14% 每年

为什么P/S最有效:

实施规则:买P/S在最低十分位(最低10%)的股票。避免P/S在最高十分位的股票。

3.2 市盈率(P/E)

最著名的价值因子。结果:

低市盈率十分位:~16% CAGR
高市盈率十分位:~8% CAGR
利差:~8% 每年

局限性:

3.3 市净率(P/B)

低市净率十分位:~15% CAGR
高市净率十分位:~9% CAGR
利差:~6% 每年

局限性:

3.4 市现率(P/CF)

低市现率十分位:~17% CAGR
高市现率十分位:~6% CAGR
利差:~11% 每年

3.5 EV/EBITDA

低EV/EBITDA十分位:~17.5% CAGR
高EV/EBITDA十分位:~5% CAGR
利差:~12.5% 每年

3.6 价值因子摘要排名

排名 因子 近似利差 可靠性
1 P/S 14% 非常高
2 EV/EBITDA 12.5% 非常高
3 P/CF 11%
4 P/E 8%
5 P/B 6% 中等

4. 成长因子

4.1 盈利增长率

O'Shaughnessy 关于成长的关键发现:过去盈利增长不预测未来股票回报。

按5年EPS增长前十分位:~11% CAGR(跑输市场)
按5年EPS增长后十分位:~14% CAGR(跑赢市场)

这是书中最违反直觉的发现之一。

4.2 持续盈利增长

4.3 销售增长

4.4 合理价格成长


5. 动量与相对强度

5.1 动量效应

继价值之后,动量是第二强大的股票市场因子。O'Shaughnessy 将其衡量为6个月或12个月相对价格强度——一只股票的价格表现在相对于所有其他股票中的排名。

按6个月相对强度前十分位:~16% CAGR
按6个月相对强度后十分位:~7% CAGR
利差:~9% 每年

5.2 为什么动量有效

5.3 价值与动量的相互作用

这是O'Shaughnessy 关于因子组合的最重要发现:

                    强动量    弱动量
便宜(价值)         最佳(~20%+)  价值陷阱(~12%)
昂贵(成长)        风险(~14%)   最差(~4%)

5.4 相对强度实施

FUNCTION relative_strength_rank(stock, universe, lookback=6_months):
    all_returns = [s.price_return(lookback) FOR s IN universe]
    stock_return = stock.price_return(lookback)
    percentile = rank(stock_return, all_returns) / len(all_returns)
    RETURN percentile  # 1.0 = 最佳表现者,0.0 = 最差

规则:只买相对强度百分位 > 0.70(前30%)的股票。


6. 股东收益率

6.1 超越股息收益率

传统股息收益率筛选遗漏了一种关键资本回报形式:股票回购。O'Shaughnessy 定义股东收益率为:

股东收益率 = 股息收益率 + 回购收益率

其中:
回购收益率 = (去年流通股数 - 当前流通股数) / 去年流通股数

6.2 为什么股东收益率更优

按股东收益率前十分位:~17% CAGR
后十分位(稀释者):~6% CAGR
利差:~11% 每年

6.3 净股票发行作为负面信号


7. 小盘股 vs 大盘股

7.1 规模效应

小盘股(所有股票宇宙):~13.5% CAGR,20%标准差
大盘股:~11.2% CAGR,16%标准差

7.2 微盘股:谨慎

7.3 最佳方法


8. 基石价值策略

8.1 定义

基石价值策略是O'Shaughnessy 的标志性价值策略。它从大盘股宇宙中选择股票,使用简单、清晰的标准:

宇宙:大盘股(市值 > 市值平均)

过滤器:
1. 市值 > 数据库平均(大股过滤器)
2. 流通股数 > 平均
3. 每股现金流 > 平均
4. 销售额 > 1.5倍平均
5. 股息收益率 > 平均

从符合条件的股票中,选择按股东收益率最高的前50只
重新平衡:每年

8.2 表现

基石价值CAGR(1964-2009):~15.2%
大盘股基准CAGR:~11.2%
标普500 CAGR:~10.5%

夏普比率:~0.62(vs 标普500的0.40)
最大回撤:~-38%(vs 标普500的-45%)

8.3 为什么有效

8.4 行为优势


9. 基石成长策略

9.1 定义

基石成长策略是O'Shaughnessy 的标志性成长策略。它从所有股票宇宙中选择股票,使用成长 AND 价值标准:

宇宙:所有股票(市值 > $200M通胀调整)

过滤器:
1. 市值 > $200M
2. 每股收益持续增长(EPS高于前一年多年)
3. 市销率 < 1.5

从符合条件的股票中,选择按6个月相对强度最高的前50只
重新平衡:每年

9.2 表现

基石成长CAGR(1964-2009):~16.8%
所有股票基准CAGR:~13.5%

夏普比率:~0.55
最大回撤:~-42%

9.3 为什么有效


10. 多因子模型

10.1 组合因子的力量

O'Shaughnessy 最重要的实践发现:组合多个因子产生比任何单一因子更好的风险调整回报。

单一因子回报不错。双因子回报更好。三因子或多因子接近最优前沿。

10.2 双因子组合

最佳双因子组合(来自所有股票宇宙):

组合 近似CAGR 夏普
低P/S + 高相对强度 ~19% 0.68
低EV/EBITDA + 高相对强度 ~18.5% 0.65
高股东收益率 + 高相对强度 ~18% 0.63
低P/CF + 高相对强度 ~17.5% 0.60

模式清晰:价值 + 动量是 winning 组合

10.3 复合价值因子

O'Shaughnessy 推荐使用价值复合在多个因子间平均排名:

FUNCTION value_composite_rank(stock, universe):
    ps_rank = percentile_rank(stock.p_s, universe, ascending=True)  # 越低 = 越便宜
    pe_rank = percentile_rank(stock.p_e, universe, ascending=True)
    pcf_rank = percentile_rank(stock.p_cf, universe, ascending=True)
    ev_ebitda_rank = percentile_rank(stock.ev_ebitda, universe, ascending=True)
    pb_rank = percentile_rank(stock.p_b, universe, ascending=True)
    sy_rank = percentile_rank(stock.shareholder_yield, universe, ascending=False)  # 越高 = 越好

    composite = AVERAGE(ps_rank, pe_rank, pcf_rank, ev_ebitda_rank, pb_rank, sy_rank)
    RETURN composite

复合价值排名产生比任何单一价值指标更一致的结果,因为它在个体指标弱点间多元化。

10.4 三因子模型

FUNCTION three_factor_score(stock, universe):
    value_score = value_composite_rank(stock, universe)       # 越低 = 越便宜
    momentum_score = relative_strength_rank(stock, universe)  # 越高 = 越强
    quality_score = shareholder_yield_rank(stock, universe)   # 越高 = 越好

    # 组合(将每个归一化到0-100范围)
    combined = (100 - value_score) + momentum_score + quality_score
    RETURN combined

11. 联合基石策略

11.1 定义

联合基石策略将基石价值和基石成长组合成单一投资组合:

投资组合 = 50% 基石价值 + 50% 基石成长
重新平衡:每年

11.2 表现

联合基石CAGR(1964-2009):~16.0%
夏普比率:~0.64
最大回撤:~-35%

11.3 为什么组合有效

11.4 实践好处


12. 板块分析

12.1 板块集中风险

12.2 板块相对价值

一种替代方法:在其板块内而非跨市场对股票进行价值排名。

FUNCTION sector_relative_value(stock, sector_peers):
    # 在其自己的板块内排名股票的P/S
    sector_ps_rank = percentile_rank(stock.p_s, sector_peers, ascending=True)
    RETURN sector_ps_rank

这防止投资组合成为对一两个板块的赌注。

12.3 哪些板块价值最有效


13. 风险与回撤分析

13.1 按策略的最大回撤

策略 最大回撤 恢复时间
标普500 -45% ~5年
所有股票(价值) -50% ~4年
大盘股(价值) -38% ~3年
基石价值 -38% ~3年
基石成长 -42% ~3.5年
联合基石 -35% ~3年

13.2 基础率

基础率 = 策略战胜基准的滚动N年期的百分比。

策略                  1年    3年    5年    10年
基石价值              62%    72%    82%    91%
基石成长              64%    74%    85%    93%
联合基石              66%    78%    88%    96%

持有期越长,表现优异越确定。这就是为什么耐心和纪律至关重要。

13.3 最差时期

"投资者犯的最大错误是不理解在长期有效的策略在短期确实会有糟糕的回报。"


14. 什么不起作用

14.1 无预测力的因子

O'Shaughnessy 测试了许多流行策略,发现它们没有可靠优势

14.2 损害回报的因子

14.3 最大神话

"投资中最大的神话是你应该买伟大的公司。数据清楚地表明,以伟大价格买好公司远远优于以好价格买伟大公司。"


15. 实施伪代码

15.1 基石价值实施

FUNCTION cornerstone_value(all_stocks, date):
    # Step 1: Define Large Stocks universe
    avg_market_cap = AVERAGE([s.market_cap FOR s IN all_stocks])
    large_stocks = [s FOR s IN all_stocks IF s.market_cap > avg_market_cap]

    # Step 2: Apply filters
    avg_shares = AVERAGE([s.shares_outstanding FOR s IN large_stocks])
    avg_cashflow = AVERAGE([s.cashflow_per_share FOR s IN large_stocks])
    avg_sales = AVERAGE([s.total_sales FOR s IN large_stocks])
    avg_div_yield = AVERAGE([s.dividend_yield FOR s IN large_stocks])

    candidates = []
    FOR each stock IN large_stocks:
        IF stock.shares_outstanding > avg_shares \
           AND stock.cashflow_per_share > avg_cashflow \
           AND stock.total_sales > 1.5 * avg_sales \
           AND stock.dividend_yield > avg_div_yield:
            candidates.APPEND(stock)

    # Step 3: Rank by shareholder yield (highest first)
    candidates.SORT(key=shareholder_yield, descending=True)

    # Step 4: Select top 50
    RETURN candidates[:50]

15.2 基石成长实施

FUNCTION cornerstone_growth(all_stocks, date):
    # Step 1: Market cap filter
    candidates = [s FOR s IN all_stocks IF s.market_cap > 200_million_adjusted]

    # Step 2: Earnings persistence filter
    candidates = [s FOR s IN candidates
                  IF s.eps_year_0 > s.eps_year_1
                  AND s.eps_year_1 > s.eps_year_2]

    # Step 3: Valuation filter
    candidates = [s FOR s IN candidates IF s.price_to_sales < 1.5]

    # Step 4: Rank by 6-month relative strength (highest first)
    FOR each stock IN candidates:
        stock.rs_6m = stock.price_return(months=6)
    candidates.SORT(key=rs_6m, descending=True)

    # Step 5: Select top 50
    RETURN candidates[:50]

15.3 联合基石实施

FUNCTION united_cornerstone(all_stocks, date, capital):
    cv_picks = cornerstone_value(all_stocks, date)
    cg_picks = cornerstone_growth(all_stocks, date)

    # Allocate 50% to each
    cv_capital = capital * 0.5
    cg_capital = capital * 0.5

    # Equal weight within each sub-portfolio
    cv_weight = cv_capital / len(cv_picks)  # per stock
    cg_weight = cg_capital / len(cg_picks)  # per stock

    portfolio = {}
    FOR stock IN cv_picks:
        portfolio[stock] = cv_weight
    FOR stock IN cg_picks:
        IF stock IN portfolio:
            portfolio[stock] += cg_weight  # Can overlap
        ELSE:
            portfolio[stock] = cg_weight

    RETURN portfolio

# Annual rebalancing
FUNCTION annual_rebalance(portfolio, all_stocks, date, capital):
    new_portfolio = united_cornerstone(all_stocks, date, capital)
    # Sell positions not in new portfolio
    # Buy new positions
    # Adjust existing positions to target weights
    RETURN new_portfolio

15.4 高级多因子实施

FUNCTION multi_factor_screen(all_stocks, date):
    # Step 1: Universe filter
    universe = [s FOR s IN all_stocks IF s.market_cap > 200_million_adjusted]

    # Step 2: Compute value composite for each stock
    FOR each stock IN universe:
        stock.value_rank = value_composite_rank(stock, universe)

    # Step 3: Compute momentum
    FOR each stock IN universe:
        stock.momentum_rank = relative_strength_rank(stock, universe, lookback=6)

    # Step 4: Compute shareholder yield rank
    FOR each stock IN universe:
        stock.sy_rank = percentile_rank(stock.shareholder_yield, universe)

    # Step 5: Combined score (equal weight each factor)
    FOR each stock IN universe:
        stock.combined = (
            (1 - stock.value_rank) * 0.40 +    # 40% weight to value
            stock.momentum_rank * 0.35 +         # 35% weight to momentum
            stock.sy_rank * 0.25                  # 25% weight to shareholder yield
        )

    # Step 6: Select top 25
    universe.SORT(key=combined, descending=True)
    RETURN universe[:25]

16. 核心原则摘要

  1. P/S是价值因子之王。 如果只使用一个估值指标,使用市销率。它是所有时期和市场环境中最可靠的未来回报预测因子。

  2. 价值 + 动量是最佳组合。 便宜股票配强相对价格强度产生最佳风险调整回报。任一因子 alone 不如组合强大。

  3. 过去盈利增长不预测未来回报。 投资者系统性地为过去增长过度支付。买中等、持续成长且价格便宜而不是。

  4. 股东收益率战胜股息收益率。 在收益率计算中包括回购。减少股份数的公司在创造价值;稀释的在摧毁价值。

  5. 复合因子战胜单因子。 将多个价值指标(P/S、P/E、P/CF、EV/EBITDA、P/B、股东收益率)平均为复合排名以获得更一致的结果。

  6. 联合基石策略是实践答案。 50% 基石价值 + 50% 基石成长,每年重新平衡。简单、有效且稳健。

  7. 纪律是真正的优势。 每个策略都有多年表现不佳的时期。在糟糕时期坚持已证明的量化策略的投资者将战胜追逐去年赢家的投资者。

  8. 避免高P/S比率股票。 交易高于10倍销售额的股票在整个数据中是最差的投资之一。这是单一最强负面信号。

  9. 基础率比个体结果更重要。 在滚动5年期中赢得85%的策略是出色的。你不需要每年都赢——你需要赢得大多数多年期。

  10. 简单性获胜。 书中最简单的策略也是最好的。复杂性不增加回报——它增加脆弱性和错误机会。

"指数化有效,因为大多数投资者无法让自己系统地遵循任何策略,无论其过去表现有多好。投资的情绪是投资者最大的敌人。"