PEG Ratio Across 14 Exchanges: Where GARP Beats the Local Market
PEG ratio tested on 14 exchanges with local benchmarks. Sweden: +6.81% vs OMX30. Canada: +3.94% vs TSX. India: +2.56% vs Sensex. 6 of 14 markets beat their home index. The old SPY comparison was mixing currency effects with equity alpha.
We ran Peter Lynch's PEG ratio strategy across 14 exchanges globally, the same signal, same parameters, same time period. Then we did something most global backtests skip: we benchmarked each exchange against its own local index instead of the S&P 500.
Contents
- The Strategy
- All 14 Exchanges: Ranked by Excess CAGR vs Local Benchmark
- The Pattern With Local Benchmarks
- Sweden: The Standout
- India: +2.56% vs Sensex
- The US Underperformance
- Korea: Much Better With Local Benchmarks
- What the Data Teaches
- Excluded Exchanges
- Run It Yourself
- Limitations
The difference is dramatic. Under the old SPY comparison, only 4 of 17 markets showed positive alpha. With local benchmarks, 6 of 14 exchanges beat their home index. India's alpha drops from +5.7% to +2.6% (the old number was inflated by comparing INR returns to a USD benchmark). Sweden jumps from +2.6% to +6.8%. Germany and Switzerland flip from negative to positive.
The Strategy
Signal: PEG < 1.0, P/E 8-30, ROE > 12%, D/E < 1.5, market cap threshold in local currency Portfolio: Top 30 by lowest PEG, equal weight, quarterly rebalance Period: 2000-2025 (25.8 years, 103 quarterly periods) Execution: Next-day close (MOC) Benchmark: Local currency index where available; SPY where not Costs: Transaction costs applied (size-tiered by market cap)
The signal is Peter Lynch's GARP framework from One Up on Wall Street (1989). A PEG below 1.0 means you're paying less than earnings growth warrants. The quality filters add discipline: you want growth that's backed by real profitability and a clean balance sheet.
Market cap thresholds are set in local currency to target $200-500M USD equivalent (not a fixed $1B USD applied globally).
All 14 Exchanges: Ranked by Excess CAGR vs Local Benchmark
| Exchange | CAGR | Local Benchmark | Excess | Sharpe | Max DD | Cash% |
|---|---|---|---|---|---|---|
| Sweden (STO) | 9.98% | OMX30 | +6.81% | 0.391 | -53.05% | 13% |
| Canada (TSX) | 9.03% | TSX Composite | +3.94% | 0.329 | -56.94% | 0% |
| Switzerland (SIX) | 5.44% | SMI | +3.34% | 0.280 | -60.03% | 0% |
| Norway (OSL) | 13.80% | OSEAX | +2.89% | 0.739 | -25.78% | 28% |
| India (BSE+NSE) | 13.68% | Sensex | +2.56% | 0.224 | -66.11% | 16% |
| Germany (XETRA) | 5.68% | DAX | +0.56% | 0.159 | -58.14% | 0% |
| Singapore (SES) | 1.63% | STI | -0.54% | -0.054 | -56.20% | 20% |
| Taiwan (TAI) | 3.69% | TAIEX | -0.69% | 0.136 | -54.10% | 24% |
| Korea (KSC) | 4.04% | KOSPI | -0.77% | 0.063 | -36.90% | 33% |
| S. Africa (JNB) | 7.21% | SPY* | -0.80% | -0.081 | -39.91% | 22% |
| Hong Kong (HKSE) | 0.90% | Hang Seng | -0.87% | -0.082 | -72.02% | 1% |
| Thailand (SET) | 2.86% | SET Index | -0.90% | 0.016 | -50.74% | 20% |
| US (NYSE+NAS+AMEX) | 6.83% | S&P 500 | -1.19% | 0.193 | -51.85% | 0% |
| Italy (MIL) | 5.84% | SPY* | -2.18% | 0.151 | -54.48% | 20% |
*SPY used for South Africa and Italy because no local index data available in FMP.
The Pattern With Local Benchmarks
Six of 14 exchanges beat their local benchmark. Eight underperformed. That's a much better hit rate than the old 4/17, and it tells a different story about where GARP investing works.
The old SPY comparison had a fundamental problem: it mixed currency effects with equity performance. India's 13.7% CAGR in INR looked like +5.7% alpha vs SPY's 8.0% in USD. But the INR depreciated steadily against the dollar over 25 years. Measured against the Sensex (also in INR), the real alpha is +2.6%. Still positive, still meaningful, but honest.
The flip side: Sweden looked like a modest +2.6% vs SPY. Against the OMX30, it's +6.8%. The SEK also weakened against the dollar, which had been masking Sweden's true outperformance.
Where PEG works:
Industrial markets with genuine quality growth (Sweden, Canada, Switzerland, Norway). All four have deep ecosystems of engineering, manufacturing, energy, and materials companies. These sectors produce real earnings growth during commodity and industrial cycles. The quality filters (ROE > 12%) separate the winners from the cyclical debris. Sweden's +6.81% excess and Norway's 0.739 Sharpe are the standout numbers.
Structural growth markets (India). India's +2.56% vs Sensex is lower than the old SPY comparison suggested, but it's real alpha measured in the same currency. PEG < 1 found companies growing faster than their price implied through India's two-decade economic expansion.
Marginal positive (Germany). Germany's +0.56% barely clears zero. The DAX is heavily weighted toward industrials and autos that also show up in PEG screens, so the strategy doesn't differentiate much from the benchmark.
Where PEG doesn't work:
Korea, Taiwan, Singapore, Hong Kong, Thailand, the US full universe, and Italy all show negative excess returns. The reasons vary: export manufacturers with thin margins (Korea, Taiwan), financial-center markets where banks dominate but don't fit PEG's growth sweet spot (Hong Kong, Singapore), and the US mega-cap tech problem where PEG systematically excludes the market's best performers.
Sweden: The Standout
Sweden is the clear winner with local benchmarks. +6.81% excess vs the OMX30, Sharpe of 0.391 compared to the OMX30's 0.060 over the same period. CAGR of 9.98%.
The explanation: Swedish industrials (engineering, manufacturing, pharmaceuticals) have genuine earnings growth backed by strong competitive positions. PEG < 1 on the Stockholm Exchange finds undervalued quality growth more consistently than almost any other market. The 13% average cash rate shows the strategy occasionally can't find 30 qualifying stocks, but when it's invested, it's finding the right companies.
Under the old SPY comparison, Sweden showed +2.62% excess. The SEK's depreciation against the USD was hiding more than 4 percentage points of real alpha.
India: +2.56% vs Sensex
India still works, but the alpha is smaller than previously reported. The old +5.66% vs SPY was inflated by comparing INR returns to a USD benchmark. Against the Sensex (both in INR), the excess is +2.56%.
That's still 25 years of consistent outperformance. $10,000 grew to roughly $270,000 vs $150,000 for the Sensex. The PEG strategy captured India's structural growth with the quality filters keeping you out of the worst speculative names.
The drawdowns remain severe: -66.11% max drawdown, with 2008 and 2011 as the worst episodes. India crashes amplify global crises.
The US Underperformance
The US full-universe result (-1.19%/yr vs S&P 500) demands explanation because most published PEG research shows positive alpha. The difference is the universe.
Published research typically uses S&P 500-constrained backtests. In that setting, PEG < 1 finds genuinely cheap quality within a pool of large-cap quality companies. In the full NYSE+NASDAQ+AMEX universe, PEG < 1 picks up cyclicals at earnings peaks, mid-caps with unreliable growth data, and value traps.
The post-2017 underperformance is the most visible: mega-cap tech (Microsoft, Nvidia, Apple, Meta, Alphabet) drove US returns, and none of these appeared in a PEG < 1 screen because they had high P/E ratios. Systematically excluding the market's highest-performing cohort has consequences.
The excess improved slightly from -1.83% (prior run) to -1.19%, likely from the shift to MOC execution which reduces adverse selection on entry.
Korea: Much Better With Local Benchmarks
Korea's story changes the most dramatically. Against SPY, it showed -4.06% excess. Against the KOSPI, it's -0.77%. The KOSPI itself returned only 4.81% annualized over 25 years, well below the S&P 500's 8.02%. Korean companies are capital-intensive conglomerates (chaebols) with low ROE and thin profit margins. The quality filters (ROE > 12%) cut the universe hard.
The 33% cash rate (highest in the study) confirms the problem: Korean companies frequently can't fill a 30-stock PEG portfolio because too few meet the quality thresholds. When the strategy is invested, it roughly matches the benchmark. When it's in cash, it drags.
What the Data Teaches
Local benchmarks change everything. The old SPY comparison mixed currency effects with equity performance. India's alpha drops from +5.7% to +2.6% when you stop comparing INR returns to a USD index. Sweden's jumps from +2.6% to +6.8%. Germany and Switzerland flip from negative to positive. If you're testing a strategy in local markets, benchmark it locally.
PEG works best in industrial markets. Sweden, Canada, Switzerland, Norway. All have strong ecosystems of engineering, manufacturing, and materials companies that produce genuine earnings growth. The quality filters (ROE > 12%, D/E < 1.5) separate real growers from cyclical noise in these markets more effectively than in financial-center or tech-dominated markets.
Universe selection still matters. The US full-universe result (-1.19%) vs the well-documented S&P 500 PEG premium shows that the same factor can produce opposite results depending on the stock pool. In markets where the quality threshold meaningfully filters (Sweden, Canada, Norway), PEG adds value. In markets where mega-caps drive returns (US), it misses the boat.
Excluded Exchanges
We tested 14 exchanges. Four were excluded from prior runs:
| Exchange | Reason |
|---|---|
| JPX (Japan) | No FY financial data in warehouse (0 qualifying stocks) |
| LSE (UK) | No FY financial data in warehouse (0 qualifying stocks) |
| ASX (Australia) | Fatal adjClose split adjustment issues (produces 58%+ CAGR artifacts) |
| SAO (Brazil) | Same adjClose issue as ASX (produces 3,250% single-year returns) |
China (SHZ+SHH), Indonesia (JKT), and Malaysia (KLS) were included in the prior SPY-benchmarked run but returned API errors in this run. They'll be added back when data availability is resolved.
See DATA_QUALITY_ISSUES.md for technical details on each exclusion.
Run It Yourself
# Run all exchanges
cd backtests
python3 peg-ratio/backtest.py --global --output peg-ratio/results/exchange_comparison.json --verbose
# Run a specific exchange
python3 peg-ratio/backtest.py --preset india --output peg-ratio/results/india.json --verbose
# Live screen (US)
python3 peg-ratio/screen.py --preset us
# Live screen (India)
python3 peg-ratio/screen.py --preset india
Full code: github.com/ceta-research/backtests/tree/main/peg-ratio
Limitations
25 years is long but not infinite. The 2000-2025 period included a dot-com bust, financial crisis, COVID crash, and the mega-cap tech era. Different periods might show different results. The early 2000s value cycle was particularly favorable for low-PEG strategies globally.
Two exchanges use SPY as proxy. South Africa and Italy don't have local index data in FMP, so they're benchmarked against SPY. This reintroduces the currency mixing problem for those two markets.
Point-in-time data: 45-day lag on financial data to avoid look-ahead bias. Quarterly rebalancing requires this discipline. Earlier backtests without this lag often show higher (incorrect) alpha.
Transaction costs: Applied using a size-tiered model. Actual costs depend on broker, market, and portfolio size.
Survivorship bias: The backtest includes companies that went bankrupt or were delisted, which is the correct approach. Survivorship bias inflates results for strategies that only test currently-traded stocks.
Data: Ceta Research (FMP financial data warehouse), 14 exchanges, 2000-2025. Returns and benchmarks in local currency (except South Africa and Italy, benchmarked vs SPY). Full methodology: METHODOLOGY.md