FCF Growth Across 13 Global Exchanges: Where It Works and Where It Fails
We ran the same FCF growth screen across 13 exchanges over 25 years. Only 3 beat SPY on CAGR. The real story is in the down capture column — the signal works as a downside shield across most markets even where it fails to generate alpha.
We ran the same FCF growth screen across 13 global exchanges from 2000 to 2025. Same signal, same quality filters, same portfolio construction rules. Ten of thirteen exchanges beat their local benchmark. The gap between the best and worst outcome is 6.7 percentage points of annual excess return, and the pattern tells you more about market structure than about cash flow quality.
Contents
- Method
- Full Results: 13 Exchanges
- Key Findings
- Down Capture: The Main Story
- Exchange Notes
- Why Local Benchmarks Change the Story
- Limitations
- Run It Yourself

Data: FMP financial data warehouse, 2000–2025. Updated March 2026.
Method
The same screen ran on every exchange: FCF growth YoY above 15%, operating cash flow growth above 0%, ROE above 10%, debt-to-equity below 1.5. Exchange-specific market cap thresholds (~$200-500M USD equivalent). Top 30 stocks by FCF growth rate, equal-weighted, rebalanced annually each July. The 45-day data lag after fiscal year-end prevents lookahead bias from late filers.
| Parameter | Value |
|---|---|
| Signal | FCF growth YoY >15%, OCF growth YoY >0% |
| Quality | ROE >10%, D/E <1.5 |
| Selection | Top 30 by FCF growth, equal weight |
| Rebalancing | Annual (July), 45-day data lag |
| Benchmark | Local market index (Sensex for India, DAX for Germany, TSX Composite for Canada, etc.) |
| Period | 2000-2025 |
| Code | github.com/ceta-research/backtests |
Returns are in local currency for each exchange. Benchmarks are local indices, not SPY. This provides an apples-to-apples comparison: how does the FCF growth screen perform against its own market?
Excluded from the study: Singapore (average 8.4 qualifying stocks, below the 10-stock minimum required to deploy capital), Australia (adjClose data artifacts from corporate actions), and Brazil (same adjClose issue).
Full methodology: METHODOLOGY.md
Full Results: 13 Exchanges
| Exchange | CAGR | Local Benchmark | Bench CAGR | Excess | Down Capture | Sharpe | MaxDD | Win Rate |
|---|---|---|---|---|---|---|---|---|
| UK (LSE) | 6.75% | FTSE 100 | 1.23% | +5.52% | 58.4% | 0.153 | -41.90% | 84% |
| Sweden (STO) | 7.77% | OMX Stockholm 30 | 2.55% | +5.22% | 45.4% | 0.289 | -44.09% | 72% |
| Canada (TSX) | 8.53% | TSX Composite | 3.95% | +4.58% | 26.6% | 0.320 | -28.57% | 68% |
| Germany (XETRA) | 8.34% | DAX | 5.04% | +3.30% | 45.0% | 0.329 | -32.52% | 60% |
| Switzerland (SIX) | 5.04% | SMI | 1.74% | +3.30% | 50.3% | 0.264 | -40.84% | 68% |
| India (NSE) | 15.05% | Sensex | 12.06% | +3.0% | 27.6% | 0.347 | -20.31% | 64% |
| China (SHZ+SHH) | 4.93% | SSE Composite | 2.43% | +2.50% | 71.1% | 0.070 | -47.37% | 44% |
| Japan (JPX) | 5.62% | Nikkei 225 | 3.31% | +2.31% | 50.9% | 0.278 | -45.98% | 52% |
| Hong Kong (HKSE) | 3.13% | Hang Seng | 1.64% | +1.49% | 92.2% | 0.003 | -41.09% | 52% |
| Taiwan (TAI+TWO) | 4.21% | TAIEX | 4.09% | +0.12% | 50.7% | 0.244 | -14.69% | 44% |
| Korea (KSC) | 4.14% | KOSPI | 5.35% | -1.21% | 50.5% | N/A | -27.60% | 48% |
| South Africa (JNB) | 6.60% | S&P 500* | 7.85% | -1.25% | -27.9% | -0.152 | -32.57% | 44% |
| US (NYSE+NASDAQ+AMEX) | 6.29% | S&P 500 | 7.85% | -1.56% | 51.6% | 0.234 | -32.01% | 36% |
*South Africa falls back to S&P 500 benchmark because FMP's stock_eod table doesn't contain JSE indices.
Note: Most local benchmarks significantly underperformed the S&P 500 (7.85% CAGR) over this 25-year period. FTSE 100 returned only 1.23%, TSX Composite 3.95%, DAX 5.04%. Beating a local benchmark is easier than beating SPY when the local market itself trails SPY by 2-6 percentage points per year.
Key Findings
1. Ten of thirteen exchanges beat their local benchmark.
That's the headline. The US and Korea are the two exceptions where the local market index outperformed the FCF growth screen. South Africa trails too, but only because it falls back to SPY (no JSE index data). In every other market, the FCF growth screen delivered positive alpha against its own benchmark.
The magnitude varies. UK leads at +5.52% excess. Sweden +5.22%. Canada +4.58%. Germany and Switzerland both +3.30%. India +3.0%. These are all meaningful, compounding excess returns that would produce substantial wealth differences over 25 years.
China (+2.50%), Japan (+2.31%), Hong Kong (+1.49%), and Taiwan (+0.12%) show smaller but positive excess. The signal works in these markets too, just with less alpha.
The US (-1.56%) and Korea (-1.21%) are the only developed/established markets where the strategy trails its local index. The US case makes sense: the S&P 500 itself is dominated by mega-cap tech companies (Apple, Microsoft, Google, Amazon, Nvidia) that don't pass an FCF growth screen. The S&P 500 is an outlier benchmark globally. Most country indices have far lower returns.
2. FCF growth works as a downside shield in most markets, not an alpha generator relative to SPY.
When benchmarked against SPY (7.85% CAGR), only three exchanges outperformed: India, Canada, and Germany (marginally). Ten exchanges trail SPY by 0.11% to 4.77% per year.
But when benchmarked against their own local index, ten exchanges outperformed. The difference is that most local indices significantly underperformed SPY. The FTSE 100 returned 1.23%, TSX Composite 3.95%, DAX 5.04%. Beating these benchmarks is a lower bar than beating SPY.
The signal is primarily a quality filter that tilts portfolios toward cash-generating companies. In markets where the broad index is weak (UK, Sweden, Canada), this tilt adds meaningful value. In markets where the broad index is strong (US, Korea), the tilt doesn't keep up.
3. India is no longer unique—but it's still exceptional.
Earlier versions of this analysis (benchmarked against SPY) showed India as a massive outlier with +7.14% excess. Against the Sensex, India's excess drops to +3.0%, which puts it in the same range as Canada (+4.58%) and Germany (+3.30%).
But India still stands out on two dimensions: - Down capture of 27.6% is tied with Canada (26.6%) for the lowest in the dataset. When the Sensex fell, the portfolio absorbed only about a quarter of the downside. - Best absolute CAGR at 15.05%. No other exchange comes close. Canada is second at 8.53%.
India is not unique in generating alpha, but it's unique in combining strong absolute returns with strong downside protection.
4. Taiwan has the best risk-adjusted profile for capital preservation.
Max drawdown of -14.69% is exceptional. Every other exchange had drawdowns between -20% and -47%. Taiwan's down capture (50.7%) is middle-of-pack, but the absolute drawdown number shows the portfolio genuinely avoided losses.
The cost: Taiwan barely beats the TAIEX (+0.12% excess). And the portfolio had 28% cash years in the early period when fewer than 10 stocks qualified. Cash periods flatter the drawdown numbers.
If the question is "where can I run this strategy and not lose money," Taiwan is the answer. If the question is "where can I beat my local index by a wide margin," look at UK, Sweden, or Canada.
5. The US is the exception, not the rule.
The US (-1.56% excess) is one of only two major markets where the FCF growth screen trails its local index. This is unusual because the S&P 500 itself is an exceptional benchmark. It returned 7.85% annually over this period while most global indices returned 1-5%.
The S&P 500's returns are dominated by a small number of mega-cap tech companies that don't pass an FCF growth filter. Apple, Amazon, Google, and Tesla went through long periods of zero or negative FCF while building infrastructure. The companies that pass the FCF screen in the US are typically mature, lower-growth, capital-light businesses. They're good businesses, but they're not where the S&P 500's returns came from.
In every other developed market, the local benchmark is more diversified and less concentrated in high-multiple growth stocks. The FCF screen captures a meaningful slice of the market's quality layer, and that layer outperformed.
Down Capture: The Main Story
The down capture column shows how much of the local benchmark's downside the portfolio absorbed in down years.
Here's the distribution:
- Below 30% (exceptional protection): India (27.6%), Canada (26.6%)
- 30-60% (strong protection): Germany (45.0%), Sweden (45.4%), Switzerland (50.3%), Korea (50.5%), Taiwan (50.7%), Japan (50.9%), US (51.6%)
- 60-90% (moderate protection): UK (58.4%), China (71.1%)
- Above 90% (minimal protection): Hong Kong (92.2%)
- Negative (portfolio rose when benchmark fell): South Africa (-27.9% vs SPY)
The markets with the lowest down capture are markets where FCF-generating companies have structural insulation from the local benchmark's worst years.
India (27.6%): IT exporters with dollar revenues, FMCG companies serving domestic consumers, and private financials with tight credit discipline. These businesses keep generating cash through rupee volatility and domestic slowdowns.
Canada (26.6%): Resource and energy companies. The TSX Composite is commodity-heavy. FCF-growing energy producers often have pricing power or low production costs. When the TSX falls due to oil price declines, the companies that still grow FCF are the ones with cost advantages. They outperform.
Germany (45.0%) and Sweden (45.4%): Export-oriented industrials with global customer bases. When the DAX or OMX30 falls due to European-specific stress (sovereign debt, Brexit, etc.), these companies still serve global demand. The FCF filter selects the ones with durable margins.
The markets with high down capture (UK 58.4%, China 71.1%, Hong Kong 92.2%) are markets where even high-quality, FCF-growing companies are tightly coupled to the local index's drivers. A UK industrial exporting to Europe or a Chinese manufacturer serving domestic demand both see cash flows decline when their local market contracts. The FCF quality filter removes the most fragile companies but can't decouple the underlying business from its end markets.
Hong Kong at 92.2% is the extreme case. The FCF growth filter selected a set of Hong Kong-listed companies that were nearly as correlated with local downside as the Hang Seng itself. That's a structural market problem, not a signal problem.
Exchange Notes
UK (LSE): The best excess return in the dataset at +5.52% vs FTSE 100. The FTSE 100 itself is a weak benchmark (1.23% CAGR over 25 years), dominated by financials and energy. The FCF growth screen tilts toward industrials and consumer companies with better cash generation. Down capture of 58.4% shows moderate protection. Win rate of 84% is exceptional—the portfolio beat the FTSE 100 in 21 out of 25 years.
Sweden (STO): +5.22% excess vs OMX Stockholm 30. The OMX30 returned only 2.55% annually, so this is a case of a weak local benchmark. Down capture of 45.4% is strong. The portfolio captured the upside of Swedish quality compounders (industrials, pharmaceuticals) while avoiding some of the downside from cyclical exporters.
Canada (TSX): +4.58% excess vs TSX Composite. Down capture of 26.6% is tied with India for the best in the dataset. Up capture of 129.95% means the portfolio captured 30% more upside than the TSX in rising years. Asymmetry profile is exceptional. Win rate of 68% (17/25 years). The TSX Composite itself is weak (3.95% CAGR), heavily tilted toward resources. The FCF screen finds the cash-generating layer within that commodity-heavy market.
Germany (XETRA): +3.30% excess vs DAX. Down capture of 45.0% shows the portfolio absorbed less than half the DAX's downside. The DAX returned 5.04% annually, which is mid-pack globally. The FCF screen in Germany captures industrials and exporters with genuine cash generation. Win rate of 60%.
Switzerland (SIX): +3.30% excess vs SMI, matching Germany. Down capture of 50.3%. Win rate of 68%. Switzerland's universe is thin (average 17.3 stocks), which creates concentration risk. But the quality layer in Switzerland is genuine—pharmaceutical exporters, specialty industrials. The SMI itself is weak (1.74% CAGR), so beating it is a low bar.
India (NSE): +3.0% excess vs Sensex. Down capture of 27.6%. Up capture of 112.3%. Absolute CAGR of 15.05% is the highest in the dataset. India's results dropped from +7.14% excess when benchmarked against SPY to +3.0% when benchmarked against Sensex because the Sensex itself returned 12.06%—a strong benchmark. But India still combines the best absolute returns with exceptional downside protection. Win rate of 64%.
China (SHZ+SHH): +2.50% excess vs SSE Composite. Down capture of 71.1% is higher than desired. The SSE Composite returned only 2.43%, one of the weakest benchmarks in the dataset. Chinese financial reporting quality introduces noise. The signal may be selecting genuine cash generators, or it may be selecting companies with statements that pass the filters. Win rate of 44%.
Japan (JPX): +2.31% excess vs Nikkei 225. Down capture of 50.9%. Max drawdown of -45.98% is the worst in the dataset. The Nikkei returned 3.31%, which is weak but not the weakest. Japan's FCF companies are often mature industrials with cyclical cash flows. The screen provides some alpha but doesn't meaningfully reduce drawdown. Win rate of 52%.
Hong Kong (HKSE): +1.49% excess vs Hang Seng. Down capture of 92.2% is terrible—the portfolio absorbed nearly all the Hang Seng's downside. Absolute CAGR of 3.13% is the lowest in the dataset. Hong Kong's market is dominated by mainland China-linked names and property developers. The FCF growth screen doesn't provide the insulation it does in other markets. Win rate of 52%.
Taiwan (TAI+TWO): +0.12% excess vs TAIEX. Essentially flat. But max drawdown of -14.69% is the best risk number in the dataset. Taiwan's FCF companies are often tech supply chain businesses with genuine cash characteristics. The portfolio had 28% cash years early in the period, which flatters the drawdown number. This is a capital preservation strategy, not an alpha generator. Win rate of 44%.
Korea (KSC): -1.21% excess vs KOSPI. The KOSPI returned 5.35%, and the portfolio returned 4.14%. One of two markets where the strategy trails its local index. Down capture of 50.5% is middle-of-pack. Korea's FCF growers exist, but the overall market structure means the upside doesn't flow through to them. Win rate of 48%.
South Africa (JNB): -1.25% excess vs SPY (no JSE index data available). Down capture of -27.9% means the portfolio rose when SPY fell—a genuine positive. But absolute CAGR of 6.60% sits below South Africa's ~9% government bond yield, so the Sharpe ratio is negative (-0.152). For South African investors, this strategy didn't clear the local cost of capital. Win rate of 44%.
US (NYSE+NASDAQ+AMEX): -1.56% excess vs S&P 500. The S&P 500 returned 7.85%, driven by mega-cap tech. The FCF growth screen systematically excludes those companies during their high-growth, low-FCF phases. Down capture of 51.6% shows the portfolio absorbed about half the S&P 500's downside. Win rate of only 36% (9/25 years). The US is the global exception where the local index is so strong that a quality filter trails it.
Why Local Benchmarks Change the Story
Comparing global strategies against SPY creates a false impression that most markets fail. The reality: most local indices significantly underperformed SPY over this 25-year period.
The FTSE 100 returned 1.23%. The TSX Composite returned 3.95%. The DAX returned 5.04%. These are all developed-market indices with deep liquidity and strong corporate governance. They still trailed SPY by 2-6 percentage points per year.
The S&P 500 is an exceptional benchmark. It's dominated by the world's largest, most profitable tech companies with global revenue streams and network effects. No other country has an index with that concentration of high-margin, capital-light, winner-take-most businesses.
When you benchmark a global FCF growth strategy against local indices, the story changes. Ten of thirteen markets show positive alpha. The FCF growth signal works in most markets—it just doesn't beat the S&P 500's exceptional returns.
The US is the outlier, not the rule.
Limitations
Local currency vs cross-market comparison. Returns are calculated in local currency. An Indian investor running this strategy in India earns 15.05% in INR. A US investor would need to account for INR/USD depreciation (~3-4% annually over this period). Currency effects are not modeled.
Cash periods distort certain metrics. When the signal fires fewer than 10 qualifying stocks, the portfolio holds cash. India had 5 cash years (2000-2004). Taiwan had 28% cash years. Cash periods improve down capture statistics because cash doesn't fall when markets do. The strategy's genuine downside protection is better evaluated in years when it was fully invested.
Data quality varies by exchange. Chinese financial statements, South African disclosures, and historical Taiwanese filings carry more noise than US or German data. The FCF growth filter may behave differently in practice when applied to markets where accounting standards are less rigorous.
Thin universes create concentration risk. Switzerland averaged 17.3 stocks. South Africa had fewer than 10 qualifying stocks in some years. Equal weighting in a 12-stock portfolio creates idiosyncratic risk. A single sector rotation can drive outsized single-year swings.
Transaction costs are estimated. Real-world execution costs depend on market microstructure, liquidity, and position sizing. Emerging market exchanges typically have higher effective spreads. The edge in markets like India or Korea may be partially offset by higher execution friction.
25-year window. Market structure, reporting quality, and economic regimes shift over that horizon. Any exchange-level conclusion carries the caveat that regime change could alter the result.
Benchmark data gaps. South Africa falls back to SPY because FMP's stock_eod table doesn't contain JSE indices. Sweden, Thailand, and several other exchanges lack local indices in the dataset—they all fall back to SPY. This affects the "excess return" calculation for those markets.
Run It Yourself
The full backtest code is open source at github.com/ceta-research/backtests.
To run the FCF growth strategy on all exchanges:
python run_backtest.py --strategy fcf-growth --global
Individual exchanges:
python run_backtest.py --strategy fcf-growth --exchange NSE # India
python run_backtest.py --strategy fcf-growth --exchange TSX # Canada
python run_backtest.py --strategy fcf-growth --exchange XETRA # Germany
The data runs through Ceta Research's data platform, which covers 70,000+ global securities with FMP fundamentals, EOD prices, and a DuckDB query layer.
Data: Ceta Research (FMP warehouse), TTM metrics. Backtest period: 2000–2025. Execution: MOC (next-day close).