Dividend Coverage on UK Stocks: 11.22% CAGR, 84% Win Rate, Best Drawdown Protection

Dividend coverage on LSE: 11.22% CAGR over 25 years, 84% win rate, max drawdown -27.06%. During 2008, coverage stocks fell just 6.4% while the FTSE 100 dropped 22.0%.

Growth of $10,000 invested in Dividend Coverage UK (LSE) vs S&P 500 from 2000 to 2025.

We ran the FCF-based dividend coverage screen on LSE-listed UK equities. 11.22% CAGR over 25 years. 10.0% annual alpha over the FTSE 100. The standout numbers: 84% win rate (the highest of any exchange we tested) and a max drawdown of -27.06%. During the 2008 financial crisis, coverage stocks fell only 6.4% while the FTSE 100 dropped 22.0%. During Brexit year 2016, they returned +38.1%.

Contents

  1. Method
  2. The Screen (SQL)
  3. What We Found
  4. 25 years of data. 10.0% annual alpha over the FTSE 100.
  5. Year-by-Year Returns
  6. Key Observations
  7. 2008: The Best Crisis Protection We've Seen
  8. Brexit Year 2016: +38.1%
  9. 2020: The Best Single Year
  10. Where the Strategy Struggles
  11. 84% Win Rate: Consistency Over Explosiveness
  12. Max Drawdown: -27.06%
  13. Currency Note
  14. Limitations
  15. Takeaway
  16. Part of a Series
  17. References
  18. Run This Screen Yourself

The UK market rewarded dividend coverage screening with the most consistent results in our global comparison. Not the highest CAGR, but the best combination of reliability and downside protection.

Data: FMP financial data warehouse, 2000–2025. Updated March 2026.


Method

This post uses the same dividend coverage screen described in the US backtest. The only difference is the universe: LSE-listed UK equities instead of US exchanges.

Data source: Ceta Research (FMP financial data warehouse) Universe: LSE (UK), market cap > GBP 500M Period: 2000-2025 (25 years, 25 annual periods) Rebalancing: Annual (July), equal weight top 30 by coverage descending Benchmark: FTSE 100 (^FTSE, price return) Cash rule: Hold cash if fewer than 10 stocks qualify Transaction costs: Size-tiered model (0.1-0.5% one-way based on market cap)

(Note: benchmark is price return index, excluding dividends.)

Financial data uses a 45-day lag to prevent look-ahead bias. July rebalance ensures fiscal year filings are available.

Signal: FCF / ABS(Common Dividends Paid) between 1.5x and 20x Filters: Dividend Yield > 2%, Market Cap > GBP 500M


The Screen (SQL)

WITH latest_cf AS (
    SELECT c.symbol, c.freeCashFlow, c.commonDividendsPaid, c.date,
        ROW_NUMBER() OVER (PARTITION BY c.symbol ORDER BY c.date DESC) AS rn
    FROM cash_flow_statement c
    JOIN profile p ON c.symbol = p.symbol
    WHERE c.period = 'FY'
      AND c.commonDividendsPaid < 0
      AND c.freeCashFlow > 0
      AND p.exchange = 'LSE'
),
latest_ratios AS (
    SELECT symbol, dividendYield, date,
        ROW_NUMBER() OVER (PARTITION BY symbol ORDER BY date DESC) AS rn
    FROM financial_ratios
    WHERE period = 'FY' AND dividendYield IS NOT NULL
),
latest_metrics AS (
    SELECT symbol, marketCap, date,
        ROW_NUMBER() OVER (PARTITION BY symbol ORDER BY date DESC) AS rn
    FROM key_metrics
    WHERE period = 'FY' AND marketCap IS NOT NULL
)
SELECT
    cf.symbol,
    ROUND(cf.freeCashFlow / NULLIF(ABS(cf.commonDividendsPaid), 0), 2) AS coverage,
    ROUND(r.dividendYield * 100, 2) AS yield_pct,
    ROUND(cf.freeCashFlow / 1e9, 2) AS fcf_bn,
    ROUND(km.marketCap / 1e9, 1) AS mktcap_bn
FROM latest_cf cf
JOIN latest_ratios r ON cf.symbol = r.symbol AND r.rn = 1
JOIN latest_metrics km ON cf.symbol = km.symbol AND km.rn = 1
WHERE cf.rn = 1
  AND cf.freeCashFlow / NULLIF(ABS(cf.commonDividendsPaid), 0) BETWEEN 1.5 AND 20
  AND r.dividendYield > 0.02
  AND km.marketCap > 500e6
ORDER BY coverage DESC
LIMIT 30

[Run this query on Ceta Research][COVERAGE_UK_QUERY_URL]


What We Found

25 years of data. 10.0% annual alpha over the FTSE 100.

Metric Coverage (LSE) FTSE 100
CAGR 11.22% 1.23%
Total Return 1,329% -
Volatility 19.19% 16.2%
Max Drawdown -27.06% -36.27%
Sharpe Ratio 0.402 0.360
Win Rate (annual) 84% -
Avg Stocks per Period 18.5 -
Cash Periods 2 of 25 -

$10,000 invested in 2000 grew to roughly $153,000.

The numbers that matter most here aren't the CAGR or total return. They're the max drawdown (-27.06%) and the win rate (84%). The strategy beat the benchmark in 21 of 25 years. When it was invested, it averaged 18.5 stocks per period. Two cash years (2000 and 2001) happened because FMP's LSE coverage was thin in the early period. From 2002 onward, the screen always found enough qualifying stocks.

The Sharpe ratio of 0.402 tells the same story from a different angle: strong return per unit of risk. The lower volatility (19.19% vs the US result's 22.6%) reflects the LSE universe of stable dividend payers. Consumer staples, energy majors, financials, and utilities. These are not exciting stocks. They're steady ones.


Year-by-Year Returns

Year Coverage FTSE 100 Excess
2000 0.0% (cash) -11.7% -
2001 0.0% (cash) -20.5% -
2002 +8.3% -11.9% +20.2%
2003 +21.1% +10.0% +11.1%
2004 +16.7% +17.6% -0.9%
2005 +20.9% +13.5% +7.4%
2006 +16.2% +12.0% +4.2%
2007 -5.6% -17.7% +12.1%
2008 -6.4% -22.0% +15.6%
2009 +23.3% +14.3% +9.0%
2010 +37.1% +24.4% +12.7%
2011 -1.9% -6.3% +4.4%
2012 +23.1% +11.8% +11.3%
2013 +27.6% +8.1% +19.4%
2014 +11.1% -2.7% +13.8%
2015 +1.6% -1.6% +3.3%
2016 +38.1% +13.1% +25.0%
2017 +3.9% +2.3% +1.6%
2018 -6.2% +0.1% -6.3%
2019 -22.3% -17.4% -4.8%
2020 +69.1% +14.2% +55.0%
2021 -11.3% +1.5% -12.9%
2022 +9.4% +4.1% +5.3%
2023 +25.0% +7.9% +17.1%
2024 +19.0% +8.1% +10.9%

Key Observations

2008: The Best Crisis Protection We've Seen

Year Coverage (LSE) FTSE 100 Excess
2007 -5.6% -17.7% +12.1%
2008 -6.4% -22.0% +15.6%

The FTSE 100 lost 22.0% in 2008. LSE coverage stocks fell just 6.4%. That 15.6-point cushion is the best crisis-year alpha in our entire global comparison. The screen did two things right. First, it excluded banks and financials with deteriorating cash flows before the crisis hit. Second, the UK dividend universe is heavy on defensive sectors: consumer staples, utilities, energy, and healthcare. These sectors held up far better than financials and cyclicals during 2008.

The protection started a year earlier. In 2007, when the FTSE 100 fell 17.7%, LSE coverage stocks lost only 5.6%. Across the full financial crisis (2007-2008), the strategy lost about 12% while the FTSE 100 lost nearly 36%. That is meaningful downside protection.

Brexit Year 2016: +38.1%

+38.1% vs +13.1% for the FTSE 100. 25 points of alpha. The Brexit vote in June 2016 crashed GBP by 15% against the USD. For UK exporters and multinationals with overseas revenue (many of which populate the coverage screen), the weaker pound was a tailwind for cash flow generation. The July rebalance loaded these companies into the portfolio right as their earnings power was increasing in GBP terms.

2020: The Best Single Year

+69.1% vs +14.2% for the FTSE 100. 55 points of excess return. This was the strongest year for any exchange in our dividend coverage series. UK dividend payers were brutalized during the COVID crash. Many blue-chip names on the FTSE cut or suspended dividends. But companies that maintained strong FCF coverage through the disruption were priced as if they too would cut. They didn't. The recovery was extraordinary.

Where the Strategy Struggles

2019 was painful: -22.3% vs -17.4% for the FTSE 100. UK equities broadly underperformed in 2019 as Brexit uncertainty dragged on sentiment. Dividend-heavy sectors (energy, financials, consumer staples) lagged growth stocks globally. The same sector tilt that protects in downturns costs during growth rallies.

2018 was also weak: -6.2% vs +0.1%. Three consecutive years of underperformance (2017-2019) tested patience with the factor. The 25-year track record justifies it, but any individual investor sitting through those years would feel the strain.

84% Win Rate: Consistency Over Explosiveness

The strategy beat the FTSE 100 in 21 of 25 years. That's the highest win rate of any exchange we tested. Most years the alpha was modest (3-15 points), but the losses were concentrated in just a few periods. Compare this to the US result (64% win rate) or Germany (76%). The UK strategy doesn't rely on a few monster years to carry the average. It grinds out alpha steadily.

Max Drawdown: -27.06%

The max drawdown of -27.06% is well below what the broad FTSE 100 experienced across the full period and lower than the XETRA coverage result (-41.57%). The combination of defensive sector exposure, the 2008 crisis protection, and two cash years at the start of the period keeps the drawdown contained.


Currency Note

LSE returns are in GBP. The benchmark (FTSE 100) is also GBP-denominated, so the comparison is clean. Note that the FTSE 100 is a price return index: it excludes dividends. The strategy's total return includes dividends reinvested, so part of the 10.0% annual alpha reflects this structural difference. For reference, vs the S&P 500 Total Return (SPY), the strategy delivered approximately 3.37% annual alpha over the same period.

The GBP weakened significantly against the USD over this 25-year window, from roughly $1.50 in 2000 to $1.25-1.30 now. A USD-based investor would see lower absolute returns after currency conversion. GBP-based investors see the numbers as reported.


Limitations

Two early cash years. 2000 and 2001 were cash (0% return). This partly reflects thin FMP data coverage for LSE in the early period rather than a genuine absence of qualifying companies. The 23-year invested track record (2002-2024) is the more reliable sample.

Annual rebalancing is slow. A company's coverage can deteriorate between July rebalances. The 2019 underperformance might have been partially avoided with more frequent rebalancing.

Coverage is backward-looking. The ratio uses last fiscal year's cash flow statement. COVID-era dividend cuts in 2020 happened to companies that had strong coverage in their 2019 filings.

Sector concentration. UK dividend payers cluster in energy, financials, consumer staples, and utilities. When these sectors underperform collectively (2017-2019), the portfolio has no diversification buffer.

Survivorship bias. Exchange membership uses current company profiles. Companies that delisted from the LSE aren't fully captured.

GBP/USD currency effect. The 25-year GBP depreciation means a USD-denominated investor would see lower absolute returns than reported here.


Takeaway

The UK dividend coverage screen delivers the most consistent result in our global comparison. 11.22% CAGR, 10.0% annual alpha over the FTSE 100 price return index (3.37% vs the S&P 500 Total Return), 84% win rate, and a max drawdown of -27.06%. The 2008 performance (-6.4% vs -22.0%) is the best crisis protection we recorded.

The consistency comes from the LSE's universe composition. UK dividend culture runs deep. Large-cap UK companies maintain dividend programs through thick and thin, and the ones that can actually afford their dividends (as measured by FCF coverage) form a reliable, defensive portfolio.

The cost: concentrated underperformance during growth-driven markets (2017-2019). The UK market has a value/income tilt that hurts when growth leads. But the 84% hit rate and strong drawdown protection make this the strategy variant for investors who prioritize consistency over raw CAGR.


Part of a Series

This analysis is part of our dividend coverage global exchange comparison. We tested the same screen on multiple exchanges worldwide: - Dividend Coverage on US Stocks (NYSE + NASDAQ + AMEX) - 11.40% CAGR, the baseline - [Dividend Coverage on German Stocks (XETRA)][GERMANY_BLOG_URL] - 12.52% CAGR, best Sharpe ratio - [Dividend Coverage: Global Comparison][COMPARISON_BLOG_URL] - full comparison table


References

  • Benartzi, S., Michaely, R. & Thaler, R. (1997). "Do Changes in Dividends Signal the Future or the Past?" Journal of Finance, 52(3), 1007-1034.
  • DeAngelo, H., DeAngelo, L. & Skinner, D. (1996). "Reversal of Fortune: Dividend Signaling and the Disappearance of Sustained Earnings Growth." Journal of Financial Economics, 40(3), 341-371.

Run This Screen Yourself

Via web UI: [Run the coverage screen on Ceta Research][COVERAGE_UK_QUERY_URL]. The query is pre-loaded with exchange = 'LSE'. Hit "Run" and see what passes today.

Via Python:

import requests, time

API_KEY = "your_api_key"  # get one at cetaresearch.com
BASE = "https://tradingstudio.finance/api/v1"

resp = requests.post(f"{BASE}/data-explorer/execute", headers={
    "X-API-Key": API_KEY, "Content-Type": "application/json"
}, json={
    "query": """
        WITH latest_cf AS (
            SELECT c.symbol, c.freeCashFlow, c.commonDividendsPaid, c.date,
                ROW_NUMBER() OVER (PARTITION BY c.symbol ORDER BY c.date DESC) AS rn
            FROM cash_flow_statement c
            JOIN profile p ON c.symbol = p.symbol
            WHERE c.period = 'FY' AND c.commonDividendsPaid < 0
              AND c.freeCashFlow > 0 AND p.exchange = 'LSE'
        ),
        latest_ratios AS (
            SELECT symbol, dividendYield,
                ROW_NUMBER() OVER (PARTITION BY symbol ORDER BY date DESC) AS rn
            FROM financial_ratios WHERE period = 'FY' AND dividendYield IS NOT NULL
        ),
        latest_metrics AS (
            SELECT symbol, marketCap,
                ROW_NUMBER() OVER (PARTITION BY symbol ORDER BY date DESC) AS rn
            FROM key_metrics WHERE period = 'FY' AND marketCap IS NOT NULL
        )
        SELECT cf.symbol,
            ROUND(cf.freeCashFlow / NULLIF(ABS(cf.commonDividendsPaid), 0), 2) AS coverage,
            ROUND(r.dividendYield * 100, 2) AS yield_pct,
            ROUND(km.marketCap / 1e9, 1) AS mktcap_bn
        FROM latest_cf cf
        JOIN latest_ratios r ON cf.symbol = r.symbol AND r.rn = 1
        JOIN latest_metrics km ON cf.symbol = km.symbol AND km.rn = 1
        WHERE cf.rn = 1
          AND cf.freeCashFlow / NULLIF(ABS(cf.commonDividendsPaid), 0) BETWEEN 1.5 AND 20
          AND r.dividendYield > 0.02 AND km.marketCap > 500e6
        ORDER BY coverage DESC LIMIT 30
    """,
    "options": {"format": "json", "limit": 100}
})
task_id = resp.json()["taskId"]

while True:
    result = requests.get(f"{BASE}/tasks/data-query/{task_id}",
                          headers={"X-API-Key": API_KEY}).json()
    if result["status"] in ("completed", "failed"):
        break
    time.sleep(2)

for r in result["result"]["rows"][:10]:
    print(f"{r['symbol']:8s} coverage={r['coverage']:.1f}x yield={r['yield_pct']:.1f}%")

Get your API key at cetaresearch.com. The full backtest code (Python + DuckDB) is on GitHub.


Data: Ceta Research, FMP financial data warehouse. Universe: LSE (UK). Annual rebalance (July), equal weight top 30, 2000-2025.