Sector Mean Reversion on Canadian Stocks (TSX): 8.86% CAGR, +3.61% vs TSX Composite

Sector mean reversion on TSX large caps from 2000 to 2025: 8.86% CAGR in CAD vs 5.26% for the TSX Composite, a +3.61% annual edge. Energy is the most-selected sector at 29% of quarters. Four years supply almost all of the excess, and the max drawdown is -48.55%.

Growth of CAD $10,000 in Sector Mean Reversion Canada (TSX) vs TSX Composite from 2000 to 2025

We tested sector mean reversion on TSX large caps from 2000 to 2025: at the start of each quarter, find the two worst-performing sectors by 12-month return and buy every qualifying stock in them. Quarterly rebalance, equal weight, 104 periods. The result was 8.86% annualized in CAD vs 5.26% for the TSX Composite, a +3.61% annual edge over 26 years. The strategy was fully invested in all 104 quarters. The excess is real. In practice, the ride is volatile enough that most investors wouldn't hold it.

Contents

  1. Method
  2. What is Sector Mean Reversion?
  3. The Screen
  4. What We Found
  5. 26 years. +3.61% annual edge vs TSX Composite.
  6. Year-by-year returns
  7. 2001-2003: One clean win, one bad year, one recovery
  8. 2005-2006: The commodity supercycle
  9. 2009: The biggest year
  10. 2013: The single worst excess year
  11. 2015: Oil collapses
  12. 2016: The payoff
  13. 2019-2020: Missing the growth rally
  14. Backtest Methodology
  15. Limitations
  16. Takeaway
  17. Part of a Series
  18. References
  19. Run This Screen Yourself

Data: FMP financial data warehouse, 2000-2025. Updated August 2026.


Method

Data source: Ceta Research (FMP financial data warehouse) Universe: TSX (Toronto Stock Exchange), market cap > CAD $500M Period: 2000-2025 (26 years, 104 quarterly periods) Rebalancing: Quarterly (January, April, July, October), equal weight all qualifying stocks in selected sectors Execution: Entry at the next available close after the signal date Benchmark: TSX Composite (^GSPTSE), returns in CAD Cash rule: Hold cash if fewer than 5 sectors qualify, or fewer than 10 stocks pass the filters Transaction costs: Size-tiered model, applied to every position


What is Sector Mean Reversion?

At each quarterly rebalance, we rank all sectors by their equal-weighted 12-month trailing return. We buy every stock in the bottom 2 sectors. Next quarter, we re-rank and rotate. This is a pure price signal, with no fundamental data of any kind.

The academic basis is Moskowitz and Grinblatt (1999), who showed that much of the momentum anomaly is explained at the industry level, so sector membership is where the signal lives. What they documented at a 12-month horizon was continuation, not reversal, so this strategy runs against their result rather than following from it. The contrarian premise is a separate claim: sectors that underperform for a full year carry suppressed valuations and depressed sentiment, and both tend to normalize.

On Canadian markets, the dynamic has a structural wrinkle. Canada's TSX is heavily weighted toward Energy, Basic Materials, and Financials. This isn't a diversified multi-sector index the way the US market is. When commodity cycles turn, they dominate sector rankings for years at a time. That changes the character of the strategy compared to markets with broader sector representation.

The most-selected sectors across the 104 quarters:

Sector Quarters Selected (of 104)
Energy 31 (29%)
Consumer Defensive 27 (25%)
Basic Materials 26 (25%)
Technology 25 (24%)
Communication Services 24 (23%)
Utilities 20 (19%)
Healthcare 16 (15%)
Consumer Cyclical 15 (14%)
Real Estate 13 (12%)
Financial Services 8 (7%)
Industrials 3 (2%)

Energy leads at 29% of all quarters. Consumer Defensive and Basic Materials follow. Two sectors are picked each quarter, so these three fill about 40% of the 208 available slots across 26 years. The TSX's commodity concentration doesn't just color the strategy, it defines it. Financial Services, the largest sector in the index by weight, was selected in only 8 quarters: Canadian banks rarely have a bad enough year to reach the bottom two.


The Screen

The screen below runs live. It ranks TSX sectors by their current 12-month equal-weighted return across TSX large caps. The bottom rows are what the backtest would buy today.

WITH prices AS (
    SELECT e.symbol, e.adjClose, CAST(e.date AS DATE) AS trade_date
    FROM stock_eod e
    JOIN profile p ON e.symbol = p.symbol
    WHERE p.sector IS NOT NULL AND p.sector != ''
      AND p.marketCap > 500000000
      AND p.exchange IN ('TSX')
      AND CAST(e.date AS DATE) >= CURRENT_DATE - INTERVAL '400' DAY
      AND e.adjClose IS NOT NULL AND e.adjClose > 0
),
recent AS (
    SELECT symbol, adjClose AS recent_price
    FROM prices
    QUALIFY ROW_NUMBER() OVER (PARTITION BY symbol ORDER BY trade_date DESC) = 1
),
year_ago AS (
    SELECT symbol, adjClose AS old_price
    FROM prices
    WHERE trade_date <= CURRENT_DATE - INTERVAL '252' DAY
    QUALIFY ROW_NUMBER() OVER (PARTITION BY symbol ORDER BY trade_date DESC) = 1
),
stock_returns AS (
    SELECT r.symbol, pr.sector, (r.recent_price / ya.old_price - 1) * 100 AS return_12m
    FROM recent r
    JOIN year_ago ya ON r.symbol = ya.symbol
    JOIN profile pr ON r.symbol = pr.symbol
    WHERE ya.old_price > 0 AND r.recent_price > 0
      AND (r.recent_price / ya.old_price - 1) BETWEEN -0.99 AND 5.0
)
SELECT pr.sector,
    ROUND(AVG(sr.return_12m), 2) AS avg_return_12m_pct,
    COUNT(DISTINCT sr.symbol) AS n_stocks,
    ROW_NUMBER() OVER (ORDER BY AVG(sr.return_12m) ASC) AS rank_worst
FROM stock_returns sr
JOIN profile pr ON sr.symbol = pr.symbol
GROUP BY pr.sector
HAVING COUNT(DISTINCT sr.symbol) >= 5
ORDER BY avg_return_12m_pct ASC

What We Found

The strategy produced a clear edge over 26 years against the local benchmark, driven by big swings in both directions. The annual picture shows why most investors wouldn't hold it.

Growth of CAD $10,000 in Sector Mean Reversion Canada (TSX) vs TSX Composite from 2000 to 2025
Growth of CAD $10,000 in Sector Mean Reversion Canada (TSX) vs TSX Composite from 2000 to 2025

26 years. +3.61% annual edge vs TSX Composite.

Metric Strategy TSX Composite
CAGR 8.86% 5.26%
Excess vs TSX Composite +3.61%
Total Return 809.80% 278.94%
Volatility 24.80% 15.50%
Max Drawdown -48.55% -41.58%
Sharpe Ratio 0.257 0.178
Sortino Ratio 0.404 0.241
Calmar Ratio 0.183 0.126
Up Capture 134.54%
Down Capture 101.22%
Beta 1.188
Alpha (Jensen) 3.09%
Win Rate vs TSX Composite (quarters) 54.81%
Avg Stocks per Period 64.6
Cash Periods 0 of 104

CAD 10,000 becomes CAD 90,980. The same money in a TSX Composite tracker becomes CAD 37,894.

The +3.61% annual excess against the TSX Composite is real over the full period, and it comes almost entirely from up capture. At 134.54% up and 101.22% down, the strategy amplifies rallies and falls fractionally harder in selloffs. Volatility is 24.80% against the index's 15.50%, and the max drawdown is deeper (-48.55% vs -41.58%). With 64.6 stocks per quarter on average, this is a sector tilt across a relatively small universe, not a diversified factor portfolio.

Against SPY (8.02%), the Canadian strategy at 8.86% is ahead by +0.84% annually. That's a thin margin for 26 years of a -48.55% drawdown risk, and it's the comparison a non-Canadian investor should weigh.

Year-by-year returns

Sector Mean Reversion vs TSX Composite annual returns, Canada (TSX), 2000-2025
Sector Mean Reversion vs TSX Composite annual returns, Canada (TSX), 2000-2025

Year Strategy TSX Composite Excess
2000 -5.21% +2.35% -7.56%
2001 +18.68% -11.20% +29.88%
2002 -18.29% -11.86% -6.43%
2003 +36.49% +23.05% +13.44%
2004 +7.93% +10.24% -2.31%
2005 +39.00% +25.14% +13.86%
2006 +22.64% +12.95% +9.68%
2007 -3.17% +7.76% -10.94%
2008 -32.20% -33.70% +1.50%
2009 +77.51% +28.51% +49.00%
2010 +28.37% +12.94% +15.43%
2011 +18.56% -8.91% +27.46%
2012 -4.89% +2.72% -7.61%
2013 -17.45% +8.40% -25.85%
2014 +11.47% +8.53% +2.94%
2015 -30.06% -12.38% -17.68%
2016 +53.40% +19.15% +34.25%
2017 +25.19% +5.89% +19.30%
2018 -6.63% -12.03% +5.41%
2019 +2.88% +19.19% -16.31%
2020 -6.22% +2.50% -8.73%
2021 +45.99% +21.16% +24.83%
2022 -9.64% -8.44% -1.20%
2023 +11.24% +7.35% +3.89%
2024 +23.84% +19.29% +4.55%
2025 +15.49% +28.06% -12.56%

2001-2003: One clean win, one bad year, one recovery

The dot-com collapse hit Canada differently than the US. Canadian tech exposure was smaller, and the commodities that had been depressed through the late 1990s began to recover. The strategy loaded up on Energy and Basic Materials at a time when those sectors were genuinely cheap.

2001: +18.68% vs TSX -11.20%, a +29.88% excess. The market was selling growth. The strategy was holding resource stocks.

2002 broke the run: -18.29% vs TSX -11.86%. The portfolio fell harder than an index that was already down 12%. Whatever the signal had bought at the end of 2001 kept falling through the second leg of the bear market.

2003: +36.49% vs TSX +23.05%, a +13.44% excess. The commodity recovery accelerated. Beaten-down resource stocks surged as global demand picked back up.

Two of the three years worked. The one that didn't gave back 6.4 points against the 29.9 that 2001 had won.

2005-2006: The commodity supercycle

By 2005-2006, the commodity supercycle was in full swing. China's infrastructure buildout was driving demand for everything Canada produces: oil, gas, copper, potash. The strategy's persistent tilt toward Energy and Basic Materials caught two consecutive years of outperformance.

2005: +39.00% vs TSX +25.14%, a 14-point gap. 2006: +22.64% vs TSX +12.95%, a 10-point gap.

Neither of these was a mean-reversion story in the traditional sense. The sectors the strategy was buying in 2004 had already started moving. The strategy rode the commodity boom as a structural feature of Canada's market, not just a sentiment normalization.

2009: The biggest year

2009 was +77.51% vs TSX's +28.51%, a 49-point gap and the best year in the record. After the financial crisis, the strategy had loaded up on commodity and resource sectors that were destroyed in the crash. When commodity prices recovered alongside global growth expectations in 2009, the bounce was violent.

This is the same playbook as 2003: buy what was obliterated, wait for the recovery. On a resource-heavy exchange, the strategy's best years are almost always commodity recoveries.

2013: The single worst excess year

2013 was -25.85% excess vs TSX. The strategy returned -17.45% while the TSX delivered +8.40%.

The reason: the strategy was positioned in beaten-down commodity sectors during a year when markets were rewarding growth and momentum. Canadian resource stocks, already underperforming through 2012, kept falling. The backward-looking signal kept buying them. The gap between what the strategy held and what the market rewarded was wide.

This single year erases multiple years of prior alpha accumulation.

2015: Oil collapses

By early 2015, Energy had been the worst or near-worst performing sector for 12 months. The signal bought it. Oil kept falling. WTI went from roughly $55 at the start of 2015 toward $35 by year-end.

2015: -30.06% vs TSX -12.38%. The strategy fell nearly 18 points worse than the TSX, which itself was down 12%.

The commodity cycle created a structural trap. On the TSX, Energy underperforming for 12 months doesn't necessarily mean it's about to revert. It sometimes means the cycle is turning, and there's more downside ahead. The US strategy had the same 2015 problem, but Canada felt it harder because Energy is a bigger share of the investable universe.

2016: The payoff

2016 delivered +53.40% vs TSX +19.15%, a 34-point excess. Oil stabilized and recovered. Energy stocks, which the strategy had held through the pain of 2015, surged. This is the mean reversion payoff that the strategy is built around.

But note the sequence: you had to absorb -17.68% excess in 2015 to earn +34.25% in 2016. Over the two years combined, the excess was roughly +17%. Depending on when you entered or exited, you may have caught the loss without the recovery.

2019-2020: Missing the growth rally

2019 was +2.88% vs TSX +19.19%, a -16.31% excess. The TSX had a strong year while the strategy's Energy and Communication Services positions lagged. Energy drifted. Telecom underperformed.

2020 continued the weakness: -6.22% vs TSX +2.50%. Two consecutive years of underperformance followed the 2016-2017 highs, and it took the 2021 commodity rebound (+45.99%, a +24.83% excess) to make them back.


Backtest Methodology

Parameter Choice
Universe TSX, Market Cap > CAD $500M
Signal Bottom 2 sectors by equal-weighted 12-month trailing return
Portfolio All qualifying stocks in selected sectors, equal weight
Rebalancing Quarterly (January, April, July, October)
Cash rule Hold cash if < 5 sectors qualify or < 10 stocks pass filters
Execution Next available close after the signal date
Transaction costs Size-tiered model
Benchmark TSX Composite (^GSPTSE)
Period 2000-2025 (26 years, 104 quarters)
Data Ceta Research (FMP financial data warehouse)

Limitations

Energy concentration. Energy showing up in 29% of quarters isn't mean reversion at work, it's commodity cycle exposure. The TSX's structural weighting toward resource sectors means the strategy often functions as a commodity cyclical tilt rather than a diversified sector rotation play. In markets where commodity cycles are multi-year, the reversion signal can stay wrong for extended periods.

Currency. Returns are in CAD. The strategy's comparison to the TSX Composite is clean on a local basis. For a non-Canadian investor, CAD/USD movements add another layer of variance on top of a margin over SPY that's already only +0.84% a year.

Extreme single-year risk. The -25.85% excess in 2013 and -17.68% in 2015 are examples of extended drawdown periods. The overall positive excess is real but concentrated in commodity recovery cycles.

Small universe. With 64.6 stocks on average, the TSX portfolio is much smaller than US equivalents. That means individual sector performance has more impact on results. A single commodity price collapse (2015) can dominate an entire year's returns.

No downside protection. Down capture is 101.22%, marginally above 100, and the max drawdown (-48.55%) is deeper than the index's (-41.58%). The entire edge comes from the 134.54% up capture. This isn't a defensive strategy.

Costs are modelled, not measured. A size-tiered cost model is applied to every position, but bid-ask spread and market impact aren't. Quarterly rebalancing across 65 stocks in a market with wider spreads than NYSE would reduce net returns further.

Survivorship bias. Exchange membership uses current profiles, not historical. Delisted companies aren't tracked over time.


Takeaway

Sector mean reversion on the TSX produced 8.86% CAGR in CAD over 26 years, +3.61% annually above the TSX Composite. The 809.80% total return is a solid result. The ride to get there is not.

The max drawdown is -48.55%. In 2013, the strategy trailed the TSX by 26 points. In 2015, it underperformed by 18. And the alpha is not spread across the record: 2001, 2009, 2016 and 2021 sum to +138 points of annual excess, which is essentially the entire 26-year total. The other 22 years net to roughly nothing. Four years out of 26 carried the strategy.

The core issue is structural. Canada's economy is resource-heavy, and resource sectors don't follow the same mean-reversion dynamics as diversified markets. Energy underperforming for 12 months on the TSX might be the first year of a 3-year commodity downturn. Buying beaten-down oil and gas stocks when the oil cycle hasn't bottomed is a different bet than buying beaten-down utilities after a rate scare.

The edge vs the local benchmark is real. Against SPY (8.02%), the margin narrows to +0.84% a year, which is close enough to zero that transaction realism and entry timing decide whether it survives at all.


Part of a Series

This analysis is part of our Sector Mean Reversion global exchange comparison. We tested the same strategy across multiple exchanges: - Sector Mean Reversion on US Stocks (NYSE + NASDAQ + AMEX) - Sector Mean Reversion on Indian Stocks (NSE) - Sector Mean Reversion on Korean Stocks (KSC) - Sector Mean Reversion on Taiwanese Stocks (TAI + TWO) - Sector Mean Reversion on Swedish Stocks (STO) - Sector Mean Reversion: Global Exchange Comparison


References

  • Moskowitz, T. & Grinblatt, M. (1999). "Do Industries Explain Momentum?" Journal of Finance, 54(4), 1249-1290.

Run This Screen Yourself

Via web UI: Run the sector screen on Ceta Research. Paste the SQL above, set your exchange filter to TSX, and hit "Run" to see current sector rankings.

Via Python:

import requests, time

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

query = """
WITH prices AS (
    SELECT e.symbol, e.adjClose, CAST(e.date AS DATE) AS trade_date
    FROM stock_eod e
    JOIN profile p ON e.symbol = p.symbol
    WHERE p.sector IS NOT NULL AND p.sector != ''
      AND p.marketCap > 500000000
      AND p.exchange IN ('TSX')
      AND CAST(e.date AS DATE) >= CURRENT_DATE - INTERVAL '400' DAY
      AND e.adjClose IS NOT NULL AND e.adjClose > 0
),
recent AS (
    SELECT symbol, adjClose AS recent_price
    FROM prices
    QUALIFY ROW_NUMBER() OVER (PARTITION BY symbol ORDER BY trade_date DESC) = 1
),
year_ago AS (
    SELECT symbol, adjClose AS old_price
    FROM prices
    WHERE trade_date <= CURRENT_DATE - INTERVAL '252' DAY
    QUALIFY ROW_NUMBER() OVER (PARTITION BY symbol ORDER BY trade_date DESC) = 1
),
stock_returns AS (
    SELECT r.symbol, pr.sector,
        (r.recent_price / ya.old_price - 1) * 100 AS return_12m
    FROM recent r
    JOIN year_ago ya ON r.symbol = ya.symbol
    JOIN profile pr ON r.symbol = pr.symbol
    WHERE ya.old_price > 0 AND r.recent_price > 0
      AND (r.recent_price / ya.old_price - 1) BETWEEN -0.99 AND 5.0
)
SELECT pr.sector,
    ROUND(AVG(sr.return_12m), 2) AS avg_return_12m_pct,
    COUNT(DISTINCT sr.symbol) AS n_stocks,
    ROW_NUMBER() OVER (ORDER BY AVG(sr.return_12m) ASC) AS rank_worst
FROM stock_returns sr
JOIN profile pr ON sr.symbol = pr.symbol
GROUP BY pr.sector
HAVING COUNT(DISTINCT sr.symbol) >= 5
ORDER BY avg_return_12m_pct ASC
"""

resp = requests.post(f"{BASE}/data-explorer/execute", headers={
    "X-API-Key": API_KEY, "Content-Type": "application/json"
}, json={
    "query": query,
    "options": {"format": "json", "limit": 100},
    "resources": {"memoryMb": 16384, "threads": 6}
})
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)

print("TSX sector rankings (worst to best, 12-month return):")
for r in result["result"]["rows"]:
    flag = " <-- BUY" if r["rank_worst"] <= 2 else ""
    print(f"#{r['rank_worst']} {r['sector']:30s} {r['avg_return_12m_pct']:+.1f}%  ({r['n_stocks']} stocks){flag}")

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, market cap > CAD $500M. Quarterly rebalance, equal weight, 2000-2025. Benchmark: TSX Composite (^GSPTSE).


Past performance does not guarantee future results. This is educational content, not investment advice.