Price-to-Sales Below 1 in Canada: 9.54% CAGR, Zero Cash Periods Over

Growth of $10,000 invested in P/S value screen TSX Canada vs S&P 500 from 2000 to 2025. Canada grew to ~$97K (CAD), S&P 500 to $68K (USD).

We ran a P/S value screen on the TSX from 2000 to 2025. The strategy requires P/S below 1.0, gross margin above 20%, operating margin above 5%, and ROE above 10%. It returned 9.54% annually vs 8.01% for the S&P 500, with zero cash periods across 25 years and an average of 26.2 stocks per quarter.

Contents

  1. Method
  2. What Is the P/S Screen?
  3. The Screen
  4. P/S Value Screen for TSX (SQL)
  5. What We Found
  6. 25 years. 1.5% annual alpha. Never ran out of stocks.
  7. Year-by-year returns
  8. 2000-2005: the strategy's defining run
  9. 2015: the oil crash hits hard
  10. 2016: the recovery year
  11. 2022-2025: closing strong
  12. Backtest Methodology
  13. Limitations
  14. Takeaway
  15. Part of a Series
  16. References
  17. Run This Screen Yourself

Method

  • Data source: Ceta Research (FMP financial data warehouse)
  • Universe: TSX, market cap > CAD 500M
  • Period: 2000-2025 (25 years, 100 quarterly periods)
  • Rebalancing: Quarterly (January, April, July, October), equal weight, top 30 by lowest P/S
  • Benchmark: S&P 500 Total Return (SPY)
  • Cash rule: Hold cash if fewer than 10 stocks qualify

Financial data sourced from financial_ratios (FY) for P/S ratio and margins, key_metrics (FY) for ROE and market cap. 45-day lag on all financial statements to prevent look-ahead bias.


What Is the P/S Screen?

Price-to-sales divides a company's market cap by its annual revenue. A ratio below 1.0 means you're paying less than $1 for every $1 of sales the business generates. Kenneth Fisher popularized P/S as a valuation metric in Super Stocks (1984), arguing it was a cleaner signal than P/E because revenue is harder to manipulate than earnings.

The screen doesn't stop at P/S < 1.0. Without quality filters, that criterion fills the portfolio with commodity traders, fuel distributors, and pipeline companies that run thin margins by design. The quality gates change what qualifies.

Valuation:

Criterion Metric Threshold
Cheap on sales Price-to-Sales (FY) < 1.0

Quality Filters:

Criterion Metric Threshold
Margin quality Gross Margin > 20%
Operational efficiency Operating Margin > 5%
Capital returns Return on Equity > 10%

Size:

Criterion Metric Threshold
Institutional grade Market Cap > CAD 500M

Stocks must pass all four to enter. The top 30 by lowest P/S ratio are selected each quarter, equal weighted.


The Screen

P/S Value Screen for TSX (SQL)

SELECT
    f.symbol,
    p.companyName,
    p.exchange,
    p.sector,
    ROUND(f.priceToSalesRatioTTM, 3) AS ps_ratio,
    ROUND(f.grossProfitMarginTTM * 100, 1) AS gross_margin_pct,
    ROUND(f.operatingProfitMarginTTM * 100, 1) AS op_margin_pct,
    ROUND(k.returnOnEquityTTM * 100, 1) AS roe_pct,
    ROUND(k.marketCap / 1e9, 2) AS mktcap_b
FROM financial_ratios_ttm f
JOIN key_metrics_ttm k ON f.symbol = k.symbol
JOIN profile p ON f.symbol = p.symbol
WHERE f.priceToSalesRatioTTM > 0
  AND f.priceToSalesRatioTTM < 1
  AND f.grossProfitMarginTTM > 0.20
  AND f.operatingProfitMarginTTM > 0.05
  AND k.returnOnEquityTTM > 0.10
  AND k.marketCap > 500000000
  AND p.exchange IN ('TSX')
QUALIFY ROW_NUMBER() OVER (PARTITION BY f.symbol ORDER BY f.priceToSalesRatioTTM ASC) = 1
ORDER BY f.priceToSalesRatioTTM ASC
LIMIT 30

Run this query on Ceta Research


What We Found

Growth of $10,000 invested in P/S value screen TSX Canada vs S&P 500 from 2000 to 2025. Canada grew to ~$97K (CAD), S&P 500 to $68K (USD).
Growth of $10,000 invested in P/S value screen TSX Canada vs S&P 500 from 2000 to 2025. Canada grew to ~$97K (CAD), S&P 500 to $68K (USD).

25 years. 1.5% annual alpha. Never ran out of stocks.

Metric P/S Screen (TSX) S&P 500
CAGR 9.54% 8.01%
Sharpe Ratio 0.351 0.354
Max Drawdown -47.11% -45.53%
Avg Stocks per Period 26.2 -
Cash Periods 0 of 100 -

The return is solid: 9.54% annually over 25 years, $10,000 growing to roughly $97,000 in CAD terms. The zero cash periods stand out. The TSX consistently produced enough qualifying stocks through every market condition, including the 2008 credit crisis and the 2015 commodity collapse.

The Sharpe ratio of 0.351 sits just below SPY's 0.354, which is essentially a tie. The max drawdown of -47.11% is slightly worse than SPY's -45.53%, so this isn't a strategy that improves your risk profile. The alpha is in the raw return, not in better risk-adjusted efficiency.

Year-by-year returns

P/S value screen TSX Canada vs S&P 500 annual returns 2000 to 2025. Strategy outperformed strongly in 2000-2005 and 2016, underperformed in 2013, 2017, and 2019.
P/S value screen TSX Canada vs S&P 500 annual returns 2000 to 2025. Strategy outperformed strongly in 2000-2005 and 2016, underperformed in 2013, 2017, and 2019.

Year P/S Screen (TSX) S&P 500 Excess
2000 +42.40% -10.50% +52.90%
2001 +3.94% -9.17% +13.11%
2002 +19.72% -19.92% +39.64%
2003 +29.10% +24.12% +4.98%
2004 +15.98% +10.24% +5.74%
2005 +20.86% +7.17% +13.69%
2006 -0.09% +13.65% -13.74%
2007 +0.61% +4.40% -3.79%
2008 -37.01% -34.31% -2.70%
2009 +60.27% +24.73% +35.54%
2010 +29.56% +14.31% +15.25%
2011 -8.36% +2.46% -10.82%
2012 +11.10% +17.09% -5.99%
2013 +11.21% +27.77% -16.56%
2014 -2.72% +14.50% -17.22%
2015 -25.51% -0.12% -25.39%
2016 +45.37% +14.45% +30.92%
2017 +1.83% +21.64% -19.81%
2018 -9.53% -5.15% -4.38%
2019 +17.87% +32.31% -14.44%
2020 +3.79% +15.64% -11.85%
2021 +25.41% +31.26% -5.85%
2022 -9.39% -18.99% +9.60%
2023 +0.62% +26.00% -25.38%
2024 +21.27% +25.28% -4.01%
2025 +32.99% +15.34% +17.65%

2000-2005: the strategy's defining run

Period P/S Screen (TSX) S&P 500 Excess
2000-2002 +72.6% -34.6% +107.2%
2003-2005 +78.7% +46.3% +32.4%

While the US market was deep in the dot-com bust, the TSX screen posted three straight positive years: +42.4%, +3.9%, +19.7%. The reason is structural. Canadian large caps were never dominated by tech the way the US market was. The TSX in 2000 was financials, energy, and materials. Those sectors didn't trade at 50x sales. They traded at reasonable multiples, many of them below 1x, and they kept earning money while US tech imploded.

When the dot-com recovery came in 2003-2005, the TSX screen participated fully: +29.1%, +16.0%, +20.9%.

2015: the oil crash hits hard

The worst single year in the backtest was 2015: -25.51%, 25 percentage points worse than the S&P 500's flat -0.12%. The oil price collapse explains most of it.

The P/S screen with gross margin > 20% and operating margin > 5% is designed to exclude pure commodity producers. But the TSX's energy and materials sectors include companies, pipeline operators, energy services firms, gold royalty companies, that can pass those margin filters in normal conditions. When oil fell from $100 to $35, those stocks didn't care much about margin filters. They sold off.

This is the cyclical risk embedded in the TSX. The quality filters help but don't immunize the portfolio from commodity cycles.

2016: the recovery year

After 2015's -25.51%, the portfolio bounced +45.37% in 2016. Oil recovered from its lows, and the beaten-down energy and materials names that dragged the portfolio down snapped back hard. The recovery was bigger than the drawdown in percentage terms, which is what kept the long-run CAGR positive.

This is the pattern with cyclical strategies: if you stayed in through 2015, the 2016 recovery more than compensated.

2022-2025: closing strong

Year P/S Screen (TSX) S&P 500 Excess
2022 -9.39% -18.99% +9.60%
2025 +32.99% +15.34% +17.65%

The rate-rising environment of 2022 favored value. The portfolio fell only -9.39% while SPY dropped -19%. The 2025 finish at +32.99% was the second-strongest year in the entire 25-year run, behind only 2009's +60.27%.


Backtest Methodology

Parameter Choice
Universe TSX, Market Cap > CAD 500M
Signal P/S < 1.0, Gross Margin > 20%, Op. Margin > 5%, ROE > 10%
Portfolio Top 30 by lowest P/S, equal weight
Rebalancing Quarterly (January, April, July, October)
Cash rule Hold cash if < 10 qualify
Benchmark S&P 500 Total Return (SPY)
Period 2000-2025 (25 years, 100 quarterly periods)
Data Point-in-time (45-day lag on FY financial statements)

Limitations

Commodity-driven cyclicality. The TSX is heavily weighted toward energy, materials, and financials. The quality filters reduce but don't eliminate exposure to commodity cycles. 2015 is the evidence.

Sharpe ratio doesn't improve on SPY. 0.351 vs 0.354 is a wash. The alpha comes entirely from return, not from better risk-adjusted performance. Investors focused on Sharpe won't find a compelling case here.

Currency effects. Returns are in CAD. US-based investors face an additional layer of CAD/USD currency risk that isn't captured in the backtest.

Sector concentration. Without a sector cap, some quarters skew heavily toward energy services or financials. Single-sector risk exists, especially given the TSX's natural resource bias.

Survivorship bias. Exchange membership uses current profiles, not historical. Delistings and historical composition aren't tracked.

Transaction costs not included. Quarterly rebalancing of 30 stocks generates turnover. Cost drag at 0.2-0.5% per transaction one-way is approximately 0.4-1.0% annually.


Takeaway

The TSX P/S screen delivers 9.54% CAGR over 25 years, 1.5% above the S&P 500. The zero cash periods show the Canadian market is consistently deep enough to fill the screen. The 2000-2005 run demonstrates the strategy's real strength: holding profitable Canadian companies when US tech was cratering.

The cyclical risk is real. The TSX leans into energy and materials in ways US screens don't, and 2015 was painful. But the 2016 recovery was bigger. Over 25 years the math holds.

The Sharpe ratio lands just below SPY's, so this isn't a risk-reduction strategy. It's a return-enhancement strategy that asks you to tolerate more volatility, specifically the commodity cycles that define the TSX. For an investor who understands that, the 25-year track record is a reasonable case.


Part of a Series

This analysis is part of our global P/S value screen comparison. We tested the same screen across multiple exchanges worldwide: - P/S Value Screen on US Stocks (NYSE + NASDAQ + AMEX) - 11.14% CAGR, strongest raw return - P/S Value Screen on Indian Stocks (BSE + NSE) - P/S Value Screen on German Stocks (XETRA) - P/S Value Screen on Swedish Stocks (STO) - P/S Value Screen on South African Stocks (JNB) - P/S Value Screen on Japanese Stocks (JPX) - P/S Value Screen: Global Exchange Comparison


References

  • Fisher, K. (1984). Super Stocks. Dow Jones-Irwin.
  • Barbee, W., Mukherji, S. & Raines, G. (1996). "Do Sales-Price and Debt-Equity Explain Stock Returns Better than Book-Market and Firm Size?" Financial Analysts Journal, 52(2), 56-60.
  • Gray, W. & Vogel, J. (2012). "Analyzing Valuation Measures: A Performance Horse-Race over the Past 40 Years." Journal of Portfolio Management, 39(1), 112-121.
  • Novy-Marx, R. (2013). "The Other Side of Value: The Gross Profitability Premium." Journal of Financial Economics, 108(1), 1-28.

Run This Screen Yourself

Via web UI: Run the P/S value screen on Ceta Research. The query is pre-loaded. Hit "Run" and see what qualifies 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": """
        SELECT f.symbol, p.companyName, p.sector,
            ROUND(f.priceToSalesRatioTTM, 3) AS ps_ratio,
            ROUND(f.grossProfitMarginTTM * 100, 1) AS gross_margin_pct,
            ROUND(f.operatingProfitMarginTTM * 100, 1) AS op_margin_pct,
            ROUND(k.returnOnEquityTTM * 100, 1) AS roe_pct,
            ROUND(k.marketCap / 1e9, 2) AS mktcap_b
        FROM financial_ratios_ttm f
        JOIN key_metrics_ttm k ON f.symbol = k.symbol
        JOIN profile p ON f.symbol = p.symbol
        WHERE f.priceToSalesRatioTTM > 0
          AND f.priceToSalesRatioTTM < 1
          AND f.grossProfitMarginTTM > 0.20
          AND f.operatingProfitMarginTTM > 0.05
          AND k.returnOnEquityTTM > 0.10
          AND k.marketCap > 500000000
          AND p.exchange IN ('TSX')
        QUALIFY ROW_NUMBER() OVER (PARTITION BY f.symbol ORDER BY f.priceToSalesRatioTTM ASC) = 1
        ORDER BY f.priceToSalesRatioTTM ASC
        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} P/S={r['ps_ratio']:.3f} GM={r['gross_margin_pct']:.1f}% ROE={r['roe_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. Returns in CAD. Quarterly rebalance, equal weight, 2000-2025.

Read more