We Backtested Revenue Acceleration on 25 Years of US Data. It Failed.
We ran the revenue acceleration strategy on all US stocks from 2000 to 2025. 3.76% CAGR vs 7.30% for the S&P 500. Down capture of 109.6%. Fully invested every year. It still failed.
We ran the revenue acceleration strategy on all US stocks (NYSE, NASDAQ, AMEX) from 2000 to 2025. The signal: buy companies whose revenue growth rate is speeding up, filtered for quality. The result: 3.76% annualized vs 7.30% for the S&P 500. A $10,000 investment grew to $25,029 vs $59,823 for the index.
Contents
- Method
- What is Revenue Acceleration?
- What We Found
- The strategy underperformed in 17 of 25 years.
- Year-by-Year Returns
- The early years looked like confirmation.
- 2011, 2019, and 2021 broke it.
- Why the signal fails.
- Limitations
- Takeaway
- Part of a Series
- Run This Screen Yourself
- References
The strategy underperformed by 3.54 percentage points per year and captured 109.6% of the market's downside. It took on more risk and delivered less return.
Data: FMP financial data warehouse, 2000–2025. Updated March 2026.
Method
Data source: Ceta Research (FMP financial data warehouse) Universe: NYSE + NASDAQ + AMEX, market cap > $1B USD Period: 2000–2025 (25 years, 25 annual periods) Rebalancing: Annual (April 1), equal weight Benchmark: S&P 500 Total Return (SPY) 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)
All financial data uses a 45-day lag on annual filings to prevent look-ahead bias. Revenue figures, ROE, and debt-to-equity come from fiscal year filings as they would have been available at each April rebalance date.
What is Revenue Acceleration?
Revenue growth is straightforward: how much did revenue increase year-over-year? Revenue acceleration is a second-order metric: is that growth rate speeding up or slowing down?
A company with 10% YoY revenue growth that grew 7% the prior year is accelerating. A company with 25% revenue growth that grew 30% the prior year is decelerating, even though it's still a fast grower. The acceleration signal tries to find companies whose growth story is improving.
Signal computation: - growth_current = (revenue_t - revenue_t1) / revenue_t1 (most recent FY vs prior FY) - growth_prior = (revenue_t1 - revenue_t2) / revenue_t2 (prior FY vs two years ago) - acceleration = growth_current - growth_prior
Requires three consecutive annual revenue filings per symbol.
All six filters must pass at each April rebalance:
| Filter | Threshold | Why |
|---|---|---|
| Revenue acceleration | > 0 | Growth rate must be speeding up |
| Current revenue growth | > 5% | Exclude recovering-from-near-zero noise |
| Return on equity | > 10% | Quality filter |
| Debt/equity | < 1.5 | Reasonable leverage |
| Market cap | > $1B USD | Liquid, institutional-grade stocks |
| Selection | Top 30 by acceleration magnitude | Rank by strength of signal |
Academic basis: Chan, Karceski & Lakonishok (1996) documented that revenue growth momentum predicts future returns. Lakonishok, Shleifer & Vishny (1994) showed that analysts systematically underextrapolate fundamental momentum, creating predictable mispricings.
What We Found

The strategy underperformed in 17 of 25 years.
| Metric | Revenue Acceleration | S&P 500 |
|---|---|---|
| CAGR | 3.76% | 7.30% |
| Total Return | 150% | 498% |
| Max Drawdown | -42.06% | -40.77% |
| Sharpe Ratio | 0.066 | 0.242 |
| Up Capture | 82.4% | — |
| Down Capture | 109.6% | — |
| Cash Periods | 0 of 25 | — |
| Avg Stocks | 24.7 | — |
The strategy was fully invested every year — no periods where qualifying stocks dropped below 10. That means the underperformance can't be explained by cash drag.
The down capture of 109.6% tells the core story. In years when the S&P 500 fell, this portfolio fell further. In years when the market rose, it captured only 82.4% of that upside. That combination produces structural underperformance.
Year-by-Year Returns

| Year | Rev Accel | S&P 500 | Excess |
|---|---|---|---|
| 2000 | -12.86% | -23.68% | +10.8% |
| 2001 | +15.33% | +1.61% | +13.7% |
| 2002 | -21.65% | -23.62% | +2.0% |
| 2003 | +47.42% | +34.33% | +13.1% |
| 2004 | +33.15% | +5.23% | +27.9% |
| 2005 | +43.03% | +12.43% | +30.6% |
| 2006 | +3.63% | +11.60% | -8.0% |
| 2007 | +14.28% | -2.03% | +16.3% |
| 2008 | -39.08% | -39.11% | 0.0% |
| 2009 | +58.46% | +48.25% | +10.2% |
| 2010 | +20.16% | +15.27% | +4.9% |
| 2011 | -22.05% | +8.77% | -30.8% |
| 2012 | +0.06% | +12.46% | -12.4% |
| 2013 | +16.56% | +23.07% | -6.5% |
| 2014 | +5.84% | +11.41% | -5.6% |
| 2015 | -16.70% | +2.74% | -19.4% |
| 2016 | +20.16% | +16.08% | +4.1% |
| 2017 | +3.09% | +11.49% | -8.4% |
| 2018 | +10.91% | +13.17% | -2.3% |
| 2019 | -42.06% | -12.12% | -29.9% |
| 2020 | +40.66% | +65.36% | -24.7% |
| 2021 | -13.88% | +14.55% | -28.4% |
| 2022 | -17.35% | -7.73% | -9.6% |
| 2023 | +33.10% | +28.90% | +4.2% |
| 2024 | -2.51% | +8.80% | -11.3% |
The early years looked like confirmation.
From 2000 to 2007, the strategy mostly beat the S&P 500 — and in 2004 and 2005 by enormous margins (+27.9% and +30.6%). After the dot-com crash, accelerating companies were genuinely mispriced. Energy companies, mid-cap industrials, healthcare names the market had written off alongside tech: the acceleration filter found them before the market rerated them.
If the backtest had stopped in 2007, this would be a very different write-up.
2011, 2019, and 2021 broke it.
Three years define the strategy's failure.
2011: Portfolio -22.1% vs SPY +8.8%. A -30.8% gap. The European sovereign debt crisis and US credit downgrade triggered a risk-off rotation. Revenue accelerators in 2011 were overweight cyclical and tech names that got hit hard in the selloff.
2019: Portfolio -42.1% vs SPY -12.1%. A -29.9% gap. This is the worst single year in the study. The portfolio was concentrated in names that had accelerated through the 2018 growth cycle, many of which got cut in half when growth expectations reset.
2021: Portfolio -13.9% vs SPY +14.6%. A -28.4% gap. In a year when the index returned nearly 15%, the acceleration portfolio declined. This is the clearest evidence that the signal picks peak-cycle names that are about to decelerate.
Why the signal fails.
Revenue acceleration identifies companies at the top of their growth trajectory. The logic is that market participants will underestimate how long the acceleration lasts, creating persistent mispricing. The data says the opposite happens: markets already price in the acceleration. By April of any given year, companies that showed the strongest revenue growth acceleration in their last filing are already trading at premium valuations.
When growth expectations miss, these are exactly the names that fall furthest. The down capture of 109.6% isn't a fluke. It's the mechanism.
Limitations
Annual rebalancing creates lag. The strategy rebalances once per year in April. If a company's revenue growth peaked in the prior fiscal year and decelerated in the current one, the signal won't catch it until the next April filing. This means holding names that have already decelerated for up to 12 months.
Revenue is a lagging indicator. Revenue figures for fiscal year 2024 become available around March 2025. By the time we act on them, the market has already seen multiple quarters of data suggesting the direction.
Survivorship bias. Company profiles use current exchange listings. Delisted companies that went to zero aren't tracked through their failure. This biases results upward — true performance is likely modestly worse.
Transaction costs included. Results reflect size-tiered transaction costs on entry and exit. Without costs, CAGR would be approximately 0.3–0.5% higher annually.
25 years spans multiple regimes. The strategy behaved differently in the 2000–2010 period (mostly positive alpha) vs 2011–2024 (mostly negative alpha). No single regime dominates the full period.
Takeaway
Revenue acceleration fails as a standalone strategy in the US market. Over 25 years, it returned 3.76% annually against 7.30% for the S&P 500 — a $10,000 investment grew to $25,029 vs $59,823 for the index. The risk metrics confirm the underperformance isn't just bad luck: down capture of 109.6%, Sharpe ratio of 0.066 vs the benchmark's 0.242.
The honest interpretation: the US equity market prices growth momentum too efficiently for revenue acceleration alone to generate alpha. The signal is public, widely tracked, and reflects information that has already been bid into stock prices by the time it shows up in annual filings.
Revenue acceleration may still have value as a secondary filter combined with valuation screens or as a momentum confirmation signal. As the primary ranking factor, it doesn't work in the US.
Part of a Series
This post is part of our Revenue Acceleration global exchange comparison:
- Canada — Only market with positive excess return (+0.29%), and exceptional downside protection (44% down capture)
- Germany — Underperforms by 1.3%, but best max drawdown in the study (-29.91% vs SPY's -40.77%)
- [Revenue Acceleration: 12-Exchange Global Comparison] — Ranges from Canada +0.29% to Hong Kong -12.55%
Run This Screen Yourself
The current US revenue acceleration screen (top 30 accelerating stocks, TTM data):
WITH inc AS (
SELECT symbol, revenue, dateEpoch,
ROW_NUMBER() OVER (PARTITION BY symbol ORDER BY dateEpoch DESC) AS rn
FROM income_statement
WHERE period = 'FY' AND revenue > 0
),
rev_calc AS (
SELECT r1.symbol,
(r1.revenue - r2.revenue) / NULLIF(r2.revenue, 0) AS growth_current,
(r2.revenue - r3.revenue) / NULLIF(r3.revenue, 0) AS growth_prior,
(r1.revenue - r2.revenue) / NULLIF(r2.revenue, 0)
- (r2.revenue - r3.revenue) / NULLIF(r3.revenue, 0) AS acceleration
FROM inc r1
JOIN inc r2 ON r1.symbol = r2.symbol AND r2.rn = 2
JOIN inc r3 ON r1.symbol = r3.symbol AND r3.rn = 3
WHERE r1.rn = 1
),
met AS (
SELECT symbol, returnOnEquity, marketCap,
ROW_NUMBER() OVER (PARTITION BY symbol ORDER BY dateEpoch DESC) AS rn
FROM key_metrics WHERE period = 'FY'
),
rat AS (
SELECT symbol, debtToEquityRatio,
ROW_NUMBER() OVER (PARTITION BY symbol ORDER BY dateEpoch DESC) AS rn
FROM financial_ratios WHERE period = 'FY'
)
SELECT rc.symbol,
p.companyName,
p.sector,
ROUND(rc.growth_current * 100, 1) AS current_growth_pct,
ROUND(rc.growth_prior * 100, 1) AS prior_growth_pct,
ROUND(rc.acceleration * 100, 1) AS acceleration_ppt,
ROUND(m.returnOnEquity * 100, 1) AS roe_pct,
ROUND(r.debtToEquityRatio, 2) AS de_ratio,
ROUND(m.marketCap / 1e9, 1) AS mktcap_b
FROM rev_calc rc
JOIN met m ON rc.symbol = m.symbol AND m.rn = 1
JOIN rat r ON rc.symbol = r.symbol AND r.rn = 1
JOIN profile p ON rc.symbol = p.symbol
WHERE rc.growth_current > rc.growth_prior
AND rc.growth_current > 0.05
AND m.returnOnEquity > 0.10
AND r.debtToEquityRatio >= 0
AND r.debtToEquityRatio < 1.5
AND m.marketCap > 1000000000
AND p.exchange IN ('NYSE', 'NASDAQ', 'AMEX')
ORDER BY rc.acceleration DESC
LIMIT 30
Run this screen on Ceta Research
The full backtest code (Python + DuckDB) is on GitHub.
References
- Chan, L., Karceski, J., & Lakonishok, J. (1996). "Momentum Strategies." Journal of Finance, 51(5), 1681–1713.
- Lakonishok, J., Shleifer, A., & Vishny, R. (1994). "Contrarian Investment, Extrapolation, and Risk." Journal of Finance, 49(5), 1541–1578.
Data: Ceta Research, FMP financial data warehouse. Universe: NYSE + NASDAQ + AMEX. Annual rebalance (April), equal weight, transaction costs included, 2000–2025.