FCF Compounders on UK Stocks: +6.82% Annual Excess vs FTSE 100 Over 25 Years
FCF Compounders screen on LSE from 2000-2025. 8.04% CAGR vs 1.23% for the FTSE 100. The filter was invested in only 13 of 25 years, but when it fired, it beat the benchmark by an average of 15% per year.
FCF Compounders on UK Stocks: Quality Cash Growth on the LSE for 25 Years
The FTSE 100 gained 1.23% annually over 25 years. A strict quality screen for LSE-listed FCF compounders returned 8.04% over the same period. The filter couldn't find 10 qualifying stocks in 12 of those 25 years, holding cash instead. But when it could build a portfolio, it beat the benchmark consistently. The 13 invested years averaged strong double-digit returns, and the +6.82% annual excess vs the FTSE 100 is the most direct measure of the signal's strength in UK equities.
Contents
- Method
- The Signal
- The Screen (SQL)
- What We Found
- $10,000 grew to $69,200. The FTSE 100 reached $13,600.
- The 12 Cash Years
- Annual Returns (Invested Years)
- The Cash Drag Problem
- Limitations
- Run It Yourself
- Part of a Series
Data: FMP financial data warehouse, 2000–2025. Updated March 2026.
Method
Data source: Ceta Research (FMP financial data warehouse) Universe: LSE (London Stock Exchange), market cap > £500M Period: 2000-2025 (25 years, 25 annual periods) Rebalancing: Annual (July), top 30 by highest ROIC, equal weight Benchmark: FTSE 100 (^FTSE price index, GBP) Cash rule: Hold cash if fewer than 10 stocks qualify Costs: Size-tiered transaction costs (0.1% large-cap, 0.3% mid-cap, 0.5% small-cap)
Note on the benchmark: The ^FTSE price index doesn't include dividends. FTSE 100 total return (with dividends) is meaningfully higher — roughly 4-5% annually. Strategy returns use FMP adjClose, which is dividend-adjusted for individual stocks. This creates a partial mismatch that modestly overstates the raw excess. The strategy's consistent outperformance suggests the signal is real regardless, but readers should interpret the +6.82% figure as an upper bound.
Financial data uses a 45-day lag to prevent look-ahead bias. July rebalancing ensures annual filings are available. Full methodology: Ceta Research Backtest Methodology.
The Signal
| Filter | Threshold | Why |
|---|---|---|
| FCF growth years | >= 4 of last 5 FY years | Consistent cash generation |
| All FCF positive | Every year > 0 | No negative cash flow years |
| ROIC | > 15% | Capital-efficient business |
| Operating Margin | > 15% | Real pricing power |
| Market Cap | > £500M | Liquid stocks only |
Selection: Top 30 by highest ROIC, equal weight.
The Screen (SQL)
WITH yearly_fcf AS (
SELECT
symbol,
freeCashFlow,
date,
LAG(freeCashFlow) OVER (PARTITION BY symbol ORDER BY date) AS prev_fcf
FROM cash_flow_statement
WHERE period = 'FY'
AND freeCashFlow IS NOT NULL
),
fcf_stats AS (
SELECT
symbol,
COUNT(*) AS total_pairs,
SUM(CASE WHEN freeCashFlow > prev_fcf AND prev_fcf > 0 THEN 1 ELSE 0 END) AS growth_years,
MIN(freeCashFlow) AS min_fcf,
MIN(prev_fcf) AS min_prev_fcf
FROM yearly_fcf
WHERE prev_fcf IS NOT NULL
AND date >= '2019-01-01'
GROUP BY symbol
HAVING COUNT(*) >= 4
)
SELECT
fs.symbol,
p.companyName,
p.sector,
fs.growth_years,
ROUND(k.returnOnInvestedCapitalTTM * 100, 1) AS roic_pct,
ROUND(r.operatingProfitMarginTTM * 100, 1) AS op_margin_pct,
ROUND(k.marketCap / 1e9, 1) AS market_cap_billions
FROM fcf_stats fs
JOIN key_metrics_ttm k ON fs.symbol = k.symbol
JOIN financial_ratios_ttm r ON fs.symbol = r.symbol
JOIN profile p ON fs.symbol = p.symbol
WHERE fs.growth_years >= 4
AND fs.min_fcf > 0
AND fs.min_prev_fcf > 0
AND k.returnOnInvestedCapitalTTM > 0.15
AND r.operatingProfitMarginTTM > 0.15
AND k.marketCap > 500000000
AND p.exchange IN ('LSE')
ORDER BY k.returnOnInvestedCapitalTTM DESC
LIMIT 30
Run this query on Ceta Research
What We Found
$10,000 grew to $69,200. The FTSE 100 reached $13,600.
| Metric | FCF Compounders | FTSE 100 |
|---|---|---|
| CAGR | 8.04% | 1.23% |
| Total Return | 592% | 36% |
| Volatility | 13.78% | 15.42% |
| Max Drawdown | -10.41% | -39.57% |
| Sharpe Ratio | 0.330 | 0.004 |
| Sortino Ratio | 1.070 | 0.007 |
| Win Rate (annual) | 64% | - |
| Up Capture | 103.8% | - |
| Down Capture | -46.3% | - |
| Beta | 0.326 | - |
| Alpha | 5.28% | - |
| Avg Stocks per Period | 17.6 | - |
| Cash Periods | 12 of 25 (48%) | - |
The -46.3% down capture needs explanation. When the FTSE 100 fell, the FCF compounders portfolio either gained or fell much less. Part of this is a cash period effect: in many years when the FTSE dropped (2001-2002 dot-com, 2007-2008 GFC), the filter couldn't find 10 qualifying stocks, so the portfolio held cash and earned 0% while the index fell. A 0% return vs a -20% benchmark produces strongly negative down capture without the strategy ever "protecting" anything actively.
The important number is the Sharpe ratio: 0.330 vs 0.004 for the FTSE 100 price index. On a risk-adjusted basis, this isn't close.
The 12 Cash Years
The filter was invested in only 13 of 25 years. Cash periods:
2000-2009: The filter found qualifying stocks in only 2 of these 10 years (2010, 2011 being the first invested years). The LSE simply didn't have enough companies passing the strict 4/5 FCF growth + ROIC > 15% + OPM > 15% filter with the required data history in the early period.
2010 onward: The strategy was invested in 11 of 15 years. As FMP's LSE data coverage improved and UK financial reporting became more standardized, more companies accumulated the required 6+ years of consecutive FY data.
Annual Returns (Invested Years)
| Year | Strategy | FTSE 100 | Excess |
|---|---|---|---|
| 2010 | +45.2% | +24.4% | +20.8% |
| 2011 | +12.3% | -6.3% | +18.6% |
| 2014 | +23.7% | -2.7% | +26.5% |
| 2015 | -6.9% | -1.6% | -5.3% |
| 2016 | +32.5% | +13.1% | +19.4% |
| 2017 | +17.4% | +2.3% | +15.1% |
| 2018 | +2.2% | +0.2% | +2.1% |
| 2019 | +22.6% | -17.5% | +40.0% |
| 2020 | +23.9% | +14.2% | +9.8% |
| 2021 | -10.4% | +1.5% | -11.9% |
| 2022 | +18.8% | +4.1% | +14.8% |
| 2023 | +16.6% | +7.9% | +8.7% |
| 2024 | +22.9% | +8.1% | +14.8% |
2019 stands out: +22.6% vs -17.5% for the FTSE 100. The FTSE fell sharply due to Brexit uncertainty and the initial COVID panic in late 2019. FCF compounders — cash-generative businesses with low leverage — held up and gained. The 40-point spread is the largest in the series.
2010 was the first invested year: +45.2% vs +24.4%. The recovery from the GFC was aggressive for high-quality cash compounders that survived with their balance sheets intact.
2021 was the worst year: -10.4% vs +1.5%. The strategy lagged in a year where cyclical and recovery stocks dominated.
The Cash Drag Problem
The 48% cash rate is the core limitation. Over 25 years, the portfolio spent more time in cash than invested. In the 12 cash years, the strategy earned 0% while the FTSE 100 accumulated both gains and losses. Net effect: cash periods missed most of the early FTSE gains in 2003-2006, which is partly why the FTSE comparison looks so dramatic.
In the 13 invested years, the strategy's average annual return was substantially higher than the 8.04% CAGR suggests. The CAGR calculation includes the cash years (at 0%), pulling the compounding average down. The signal, when it fires, is strong.
The practical implication: Running this screen on LSE requires patience. Expect to be uninvested roughly half the time. The filter is too strict for consistent deployment in a 500-company universe.
Limitations
Benchmark mismatch. ^FTSE is a price-only index. FTSE 100 total return (with dividends, roughly 3-4% annually) would reduce the stated excess. The strategy still outperforms, but by a smaller margin.
Cash period dominance. 48% cash reduces compounding severely and distorts most relative metrics. Down capture, beta, and win rate all look unusually favorable partly because cash years are included in the calculation.
Small invested universe. 17.6 stocks per period is concentrated. If any sector experiences simultaneous FCF deterioration, the portfolio could be undiversified at the worst time.
Data coverage. FMP's early LSE coverage (2000-2009) is thinner than US data. The cash periods in the first decade reflect partly a data constraint, not purely a signal failure.
Currency. Returns are in GBP. No currency hedging or conversion is modeled.
Run It Yourself
Live screen:
python3 fcf-compounders/screen.py --preset uk
Full backtest:
python3 fcf-compounders/backtest.py --preset uk --output results.json --verbose
Code: github.com/ceta-research/backtests/tree/main/fcf-compounders
Part of a Series
This is the UK edition of our FCF Compounders analysis. We ran the same screen on 18 exchanges globally:
- US: +3.54% excess vs S&P 500, zero cash periods, the flagship result
- Germany: +3.96% excess vs DAX, 22 invested years out of 25
- Global comparison: all exchanges with invested periods side by side
Past performance does not guarantee future results. Backtested returns are hypothetical and subject to survivorship bias, look-ahead bias, and estimated transaction costs. This is research content, not investment advice.
Data: Ceta Research (FMP financial data warehouse), 2000-2025. Full methodology: github.com/ceta-research/backtests/blob/main/METHODOLOGY.md