52-Week Low Quality: Global Comparison Across 14 Exchanges

52-Week Low Quality: Global Comparison Across 14 Exchanges

52-Week Low Quality: We Tested It on 14 Global Exchanges. Here's What Happened.

The strategy is straightforward: buy financially healthy stocks that are near their annual lows, wait for them to recover, rotate quarterly. Simple premise. The question is whether the premise holds globally or just in certain market structures.

Contents

  1. Method
  2. What We Found
  3. Why Germany Works
  4. The US Paradox
  5. Where the Strategy Structurally Fails
  6. The Down-Capture Story
  7. Run It Yourself
  8. Limitations

We ran this screen on 14 exchanges covering 2002–2025. The results span from a near-10% Sharpe-beating CAGR in Germany to a portfolio that lost 45% of its value in Hong Kong. Most exchanges fall somewhere in between, underperforming SPY at varying levels of pain.

Here's the full picture.


Method

Every quarter (January, April, July, October), screen stocks trading within 15% of their 52-week low with a Piotroski F-score of 7 or higher. The Piotroski filter requires improving profitability, leverage, and efficiency, it removes companies that are cheap for fundamental reasons. Hold up to 30 stocks equal-weight, minimum 5 to deploy capital. Costs: 0.1% per trade. Filing lag: 45 days.

Benchmark: SPY, 9.67% CAGR, Sharpe 0.461, Max Drawdown -45.53%, $10,000 → $89,485 over 2002–2025.


What We Found

Exchange CAGR vs SPY Sharpe MaxDD Up-Cap Dn-Cap Cash% Avg Stks $10k→
XETRA (Germany) 8.95% -0.71% 0.512 -32.05% 63.1% 30.6% 1% 24.5 $76,617
BSE_NSE (India) 7.11% -2.55% 0.023 -59.85% 71.7% 42.9% 25% 24.2 $51,143
TSX (Canada) 6.22% -3.44% 0.226 -36.61% 70.4% 71.7% 8% 20.0 $41,932
NYSE+NASDAQ+AMEX (US) 6.18% -3.48% 0.191 -47.70% 94.5% 114.4% 0% 28.5 $41,571
SHZ+SHH (China) 5.38% -4.28% 0.097 -54.92% 57.0% 20.5% 8% 26.5 $34,726
STO (Sweden) 2.21% -7.46% 0.013 -54.31% 49.9% 71.4% 53% 15.1 $16,805
SES (Singapore) 1.67% -7.99% -0.040 -16.01% 18.4% 18.2% 64% 9.1 $14,827
KSC (Korea) 1.10% -8.56% -0.109 -45.91% 47.8% 76.3% 36% 21.1 $12,976
SIX (Switzerland) 0.26% -9.41% -0.018 -55.27% 33.1% 60.1% 24% 17.7 $10,634
TAI_TWO (Taiwan) 0.11% -9.55% -0.058 -45.69% 35.1% 63.9% 31% 23.3 $10,275
OSL (Norway) -0.35% -10.02% -0.427 -23.94% 11.2% 25.4% 86% 7.2 $9,194
JNB (South Africa) -0.12% -9.79% -0.558 -58.20% 19.3% 27.2% 78% 8.7 $9,718
SET (Thailand) -0.85% -10.52% -0.160 -55.05% 39.4% 74.2% 39% 21.1 $8,162
HKSE (Hong Kong) -2.51% -12.17% -0.260 -79.81% 50.5% 115.8% 15% 23.3 $5,472

France (PAR) excluded: Data pipeline gap, the FMP key_metrics FY table has insufficient coverage for this market, returning zero qualifying stocks across all 95 quarters. Results wouldn't be meaningful.

Every exchange underperformed SPY on raw CAGR. Germany came closest at -0.71% excess, and it's the only exchange where the risk-adjusted profile (Sharpe 0.512) actually beats SPY's Sharpe of 0.461.

52-Week Low Quality. CAGR by Exchange vs SPY
52-Week Low Quality. CAGR by Exchange vs SPY


Why Germany Works

XETRA is the standout. 8.95% CAGR, Sharpe 0.512, max drawdown of just -32.05% (better than SPY's -45.53%). Alpha of +3.16% with beta of 0.495, it delivered genuine risk-adjusted outperformance while cutting market exposure nearly in half.

The German market composition explains this. XETRA is dominated by Mittelstand-adjacent industrials: precision manufacturers, specialty chemicals, automotive suppliers, capital equipment companies. These businesses are genuinely cyclical. They trade near 52-week lows when order books dry up during slowdowns. They have strong Piotroski scores because their underlying business models are sound. And they mean-revert cleanly when the cycle turns.

The down-capture of 30.6% is the best in the table. When SPY was collapsing in 2008, German industrial names with solid balance sheets held up relatively well, or at least recovered faster. The strategy found exactly what it was designed to find: temporarily depressed stocks in structurally sound businesses.

The near-zero cash rate (1% of quarters) means the screen consistently found enough qualifying names. XETRA has sufficient breadth in the right sectors.


The US Paradox

The US result looks strange at first. Zero cash periods, the market always had qualifying stocks. The second-lowest CAGR among the major exchanges at 6.18%. Worse Sharpe (0.191) than Canada or Germany. Down-capture of 114.4%.

The explanation: the US market is the most efficiently priced in the world. When a US stock drops to its 52-week low, thousands of analysts, quant funds, and algorithmic traders have already noticed. The mean-reversion signal gets arbitraged away before a quarterly rebalancing strategy can capture it. The 52-week-low discount exists, but it evaporates fast. By the time the screen fires and you buy, much of the recovery is already priced in.

The 114.4% down-capture is the other side of this problem. In US corrections, there's no flight to safety in beaten-down value stocks. Everything falls together. Liquidity and market depth mean these names correlate tightly with the index during risk-off episodes.

Canada (TSX) performs meaningfully better at 6.22% CAGR and Sharpe 0.226. Canadian equities have more exposure to materials and energy companies, genuinely cyclical businesses where temporary low prices signal a setup, not a structural decline. The mean-reversion mechanism works better when the market composition is less efficiently covered.


Where the Strategy Structurally Fails

Three exchanges are effectively unusable: Norway (86% cash), Singapore (64% cash), and South Africa (78% cash).

Norway's Sharpe of -0.427 is the worst in the table after South Africa. But the cash rate tells the real story. 86% of quarters had fewer than 5 qualifying stocks. The Oslo Bors is heavily weighted toward energy and shipping. These sectors are concentrated, and the Piotroski screen is demanding, energy companies near lows often have deteriorating cash flows and leverage metrics. The screen correctly avoids them, but that means the strategy mostly sits idle.

Singapore returned 1.67% CAGR but with a down-capture of just 18.2%. When it fires, it doesn't fall much. The problem is it barely fires. 64% cash means you're earning money market rates for two-thirds of the test period while the 18.4% up-capture limits gains when you are invested. Net result: $14,827 from $10,000 over 24 years.

South Africa has a -0.558 Sharpe, the worst absolute risk-adjusted number in the table. The 78% cash rate plus a -58.20% max drawdown when it does invest is a brutal combination. JSE qualifying names tend to be in mining and resources: sectors where 52-week lows often precede further declines due to commodity cycle dynamics.


The Down-Capture Story

Down-capture is the metric that separates useful strategies from expensive index tracking.

Exchange Down-Capture
China (SHH+SHZ) 20.5%
Germany (XETRA) 30.6%
South Africa (JNB) 27.2%
Norway (OSL) 25.4%
India (BSE_NSE) 42.9%
Singapore (SES) 18.2%
US 114.4%
Hong Kong (HKSE) 115.8%

China's 20.5% down-capture is the standout. When global markets sold off, China-listed value stocks with Piotroski 7+ scores held up. The domestic economic cycle doesn't track the S&P 500 tightly. China didn't participate in the 2008 crash to the same degree, at least not in the A-share market, which has different investor composition and capital controls limiting foreign selling.

The problem with China is the overall CAGR of 5.38% with a Sharpe of 0.097. The crash protection is real, but it doesn't translate into compounding returns. The up-capture of 57.0% means China value stocks miss a lot of the bull markets too.

Germany is the only exchange combining genuine crash protection (30.6% down-capture) with competitive returns (8.95% CAGR) and positive alpha. Everything else involves a meaningful trade-off.


Part of a Series: US | Switzerland | India | Hong Kong | Germany | China | Canada

Run It Yourself

The query below screens all supported exchanges simultaneously. Filter by exchange column to isolate specific markets.

WITH
inc AS (
 SELECT symbol, netIncome, grossProfit, revenue,
 ROW_NUMBER() OVER (PARTITION BY symbol ORDER BY dateEpoch DESC) AS rn
 FROM income_statement WHERE period = 'FY' AND netIncome IS NOT NULL
),
bal AS (
 SELECT symbol, totalAssets, totalCurrentAssets, totalCurrentLiabilities,
 longTermDebt, totalStockholdersEquity,
 ROW_NUMBER() OVER (PARTITION BY symbol ORDER BY dateEpoch DESC) AS rn
 FROM balance_sheet WHERE period = 'FY' AND totalAssets > 0
),
cf AS (
 SELECT symbol, operatingCashFlow,
 ROW_NUMBER() OVER (PARTITION BY symbol ORDER BY dateEpoch DESC) AS rn
 FROM cash_flow_statement WHERE period = 'FY' AND operatingCashFlow IS NOT NULL
),
piotroski AS (
 SELECT ic.symbol,
 CASE WHEN ic.netIncome > 0 THEN 1 ELSE 0 END
 + CASE WHEN cfc.operatingCashFlow > 0 THEN 1 ELSE 0 END
 + CASE WHEN (ic.netIncome/bc.totalAssets) > (ip.netIncome/bp.totalAssets) THEN 1 ELSE 0 END
 + CASE WHEN cfc.operatingCashFlow/bc.totalAssets > ic.netIncome/bc.totalAssets THEN 1 ELSE 0 END
 + CASE WHEN (COALESCE(bc.longTermDebt,0)/bc.totalAssets) < (COALESCE(bp.longTermDebt,0)/bp.totalAssets) THEN 1 ELSE 0 END
 + CASE WHEN (bc.totalCurrentAssets/bc.totalCurrentLiabilities) > (bp.totalCurrentAssets/bp.totalCurrentLiabilities) THEN 1 ELSE 0 END
 + CASE WHEN bc.totalStockholdersEquity >= bp.totalStockholdersEquity THEN 1 ELSE 0 END
 + CASE WHEN (ic.revenue/bc.totalAssets) > (ip.revenue/bp.totalAssets) THEN 1 ELSE 0 END
 + CASE WHEN (ic.grossProfit/ic.revenue) > (ip.grossProfit/ip.revenue) THEN 1 ELSE 0 END
 AS f_score
 FROM (SELECT * FROM inc WHERE rn=1) ic
 JOIN (SELECT * FROM inc WHERE rn=2) ip ON ic.symbol = ip.symbol
 JOIN (SELECT * FROM bal WHERE rn=1) bc ON ic.symbol = bc.symbol
 JOIN (SELECT * FROM bal WHERE rn=2) bp ON ic.symbol = bp.symbol
 JOIN (SELECT * FROM cf WHERE rn=1) cfc ON ic.symbol = cfc.symbol
),
prices_52w AS (
 SELECT symbol,
 LAST_VALUE(adjClose) OVER (PARTITION BY symbol ORDER BY dateEpoch ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS current_price,
 MIN(adjClose) OVER (PARTITION BY symbol) AS low_52w
 FROM stock_eod
 WHERE date >= CURRENT_DATE - INTERVAL '365 days' AND adjClose > 0
),
price_summary AS (
 SELECT symbol, MAX(current_price) AS current_price, MIN(low_52w) AS low_52w
 FROM prices_52w GROUP BY symbol
)
SELECT pio.symbol, p.companyName, p.exchange, p.sector,
 pio.f_score,
 ROUND(ps.current_price, 2) AS current_price,
 ROUND(ps.low_52w, 2) AS low_52w,
 ROUND((ps.current_price - ps.low_52w)/ps.low_52w * 100, 1) AS pct_above_low,
 ROUND(k.marketCap/1e9, 2) AS mktcap_b
FROM piotroski pio
JOIN profile p ON pio.symbol = p.symbol
JOIN price_summary ps ON pio.symbol = ps.symbol
JOIN key_metrics_ttm k ON pio.symbol = k.symbol
WHERE k.marketCap > 100000000
 AND pio.f_score >= 7
 AND (ps.current_price - ps.low_52w)/ps.low_52w <= 0.15
 AND ps.current_price >= 1.0
ORDER BY (ps.current_price - ps.low_52w)/ps.low_52w ASC
LIMIT 30

Run the live global screen on Ceta Research Data Explorer.

52-Week Low Quality. Sharpe Ratio by Exchange vs SPY
52-Week Low Quality. Sharpe Ratio by Exchange vs SPY


Limitations

Benchmark choice: SPY as a single global benchmark isn't perfectly fair for every exchange. A German investor compares to DAX; an Indian investor to Nifty. The SPY benchmark is used for consistent cross-exchange comparison, not as the applicable benchmark for each local market.

Currency effects: All returns are in local currency. Exchange rates matter for international investors. The Swiss franc's safe-haven appreciation, the Indian rupee's depreciation, and the HKD's USD peg all affect USD-denominated returns differently.

Survivorship bias: Delisted companies are excluded across all exchanges. This effect is most pronounced in markets with high delistings (Hong Kong 2020–2024, emerging markets generally). Results are modestly overstated in those markets.

Period dependency: 2002–2025 includes two global crashes, a long QE-driven bull market, and a tech-led recovery. Results from other 24-year windows would differ. Germany's outperformance is consistent across sub-periods; other results are more period-sensitive.

Market structure changes: The strategy's performance in some exchanges (Hong Kong, China) reflects regime changes not present in the backtest's early years. Mean-reversion assumptions break down when market structure shifts.

this strategy has one reliable implementation. XETRA German equities. The rest are either structural misfits (too few qualifying stocks) or markets where the mean-reversion mechanism doesn't hold.


Data: Ceta Research (FMP financial data warehouse), 2002–2025. Full methodology: backtests/METHODOLOGY.md. Backtest code: backtests/52-week-low/.

Read more