Graham Number Timing: When Stocks Trade Below Benjamin Graham's Fair

Growth of $10,000: Graham Number Timing vs S&P 500 (2000-2025)

Graham Number Timing: When Stocks Trade Below Benjamin Graham's Fair Value Formula

Benjamin Graham's intrinsic value formula delivered +4.39% annual alpha over 25 years. That's $37,763 extra on every $10,000 invested, using a metric Graham defined in 1949.

Contents

  1. The Formula
  2. Backtest Results (2000-2025, With Costs)
  3. When Graham Timing Works
  4. When Graham Timing Struggles
  5. The Quality Filters
  6. Portfolio Construction
  7. The Screen
  8. The Academic Foundation
  9. Why This Isn't a Free Lunch
  10. Current Signal (March 2026)
  11. Key Takeaways
  12. Methodology

The Graham Number answers a simple question: what's a conservative fair value estimate based only on earnings and book value? When a stock trades below that estimate, you're buying dollar bills for 70 cents.

What's striking: this 75-year-old formula still works in modern markets without modification.


The Formula

Graham's fair value equation:

Graham Number = sqrt(22.5 × EPS × Book Value Per Share)

Where: - EPS = Net Income / Shares Outstanding - BVPS = Total Stockholders' Equity / Shares Outstanding - 22.5 = Graham's constant (P/E of 15 × P/B of 1.5)

The 22.5 constant reflects Graham's view that a defensive investor shouldn't pay more than 15x earnings AND 1.5x book value simultaneously. The geometric mean of those bounds (sqrt(15 × 1.5)) creates the composite multiplier.

The signal: Buy stocks where Price/Graham < 1.0

A stock trading at 80% of its Graham Number has a Price/Graham ratio of 0.80. That's the buy zone.


Backtest Results (2000-2025, With Costs)

Strategy CAGR Final Value ($10k) Sharpe Max Drawdown Volatility
Graham Timing 12.40% $174,244 0.458 -54.47% 22.69%
SPY (Buy & Hold) 8.01% $62,745 0.354 -45.53% 16.97%

The strategy outperformed SPY by 4.39% annually over 25 years. That's $111,499 more on a $10,000 investment.

The down-capture ratio of 88.8% means when SPY had a losing quarter, this strategy lost 88.8% as much on average. The up-capture of 122.1% means when SPY gained, this strategy captured 122% of the upside.

This is a momentum profile with a value entry signal. You get amplified gains in bull markets, but don't dodge the full downside in crashes.

The 0% cash periods confirm Graham Number signals are always available. Even in expensive markets, some stocks trade below intrinsic value.


When Graham Timing Works

Early 2000s recovery

After the dot-com crash, beaten-down stocks with intact earnings and book values qualified for Graham's screen. The strategy delivered:

Year Strategy SPY Excess
2000 +33.17% -10.50% +43.67%
2001 +9.23% -9.17% +18.40%
2003 +50.43% +28.23% +22.20%

Combined cumulative excess over this period: roughly +84% relative to SPY.

The 2009-2010 financial crisis recovery

When panic selling drove sound stocks below Graham's threshold:

Year Strategy SPY Excess
2009 +59.25% +25.28% +33.97%
2010 +24.91% +15.08% +9.83%

The strategy was positioned in cheap, profitable, equity-backed companies right when the market realized the world wasn't ending.

2023-2024: Value rotation after tech bubble

The most recent two years show the signal still working:

Year Strategy SPY Excess
2023 +33.52% +24.89% +8.63%
2024 +42.67% +24.47% +18.20%

When growth premiums compress and investors rotate back to fundamentals, stocks below Graham Number thresholds consistently outperform.


When Graham Timing Struggles

Sustained momentum markets

When markets chase growth and ignore valuations, cheap stocks stay cheap longer than you expect:

Year Strategy SPY Excess
2017 +7.82% +21.49% -13.67%
2019 +18.01% +30.70% -12.69%
2021 +3.05% +28.15% -25.10%

The 2021 underperformance is the worst year in the backtest. That was peak growth mania. Ark Innovation up 150%, SPACs everywhere, profitability didn't matter. Graham's value screen missed the entire rally.

Drawdowns are deep

The max drawdown of -54.47% (vs SPY's -45.53%) reflects a key risk: cheap stocks often get cheaper during crashes. Value investing means enduring periods where the market doesn't care about your thesis.

High volatility

22.69% annualized volatility (vs SPY's 16.97%) comes from concentrated small/mid-cap exposure. The typical portfolio holds 29 stocks, enough for diversification, but not enough to smooth all noise.


The Quality Filters

We don't buy every stock below Graham Number. We add filters to avoid value traps:

  1. ROE > 10%. Ensures profitability and capital efficiency
  2. Net Income > 0. No loss-making companies
  3. Total Equity > 0. No negative book value (prevents division errors)
  4. Market Cap > $1B. Liquidity threshold

These filters eliminate distressed companies where low Price/Graham reflects permanent impairment, not temporary mispricing.


Portfolio Construction

  • Selection: Top 30 stocks by deepest discount to Graham Number (lowest Price/Graham ratio first)
  • Weighting: Equal weight (3.33% per stock)
  • Rebalancing: Quarterly (January, April, July, October)
  • Transaction costs: 5 bps for large cap, 10 bps for mid cap, 15 bps for small cap (round-trip)

Quarterly rebalancing aligns with when new 10-K/10-Q earnings data becomes available. Graham Number changes with reported earnings and book value.

The 29.3 average holdings confirm the strategy stays near the 30-stock target most quarters. The 0 cash periods mean the signal always fires, we never fail to find 30 qualifying stocks.


The Screen

Run this on live data to see which stocks currently trade below their Graham Number:

WITH latest_filings AS (
 SELECT i.symbol,
 i.netIncome,
 b.totalStockholdersEquity,
 k.marketCap,
 k.returnOnEquity,
 ROW_NUMBER() OVER (PARTITION BY i.symbol ORDER BY i.dateEpoch DESC) AS rn
 FROM income_statement i
 JOIN balance_sheet b ON i.symbol = b.symbol
 AND ABS(CAST(i.dateEpoch AS BIGINT) - CAST(b.dateEpoch AS BIGINT)) < 86400 * 60
 JOIN key_metrics k ON i.symbol = k.symbol
 AND ABS(CAST(i.dateEpoch AS BIGINT) - CAST(k.dateEpoch AS BIGINT)) < 86400 * 60
 WHERE i.period IN ('FY', 'Q4')
 AND b.period IN ('FY', 'Q4')
 AND k.period IN ('FY', 'Q4')
 AND i.netIncome > 0
 AND b.totalStockholdersEquity > 0
 AND k.returnOnEquity > 0.10
 AND k.marketCap > 1e9
),
current_prices AS (
 SELECT symbol, adjClose AS price,
 ROW_NUMBER() OVER (PARTITION BY symbol ORDER BY dateEpoch DESC) AS rn
 FROM stock_eod
 WHERE dateEpoch > CAST(EXTRACT(EPOCH FROM CURRENT_DATE - INTERVAL '7 days') AS INTEGER)
),
graham_calc AS (
 SELECT
 f.symbol,
 f.netIncome,
 f.totalStockholdersEquity,
 f.marketCap,
 f.returnOnEquity,
 p.price,
 -- Graham Number = sqrt(22.5 * EPS * BVPS)
 SQRT(22.5 * (f.netIncome / (f.marketCap / p.price)) * (f.totalStockholdersEquity / (f.marketCap / p.price))) AS graham_number
 FROM latest_filings f
 JOIN current_prices p ON f.symbol = p.symbol AND p.rn = 1
 WHERE f.rn = 1 AND p.price > 0
)
SELECT
 symbol,
 ROUND(price, 2) AS current_price,
 ROUND(graham_number, 2) AS graham_number,
 ROUND(price / graham_number, 2) AS price_to_graham_ratio,
 ROUND(returnOnEquity * 100, 1) AS roe_pct,
 ROUND(marketCap / 1e9, 2) AS market_cap_bn
FROM graham_calc
WHERE price / graham_number < 1.0
ORDER BY price / graham_number ASC
LIMIT 30;

Run this screen on live data →

Stocks with price_to_graham_ratio < 1.0 are trading below Graham's fair value estimate. Lower ratios = deeper discounts.


The Academic Foundation

Benjamin Graham (1949): The Intelligent Investor introduced the Graham Number as a conservative valuation metric for defensive investors. Graham emphasized buying stocks with a "margin of safety", paying less than intrinsic value to buffer against errors in judgment.

Lakonishok, Shleifer, Vishny (1994): "Contrarian Investment, Extrapolation, and Risk" showed value stocks (low P/E, low P/B) outperform growth stocks over long horizons, earning 10-11% annual returns vs 5-6% for glamour stocks. LSV attributed this to systematic investor overreaction to past growth.

Piotroski (2000): "Value Investing: The Use of Historical Financial Statement Information to Separate Winners from Losers" demonstrated that adding fundamental quality filters to value screens (profitability, improving margins, strengthening balance sheets) doubled alpha from 7.5% to 13.4% annually.

The Graham Number combines these insights: value entry (low Price/Book and Price/Earnings via the composite formula) + quality filter (ROE > 10%, positive earnings, positive equity).


Why This Isn't a Free Lunch

You pay with patience

Value investing means watching growth stocks double while your portfolio grinds sideways. The 2017-2021 period required conviction to hold through -25% underperformance in a single year (2021).

You pay with volatility

22.69% annualized volatility vs 16.97% for SPY. Higher returns come with higher short-term swings.

You pay with drawdowns

-54.47% max drawdown means watching $100k turn into $45k. That's the price of admission for value strategies during crashes.

You need discipline

Quarterly rebalancing into hated stocks requires ignoring headlines and trusting the process. When everyone sells, you buy more.


Current Signal (March 2026)

As of the latest data, 47 stocks on US exchanges trade below their Graham Number with ROE > 10%.

Top 5 deepest discounts:

Symbol Price/Graham Sector ROE
(See live screen above for current data)

The signal is always live. Graham's formula works in any market because it adapts to current earnings and book values.


Key Takeaways

What worked: - +4.39% annual alpha over 25 years - 122% up-capture in bull markets - 0% cash periods (always finds opportunities) - Signal dates back to 1949, still works without modification

What didn't: - -25% underperformance in peak growth mania (2021) - 88.8% down-capture (doesn't dodge crashes) - -54.47% max drawdown (deep value pain)

Who this is for: - Long-term investors (5+ year horizon) - Value mindset (can stomach underperformance during growth rallies) - Discipline to rebalance into fear

Who this isn't for: - Short-term traders (mean reversion takes time) - Growth-focused investors (misses momentum) - Risk-averse investors (high volatility, deep drawdowns)


Methodology

  • Universe: NYSE, NASDAQ, AMEX
  • Period: 2000-01-01 to 2025-10-01 (103 quarters, 25 years)
  • Rebalancing: Quarterly (Jan 1, Apr 1, Jul 1, Oct 1)
  • Position sizing: Equal weight, 30 stocks max, 10 minimum (cash if fewer qualify)
  • Transaction costs: Size-tiered model (5-15 bps depending on market cap)
  • Survivorship bias: Controlled (includes delisted stocks)
  • Benchmark: SPY total return

Full backtest code: github.com/ceta-research/backtests/graham-timing

Part of a Series: Global | Sweden | India | Global | US | Switzerland | Sweden | Japan

Run It Yourself

Explore the data behind this analysis on Ceta Research. Query our financial data warehouse with SQL, build custom screens, and run your own backtests across 70,000+ stocks on 20 exchanges.


Data: Ceta Research | FMP fundamental data warehouse | 25-year backtest (2000-2025)

Read more