Dividend Coverage on Canadian Stocks: Low Volatility Alpha on the TSX

We screened TSX-listed stocks for FCF-backed dividends. 10.59% CAGR over 25 years with the lowest volatility (16.83%) of any exchange we tested. Just -11% in 2008 vs -27% for the broad market.

Growth of $10,000 invested in Dividend Coverage Canada vs TSX Composite from 2000 to 2025. Coverage grew to $121K.

We screened TSX-listed stocks for companies whose free cash flow comfortably covers their dividend payments. Coverage between 1.5x and 20x, yield above 2%, annual rebalance. The result: 10.59% CAGR over 25 years with the lowest volatility (16.83%) of any exchange in our global test. The portfolio held cash in only 1 of 25 periods, averaging 23 stocks. During 2008, coverage stocks fell 11.0% while the TSX Composite dropped over 27%.

Contents

  1. Method
  2. What is Dividend Coverage?
  3. The Screen (SQL)
  4. What We Found
  5. 25 years of data. 6.64% annual alpha with the lowest volatility in our global test.
  6. Year-by-year returns
  7. 2000: the best opening year in our dataset
  8. 2008: the drawdown that wasn't
  9. 2020: COVID recovery
  10. Where the strategy struggles
  11. Currency Warning
  12. Backtest Methodology
  13. Limitations
  14. Takeaway
  15. Part of a Series
  16. References
  17. Run This Screen Yourself

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


Method

Data source: Ceta Research (FMP financial data warehouse) Universe: Toronto Stock Exchange (TSX), market cap > C$500M Period: 2000-2025 (25 years, 25 annual periods) Rebalancing: Annual (July), equal weight top 30 by coverage descending Benchmark: TSX Composite (^GSPTSE, 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.


What is Dividend Coverage?

Coverage measures whether a company can afford its dividend from cash, not earnings. The formula:

FCF Coverage = Free Cash Flow / ABS(Common Dividends Paid)

Earnings can be manipulated through depreciation, amortization, and stock-based compensation. Free cash flow is harder to fake. A company with 3x coverage generates three Canadian dollars of free cash for every dollar it sends to shareholders. Below 1x, the company is borrowing or drawing down reserves to maintain its dividend.

The TSX is resource-heavy. Energy and mining companies dominate, and their cash flows are cyclical. The coverage filter is particularly useful here because it screens out resource companies whose dividends outpace their actual cash generation during commodity downturns.

Screen Filters:

Criterion Metric Threshold
Dividend safety FCF / ABS(Dividends Paid) 1.5x to 20x
Meaningful yield Dividend Yield > 2%
Institutional grade Market Cap > C$500M

Coverage below 1.5x is too thin. Above 20x usually means a token dividend. The yield filter removes companies paying negligible dividends despite high coverage. Combined, these three filters isolate companies with meaningful, well-funded dividend payments.

Academic basis: Benartzi, Michaely & Thaler (1997) showed that dividend changes signal information about future cash flows. Managers are reluctant to cut dividends even when fundamentals deteriorate. They stretch, borrow, and defer capex to maintain payments. Coverage catches this: when FCF drops below dividends paid, the company is funding shareholders from something other than operations.


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 IN ('TSX')
),
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 > 5e8
ORDER BY coverage DESC
LIMIT 30

[Run this query on Ceta Research][COVERAGE_TSX_QUERY_URL]


What We Found

Growth of $10,000 invested in Dividend Coverage Canada vs TSX Composite from 2000 to 2025. Coverage grew to $121K.
Growth of $10,000 invested in Dividend Coverage Canada vs TSX Composite from 2000 to 2025. Coverage grew to $121K.

25 years of data. 6.64% annual alpha with the lowest volatility in our global test.

Metric Coverage (TSX) TSX Composite
CAGR 10.59% 3.95%
Total Return 1,139% -
Volatility 16.83% ~16%
Max Drawdown -25.03% ~-43%
Sharpe Ratio 0.481 ~0.35
Win Rate (annual) 72% -
Avg Stocks per Period 23.2 -
Cash Periods 1 of 25 -

$10,000 invested in 2000 grew to roughly $121,000. The standout number is the max drawdown: just -25.03%. For context, the US coverage portfolio had a -41.57% drawdown, and the TSX Composite itself dropped roughly 43% during the financial crisis. Canadian coverage stocks drew down less than half of what the broad Canadian market did.

The volatility of 16.83% is the lowest of any exchange we tested. Combined with 10.59% CAGR, that produces a Sharpe of 0.481, second only to Sweden (0.485) in our global comparison.

Year-by-year returns

Dividend Coverage Canada vs TSX Composite annual returns from 2000 to 2024.
Dividend Coverage Canada vs TSX Composite annual returns from 2000 to 2024.

Year Coverage TSX Composite Excess
2000 +31.3% -24.1% +55.4%
2001 0.0% (cash) -9.3% -
2002 -1.6% -0.3% -1.3%
2003 +41.1% +21.4% +19.7%
2004 +15.8% +17.1% -1.3%
2005 +7.6% +18.0% -10.4%
2006 +25.0% +19.9% +5.2%
2007 -15.8% -0.2% -15.6%
2008 -11.0% -27.0% +16.0%
2009 +21.3% +9.3% +12.0%
2010 +28.9% +19.6% +9.4%
2011 -7.9% -11.5% +3.6%
2012 +29.4% +2.8% +26.6%
2013 +25.9% +24.9% +1.1%
2014 +1.1% -3.8% +4.9%
2015 +4.2% -2.6% +6.8%
2016 +11.4% +6.1% +5.3%
2017 +7.6% +7.5% +0.1%
2018 +5.2% +1.3% +3.9%
2019 -10.2% -5.2% -5.1%
2020 +45.8% +29.5% +16.3%
2021 -6.8% -5.9% -0.9%
2022 +5.1% +6.2% -1.1%
2023 +16.6% +8.7% +7.9%
2024 +25.1% +22.4% +2.7%

2000: the best opening year in our dataset

+31.3% with +55.4% excess over the TSX Composite (-24.1%). While the dot-com crash hit tech-heavy markets, Canadian coverage stocks (mostly banks, pipelines, and utilities) had a monster year. The TSX Composite was dragged down by Nortel, which made up over 30% of the index at its peak. The coverage screen never held Nortel because it was paying minimal dividends relative to its market cap.

2008: the drawdown that wasn't

Year Coverage TSX Composite Excess
2008 -11.0% -27.0% +16.0%

Canadian banks are famous for never cutting dividends through 2008. Coverage stocks lost 11.0% while the TSX Composite fell 27.0%. The coverage filter naturally favored banks, pipelines, and telecoms with strong FCF, the exact companies that weathered the financial crisis best in Canada.

2020: COVID recovery

+45.8%, the portfolio's biggest annual return. Beaten-down dividend payers snapped back hard. Energy companies with strong coverage (Enbridge, TC Energy types) recovered from COVID lows alongside a commodity price rebound.

Where the strategy struggles

2019 was the worst year by absolute return: -10.2% with -5.1% excess. 2007 was the worst for excess return (-15.6%), when the TSX held near flat while coverage stocks fell. 2005 also lagged (-10.4% excess). Growth-oriented and commodity boom periods hurt the coverage approach.

The 72% win rate is solid. The strategy wins nearly three-quarters of years on a relative basis.


Currency Warning

All returns are in Canadian Dollars (CAD). The CAD has fluctuated significantly against the USD, ranging from rough parity in 2007-2013 to 0.70-0.75 in recent years. A US-based investor would see different returns after currency conversion. Canadian investors comparing to their local benchmark see the full alpha. Cross-border investors should account for CAD/USD movement or hedging costs.


Backtest Methodology

Parameter Choice
Universe TSX, Market Cap > C$500M
Signal FCF / ABS(Dividends Paid) between 1.5x and 20x
Filters Dividend Yield > 2%, Market Cap > C$500M
Portfolio Top 30 by coverage descending, equal weight
Rebalancing Annual (July)
Cash rule Hold cash if < 10 qualify
Benchmark TSX Composite (^GSPTSE, price return)
Period 2000-2025 (25 years)
Data Point-in-time (45-day lag for annual filings)
Costs Size-tiered transaction costs applied

Limitations

Resource sector concentration. The TSX is heavily weighted toward energy, mining, and financials. The coverage screen naturally favors these sectors when commodity prices support cash flows, but commodity downturns can hit the portfolio hard.

One cash period. 2001 had too few qualifying stocks. Minimal cash drag overall, but it means the strategy missed the dot-com aftermath entirely in that year.

Annual rebalancing is slow. A company's coverage can deteriorate between July rebalances. Commodity companies can see FCF collapse within a quarter. Monthly or quarterly rebalancing would catch problems faster but increase turnover and costs.

Coverage is backward-looking. The ratio uses last fiscal year's cash flow statement. Oil companies with 5x coverage when oil is at $80/barrel can see coverage evaporate if oil drops to $50.

Some years of concentrated underperformance. 2007 (-15.6% excess) and 2005 (-10.4% excess) showed the strategy can trail sharply in resource-driven markets. Any multi-year stretch can show negative alpha.

Survivorship bias. Exchange membership uses current company profiles. Companies that delisted, went bankrupt, or were acquired aren't fully captured.


Takeaway

The dividend coverage screen delivers steady, low-volatility alpha on the TSX. 10.59% CAGR, 6.64% annual alpha over the TSX Composite price return index, and a max drawdown of just -25.03%. Those are the numbers of a strategy that protects capital.

The TSX is a resource-heavy exchange, and the coverage filter works well in that environment. When oil and mining companies stretch to maintain dividends during commodity downturns, the screen drops them. When they generate strong cash flows, it picks them up. That natural rotation between resource and non-resource dividend payers explains both the low volatility and the crisis protection.

The alpha is real (1,139% total return over 25 years), but it requires patience through multi-year stretches where the strategy trails. Canada rewards that patience with the smallest drawdowns we've seen. For context: vs the S&P 500 Total Return (SPY), the strategy delivered approximately +2.74% annual alpha.


Part of a Series

This analysis is part of our dividend coverage global exchange comparison. We tested the same screen on 13 exchanges worldwide: - Dividend Coverage on US Stocks (NYSE, NASDAQ, AMEX) - 11.40% CAGR, the baseline - [Dividend Coverage on Swedish Stocks (STO)][SWEDEN_BLOG_URL] - 10.91% CAGR, highest Sharpe - [Dividend Coverage on Australian Stocks (ASX)][AUSTRALIA_BLOG_URL] - 9.36% CAGR, franking credits market - [Dividend Coverage on Japanese Stocks (JPX)][JAPAN_BLOG_URL] - 7.71% CAGR, matched SPY - [Dividend Coverage: 13-Exchange 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_TSX_QUERY_URL]. The query is pre-loaded. 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 IN ('TSX')
        ),
        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 > 5e8
        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: TSX. Annual rebalance (July), equal weight top 30, 2000-2025.