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.
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
- Method
- What is Dividend Coverage?
- The Screen (SQL)
- What We Found
- 25 years of data. 6.64% annual alpha with the lowest volatility in our global test.
- Year-by-year returns
- 2000: the best opening year in our dataset
- 2008: the drawdown that wasn't
- 2020: COVID recovery
- Where the strategy struggles
- Currency Warning
- Backtest Methodology
- Limitations
- Takeaway
- Part of a Series
- References
- 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

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

| 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.