FCF Growth Stocks: Lower Drawdowns, Lower Returns (25-Year Backtest)
We backtested FCF growth stocks across NYSE, NASDAQ, AMEX from 2000 to 2025. The strategy absorbs crashes at about half the rate of SPY (51.3% down capture) but trails on absolute return (6.57% vs 7.85% CAGR). Honest results from a 25-year run.
The FCF growth screen produces a quality portfolio that survives crashes better than the index. From 2000 to 2025, it absorbed about half of SPY's downside while staying fully invested throughout. The tradeoff is real: you give up meaningful absolute return to get that protection, and the strategy bleeds badly in late-cycle momentum regimes.
Contents
- Method
- The Screen
- Simple Screen
- Advanced Screen
- Results
- When It Works
- When It Fails
- Annual Returns
- Limitations
- Global Context
- Run It Yourself
Data: FMP financial data warehouse, 2000–2025. Updated August 2026.
Method
The strategy selects US stocks with genuine cash generation growth. FCF must grow more than 15% year-over-year, and operating cash flow must grow too. That second condition matters. Without it, a company can lift FCF simply by slashing capital expenditures, which looks like growth in the signal but isn't growth in the business.
Quality filters keep the portfolio away from leveraged, low-return companies: ROE above 10% and debt-to-equity below 1.5. The top 30 stocks by FCF growth rate get equal-weighted and held for a year.
| Parameter | Setting |
|---|---|
| Universe | NYSE, NASDAQ, AMEX |
| Market cap | >$1B |
| Signal | FCF growth YoY >15%, OCF growth YoY >0% |
| Quality | ROE >10%, D/E <1.5 |
| Selection | Top 30 by FCF growth, equal weight |
| Cash rule | Hold cash if <10 qualify |
| Rebalancing | Annual (July), 45-day data lag |
| Execution | MOC (next-day close after rebalance signal) |
| Costs | Size-tiered transaction costs |
| Benchmark | S&P 500 Total Return (SPY) |
| Period | 2000–2025 (25 periods) |
| Code | github.com/ceta-research/backtests |
The 45-day data lag after fiscal year-end prevents lookahead bias. Annual statements filed in June don't enter the July rebalance. Entry and exit prices use the next trading day's close after each rebalance date (MOC execution), which correctly models realistic order execution.
One convention to note before reading any annual figure below. Each period runs July to July and is labelled by the year it begins, so "2008" means July 2008 through July 2009, not the calendar year. Period returns therefore won't match calendar-year figures you may have seen elsewhere, and a single period can contain both a crash and the recovery that followed it. Portfolio and benchmark are measured over identical windows, so excess returns are consistent.
The academic grounding comes from Sloan (1996), who showed that cash-backed earnings outperform accrual-heavy earnings. Companies that report earnings mostly backed by actual cash tend to continue outperforming. The FCF growth signal is a direct application of that idea: filter for companies where cash generation is accelerating, not just earnings on paper.
The Screen
Simple Screen
Ranks US-listed stocks by year-over-year FCF growth, with a 15% minimum threshold and $500M market cap floor. The live screen uses a lower floor than the backtest's $1B so it surfaces a broader slice of today's market. Run it directly: cetaresearch.com/data-explorer?q=ztSzllg18F
WITH cf AS (
SELECT symbol, freeCashFlow AS fcf, reportedCurrency,
ROW_NUMBER() OVER (PARTITION BY symbol ORDER BY dateEpoch DESC) AS rn
FROM cash_flow_statement WHERE period = 'FY'
)
SELECT cc.symbol, p.companyName,
ROUND((cc.fcf - cp.fcf) / ABS(cp.fcf) * 100, 1) AS fcf_growth_pct,
ROUND(cc.fcf / 1e6, 1) AS fcf_m,
ROUND(p.marketCap / 1e9, 2) AS mktcap_bn
FROM cf cc
JOIN cf cp ON cc.symbol = cp.symbol AND cp.rn = 2
JOIN profile p ON cc.symbol = p.symbol
WHERE cc.rn = 1
AND cc.fcf > 0 AND cp.fcf > 0
AND (cc.fcf - cp.fcf) / ABS(cp.fcf) > 0.15
AND p.marketCap > 500000000
AND p.exchange IN ('NYSE', 'NASDAQ', 'AMEX')
-- data-quality guards
AND p.isFund = false AND p.isEtf = false AND p.isActivelyTrading = true
AND cc.reportedCurrency = p.currency
AND p.industry <> 'Asset Management'
AND cc.fcf < p.marketCap
AND cp.fcf >= 0.002 * p.marketCap
QUALIFY ROW_NUMBER() OVER (PARTITION BY COALESCE(p.cik, p.symbol)
ORDER BY p.averageVolume DESC) = 1
ORDER BY fcf_growth_pct DESC
LIMIT 30
Advanced Screen
Adds the capex-cut guard (OCF must also grow), ROE quality filter, and leverage check. cetaresearch.com/data-explorer?q=XHrcAYb3pr
WITH cf AS (
SELECT symbol, freeCashFlow AS fcf, operatingCashFlow AS ocf, reportedCurrency,
ROW_NUMBER() OVER (PARTITION BY symbol ORDER BY dateEpoch DESC) AS rn
FROM cash_flow_statement WHERE period = 'FY'
)
SELECT cc.symbol, p.companyName,
ROUND((cc.fcf - cp.fcf) / ABS(cp.fcf) * 100, 1) AS fcf_growth_pct,
ROUND((cc.ocf - cp.ocf) / ABS(cp.ocf) * 100, 1) AS ocf_growth_pct,
ROUND(k.returnOnEquityTTM * 100, 1) AS roe_pct,
ROUND(f.debtToEquityRatioTTM, 2) AS debt_equity,
ROUND(p.marketCap / 1e9, 2) AS mktcap_bn
FROM cf cc
JOIN cf cp ON cc.symbol = cp.symbol AND cp.rn = 2
JOIN key_metrics_ttm k ON cc.symbol = k.symbol
JOIN financial_ratios_ttm f ON cc.symbol = f.symbol
JOIN profile p ON cc.symbol = p.symbol
WHERE cc.rn = 1
AND cc.fcf > 0 AND cp.fcf > 0
AND (cc.fcf - cp.fcf) / ABS(cp.fcf) > 0.15
AND (cc.ocf - cp.ocf) / ABS(cp.ocf) > 0.0
AND k.returnOnEquityTTM > 0.10
AND f.debtToEquityRatioTTM < 1.5
AND p.marketCap > 500000000
AND p.exchange IN ('NYSE', 'NASDAQ', 'AMEX')
-- data-quality guards
AND p.isFund = false AND p.isEtf = false AND p.isActivelyTrading = true
AND cc.reportedCurrency = p.currency
AND p.industry <> 'Asset Management'
AND cc.fcf < p.marketCap
AND cp.fcf >= 0.002 * p.marketCap
QUALIFY ROW_NUMBER() OVER (PARTITION BY COALESCE(p.cik, p.symbol)
ORDER BY p.averageVolume DESC) = 1
ORDER BY fcf_growth_pct DESC
LIMIT 30
Reading the output. Growth rate is a ratio, so the top of both lists is companies rebounding off a small prior-year base rather than the largest cash generators. The 0.2%-of-market-cap floor on last year's free cash flow keeps the millions-of-percent cases out, but a company going from $2M to $85M of free cash flow still outranks one going from $2B to $3B. That's the strategy as specified rather than a data problem: the backtest ranks by the same rate and buys the same names. Sort by the FCF column when you want scale rather than rate.
Results
| Metric | FCF Growth | SPY |
|---|---|---|
| CAGR | 6.57% | 7.85% |
| Total Return | 390.7% | 561.7% |
| Max Drawdown | -31.80% | -38.01% |
| Volatility | 18.64% | — |
| Sharpe | 0.245 | — |
| Sortino | 0.420 | — |
| Beta | 0.797 | 1.00 |
| Up Capture | 79.1% | — |
| Down Capture | 51.3% | — |
| Win Rate vs SPY | 32% (8/25 years) | — |
| $10,000 grew to | $49,071 | $66,167 |

The headline number is blunt. SPY returned 7.85% annually over 25 years; this portfolio returned 6.57%. On a dollar basis: $10,000 grew to $49,071 vs $66,167 in SPY. The strategy trails the index.
But the down capture ratio tells a different story. At 51.3%, the portfolio absorbed crashes at roughly half the rate of SPY. When markets fell, these stocks fell less. That asymmetry shows up in the drawdown numbers: -31.80% max drawdown versus SPY's -38.01%, and more meaningfully in how fast the portfolio recovered from stress years.
The Sortino ratio (0.420) is notably better than the Sharpe (0.245), which tells you the volatility that does occur skews toward the upside more than the downside.
When It Works
The FCF growth screen earns its keep during market stress and economic transitions.
2000-2001 was the strategy's showcase. While the dot-com bust destroyed SPY by -14.8% then -22.4%, the portfolio returned +8.8% and -3.1%. Excess returns: +23.6% and +19.4% in consecutive years. Companies with real cash generation simply weren't in the sectors that imploded.
2007 was another standout: +7.5% portfolio return when SPY dropped -15.2%, a +22.6% excess return. The sub-prime unwind hit financial stocks hard. FCF-generating companies in other sectors mostly avoided direct exposure.
2004 (+17.8% excess) and 2009 (+23.2% excess) show the strategy also works in early recovery phases. After a crash, companies with durable cash generation tend to re-rate faster than speculative names. The portfolio caught the 2009 rebound while maintaining quality filters.
The pattern is consistent: the screen works when the market is punishing companies that can't back up their earnings with cash, whether that's dot-com era accounting games, 2007-2008 leverage, or post-crisis recovery.
When It Fails
The strategy has a clear failure mode: late-cycle momentum regimes when investors pay premium multiples for growth regardless of cash quality.
2019 was the worst single year: -17.4% portfolio return when SPY rose +7.4%, a -24.8% excess return. The 2019 market was driven by multiple expansion in high-growth, often FCF-negative technology names. The FCF quality filter systematically excluded the exact companies driving returns. You were holding the right businesses and watching the wrong ones win.
2018 was similar: -2.4% portfolio, +11.2% SPY. 2017 was quieter but still painful: +5.2% vs +14.3%.
The 2015 result (-21.6% excess) came during a mid-cycle rotation where energy sector companies, many of which had strong FCF histories, saw their cash generation collapse with oil prices. A backwards-looking FCF filter doesn't protect against a sudden shift in the underlying business environment.
2021 is instructive, and it fails for a different reason than the others: -27.5% portfolio vs -10.7% SPY. This period runs July 2021 to July 2022, the rate-shock selloff. Speculative growth was not what beat the portfolio here, since those names fell hardest of all. What hurt was size. Equal weighting across roughly 24 mid-cap names tracks the small and mid-cap market far more closely than the S&P 500's mega-cap concentration, and the Russell 2000 fell about 22% over that window while the S&P 500 lost 10.7%. The screen's quality filters offered no protection against a repricing that hit everything below mega-cap.
2008 warrants a separate note. The portfolio lost -31.8% while SPY lost -26.9%. FCF-generating companies weren't immune to a credit crisis. When markets seize and correlations go to one, quality screens don't help. The "down capture" figure of 51.3% is a 25-year average that includes some years when the portfolio absorbed less. In the worst single year, it didn't.
Annual Returns

| Year | Portfolio | SPY | Excess |
|---|---|---|---|
| 2000 | +8.8% | -14.8% | +23.6% |
| 2001 | -3.1% | -22.4% | +19.4% |
| 2002 | +8.4% | +6.9% | +1.6% |
| 2003 | +16.4% | +14.9% | +1.4% |
| 2004 | +26.7% | +8.9% | +17.8% |
| 2005 | +17.2% | +8.0% | +9.3% |
| 2006 | +16.5% | +20.9% | -4.5% |
| 2007 | +7.5% | -15.2% | +22.6% |
| 2008 | -31.8% | -26.9% | -4.9% |
| 2009 | +39.2% | +16.0% | +23.2% |
| 2010 | +31.7% | +33.5% | -1.8% |
| 2011 | -4.2% | +4.2% | -8.4% |
| 2012 | +20.3% | +20.7% | -0.4% |
| 2013 | +17.3% | +24.7% | -7.5% |
| 2014 | -5.4% | +7.2% | -12.6% |
| 2015 | -18.9% | +2.7% | -21.6% |
| 2016 | +18.3% | +18.6% | -0.3% |
| 2017 | +5.2% | +14.3% | -9.2% |
| 2018 | -2.4% | +11.2% | -13.6% |
| 2019 | -17.4% | +7.4% | -24.8% |
| 2020 | +37.9% | +41.0% | -3.0% |
| 2021 | -27.5% | -10.7% | -16.8% |
| 2022 | +11.6% | +18.1% | -6.5% |
| 2023 | +21.4% | +25.4% | -4.1% |
| 2024 | +12.6% | +14.4% | -1.8% |
The win rate against SPY is 32% (8 out of 25 years). The 8 outperforming years cluster in bear markets and early recoveries. The 17 underperforming years dominate bull runs.
Limitations
Backward-looking signal. FCF growth from the prior fiscal year doesn't predict FCF growth in the coming year. A company that generated strong cash last year may face margin compression, capex requirements, or industry headwinds this year. The screen captures past cash quality, not future cash quality.
No forward guidance. The strategy can't distinguish between FCF growth from genuine business expansion versus one-time working capital releases, asset sales, or deferred maintenance. The OCF growth guard helps, but it's imperfect.
25-year sample period. The strategy's best stretch was 2000-2009. That period included two major market dislocations where cash generation mattered acutely. Post-2010, the strategy has been largely underwater against SPY. Whether the post-2009 underperformance is regime-specific or structural isn't answerable from this data set.
Concentration. 30 stocks equal-weighted creates idiosyncratic risk. One sector or theme rotation can drive large single-year swings. The effective count is lower than the headline: the backtest universe is built from listings rather than companies, so a business with a common share and a preferred series can occupy two of the 30 slots. Across the 25 US periods, duplicate listings account for about 7% of positions and fund vehicles for a further 3%, which means the real diversification is closer to 27 names than 30.
Transaction costs. The backtest uses size-tiered cost estimates. Real-world costs depend on position sizing, liquidity, and execution. For smaller portfolios, per-share commission structures change the math.
Point-in-time data. All rebalances use data available 45 days after fiscal year-end to prevent lookahead bias. Live implementation requires the same discipline, which means working with a data provider that offers verified point-in-time financial statements.
Global Context
This analysis covers US-listed stocks only. The FCF growth signal behaves differently across markets. A global comparison across exchanges is covered in the companion blog on the FCF growth strategy's international results.
Run It Yourself
Both screens query the Ceta Research FMP warehouse directly.
Today's FCF growth leaders (simple): cetaresearch.com/data-explorer?q=ztSzllg18F
With quality filters (advanced): cetaresearch.com/data-explorer?q=XHrcAYb3pr
The full backtest code, including methodology, annual rebalance logic, and cost model, is on GitHub: github.com/ceta-research/backtests
Data: Ceta Research (FMP warehouse), TTM metrics. Backtest period: 2000–2025. Execution: MOC (next-day close). Benchmark: S&P 500 total return via SPY. Past performance does not guarantee future results. Not investment advice.