Value-Momentum: Combining Cheap Stocks and Price Trends on 25 Years of US Data
We combined value (low P/E) and momentum (12-month price trend) into a composite screen and backtested it on all US exchanges from 2000 to 2025. Value-Momentum returned 11.18% annually vs 7.75% for the S&P 500.
We combined two of the oldest factors in finance, value and momentum, into a single composite screen and backtested it on all US exchanges from 2000 to 2025. Value-Momentum returned 11.18% annually vs 7.75% for the S&P 500, with 3.41% annual alpha and zero cash periods across 51 rebalance cycles.
Contents
- Method
- What is Value-Momentum?
- The Screen
- Value-Momentum Screen (SQL)
- What We Found
- 25 years of data. 3.4% annual alpha over the S&P 500.
- Year-by-year returns
- The golden era: 2000-2007
- The financial crisis: 2008
- The struggle: 2018-2021
- The recovery: 2022-2025
- 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: All US exchanges (NYSE, NASDAQ, AMEX), market cap > $1B USD Period: 2000-2025 (25 years, 51 semi-annual periods) Rebalancing: Semi-annual (January, July), equal weight, top 30 by composite rank Benchmark: S&P 500 Total Return (SPY) Cash rule: Hold cash if fewer than 10 stocks qualify
12-month momentum computed with a 1-month skip to avoid short-term reversal. Financial data lagged 45 days to prevent look-ahead bias. Transaction costs are size-tiered (0.1-0.5% one-way based on market cap). Entry uses next-day close (MOC execution model).
What is Value-Momentum?
The academic foundation comes from Asness, Moskowitz, and Pedersen (2013), who showed that value and momentum factors are negatively correlated across asset classes and geographies. When value stocks underperform, momentum stocks tend to pick up the slack, and vice versa. Combining them creates a natural hedge that neither factor offers alone.
Our screen works in three steps.
Step 1: Value Filter
| Criterion | Metric | Threshold |
|---|---|---|
| Cheap earnings | P/E Ratio | Between 0 and 20 |
| Capital efficiency | Return on Equity | > 10% |
| Balance sheet safety | Debt-to-Equity | < 1.0 |
| Institutional grade | Market Cap | > $1B USD |
Step 2: Momentum Signal
12-month price return with a 1-month skip. The skip avoids the well-documented short-term reversal effect. Stocks that have been rising for a year (but not just the last month) tend to keep rising.
Step 3: Composite Ranking
Every stock that passes the value filter gets two percentile scores: one for P/E (ascending, cheaper is better) and one for 12-month momentum (descending, higher is better). We average those two percentile ranks and take the top 30.
The result is a portfolio of cheap, profitable, low-leverage companies with strong recent price trends.
The Screen
Value-Momentum Screen (SQL)
SELECT
k.symbol,
p.companyName,
f.priceToEarningsRatioTTM as pe_ratio,
k.returnOnEquityTTM * 100 as roe_pct,
f.debtToEquityRatioTTM as debt_to_equity,
k.marketCap / 1e9 as market_cap_billions
FROM key_metrics_ttm k
JOIN financial_ratios_ttm f ON k.symbol = f.symbol
JOIN profile p ON k.symbol = p.symbol
WHERE f.priceToEarningsRatioTTM > 0
AND f.priceToEarningsRatioTTM < 20
AND k.returnOnEquityTTM > 0.10
AND f.debtToEquityRatioTTM >= 0
AND f.debtToEquityRatioTTM < 1.0
AND k.marketCap > 1e9
AND p.exchange IN ('NYSE', 'NASDAQ', 'AMEX')
ORDER BY f.priceToEarningsRatioTTM ASC
LIMIT 100
Run this query on Ceta Research
This gives you the value-filtered universe. The full backtest adds 12-month momentum ranking and selects the top 30 by composite score.
What We Found

25 years of data. 3.4% annual alpha over the S&P 500.
| Metric | Value-Momentum (US) | S&P 500 |
|---|---|---|
| CAGR | 11.18% | 7.75% |
| Total Return | 1392% | 570% |
| Volatility | 21.0% | 15.0% |
| Max Drawdown | -52.56% | -38.01% |
| Sharpe Ratio | 0.438 | 0.382 |
| Sortino Ratio | 0.706 | - |
| Calmar Ratio | 0.213 | - |
| Beta | 0.93 | 1.00 |
| Alpha (annualized) | 3.85% | - |
| Up Capture | 123.9% | - |
| Down Capture | 77.0% | - |
| Win Rate (semi-annual) | 45.1% | - |
| Avg Stocks per Period | 29.6 | - |
| Cash Periods | 0 of 51 | - |
Value-Momentum turned $10,000 into roughly $149,000. The S&P 500 turned it into $67,000. The strategy was fully invested every period, averaging 29.6 stocks per rebalance.
The alpha story is clear: 3.85% annualized alpha with a beta of 0.93. The down capture ratio of 77.0% means the portfolio absorbed about 77% of the market's losses during down periods, while the up capture of 123.9% grabbed more than the full upside during rallies. That asymmetry is the core value proposition.
The tradeoff is volatility. At 21.0% vs 15.0% for the S&P 500, this portfolio swings harder. The max drawdown of -52.56% during the financial crisis was deeper than the benchmark's -38.01%. This is a concentrated 30-stock portfolio of value names with momentum tilt. When both factors sell off together, the damage is real.
Year-by-year returns

| Year | Value-Momentum | S&P 500 | Excess |
|---|---|---|---|
| 2000 | +23.38% | -10.50% | +33.88% |
| 2001 | +6.62% | -9.17% | +15.79% |
| 2002 | +2.24% | -19.92% | +22.15% |
| 2003 | +29.17% | +24.12% | +5.05% |
| 2004 | +18.55% | +10.24% | +8.32% |
| 2005 | +56.70% | +7.17% | +49.53% |
| 2006 | +23.32% | +13.65% | +9.67% |
| 2007 | +27.28% | +4.40% | +22.88% |
| 2008 | -40.97% | -34.31% | -6.66% |
| 2009 | +15.72% | +24.73% | -9.01% |
| 2010 | +12.34% | +14.31% | -1.97% |
| 2011 | -9.26% | +2.46% | -11.72% |
| 2012 | +24.25% | +17.09% | +7.16% |
| 2013 | +29.80% | +27.77% | +2.02% |
| 2014 | +9.26% | +14.50% | -5.23% |
| 2015 | -10.00% | -0.12% | -9.88% |
| 2016 | +6.83% | +14.45% | -7.62% |
| 2017 | +30.30% | +21.64% | +8.66% |
| 2018 | -31.12% | -5.15% | -25.97% |
| 2019 | +15.91% | +32.31% | -16.40% |
| 2020 | +11.49% | +15.64% | -4.15% |
| 2021 | +21.93% | +31.26% | -9.33% |
| 2022 | -11.67% | -18.99% | +7.32% |
| 2023 | +34.20% | +26.00% | +8.20% |
| 2024 | +33.50% | +25.28% | +8.22% |
| 2025 | +11.54% | +6.76% | +4.79% |
The golden era: 2000-2007
The first eight years of the backtest were spectacular. The value filter kept bubble-era tech stocks out of the portfolio entirely. Companies trading at P/E ratios above 20 never entered the screen. Meanwhile, the momentum component selected the strongest trending names among the value-filtered universe.
| Year | Value-Momentum | S&P 500 | Excess |
|---|---|---|---|
| 2000 | +23.38% | -10.50% | +33.88% |
| 2001 | +6.62% | -9.17% | +15.79% |
| 2002 | +2.24% | -19.92% | +22.15% |
While the S&P 500 lost a cumulative 35% during the dot-com bust, Value-Momentum returned a cumulative +35%. The P/E cap was the key filter: it excluded stocks trading at triple-digit multiples. The momentum overlay then picked the best performers among the survivors.
2005 stands out: +56.70% vs +7.17% for the S&P 500. That 49.53% excess return in a single year is the largest annual gap in the entire backtest. Value stocks with strong momentum crushed it during the mid-2000s bull market. 2007 was another banner year at +27.28%, outpacing SPY by 22.88%.
The financial crisis: 2008
2008 was painful. The portfolio lost 40.97% vs the S&P 500's -34.31%. This is the one crisis where Value-Momentum didn't protect capital. The concentrated 30-stock portfolio amplified the damage compared to the broad-market index. Value and momentum factors both sold off together during the liquidity panic, which is exactly what Asness et al. warned about: in a leverage unwind, factor correlations spike toward 1.0.
The recovery was slower too. 2009 returned +15.72% vs SPY's +24.73%. The screen selected value names that bounced less aggressively than the growth stocks that led the initial recovery.
The struggle: 2018-2021
| Year | Value-Momentum | S&P 500 | Excess |
|---|---|---|---|
| 2018 | -31.12% | -5.15% | -25.97% |
| 2019 | +15.91% | +32.31% | -16.40% |
| 2020 | +11.49% | +15.64% | -4.15% |
| 2021 | +21.93% | +31.26% | -9.33% |
This was the worst stretch in the backtest. 2018 was the single worst year: -31.12% vs SPY's -5.15%. Small and mid-cap value stocks with fading momentum got crushed during the Q4 2018 sell-off. The P/E and market cap filters created a portfolio exposed to exactly the companies that were hit hardest.
2019-2021 wasn't much better. The strategy kept lagging by double digits in 2019 and single digits in 2020-2021. The cause: megacap growth stocks (FAANG, NVIDIA, Tesla) drove the bulk of S&P 500 returns. These companies had P/E ratios well above 20 and never entered the screen. The down capture ratio of 77.0% shows the strategy did absorb more downside than ideal, and missing the biggest rallies in a handful of tech names was the dominant factor.
The recovery: 2022-2025
| Year | Value-Momentum | S&P 500 | Excess |
|---|---|---|---|
| 2022 | -11.67% | -18.99% | +7.32% |
| 2023 | +34.20% | +26.00% | +8.20% |
| 2024 | +33.50% | +25.28% | +8.22% |
| 2025 | +11.54% | +6.76% | +4.79% |
The rotation back to value started in 2022, and Value-Momentum caught it. The composite screen delivered +34.20% in 2023 and +33.50% in 2024, beating the S&P 500 in both years. Rising interest rates punished long-duration growth stocks and rewarded the kind of profitable, low-leverage, reasonably-priced companies that populate this portfolio.
The strategy has now outperformed in four consecutive years. Whether that streak continues depends on rate policy and whether the value rotation holds. But the recent results show the screen still works when market conditions favor its factors.
Backtest Methodology
| Parameter | Choice |
|---|---|
| Universe | NYSE + NASDAQ + AMEX, Market Cap > $1B USD |
| Value Signal | P/E 0-20, ROE > 10%, D/E < 1.0 |
| Momentum Signal | 12-month price return, 1-month skip |
| Composite Rank | avg(P/E percentile ASC + momentum percentile DESC) |
| Portfolio | Top 30 by composite rank, equal weight |
| Rebalancing | Semi-annual (January, July) |
| Cash rule | Hold cash if < 10 qualify |
| Transaction Costs | Size-tiered: 0.1-0.5% one-way |
| Benchmark | S&P 500 Total Return (SPY) |
| Period | 2000-2025 (25 years, 51 periods) |
| Data | Point-in-time (45-day lag for financial statements) |
Limitations
Higher drawdown than the benchmark. The max drawdown of -52.56% is much deeper than the S&P 500's -38.01%. A 30-stock concentrated portfolio will always swing harder than a 500-stock index. Investors need to stomach larger losses during crises.
2018 crash risk. The worst year saw -31.12% vs SPY's -5.15%. When small/mid-cap value stocks with fading momentum sell off, the damage can be severe. This is the strategy's tail risk.
Value trap exposure. Stocks with low P/E ratios and positive 12-month momentum can still be value traps. The ROE and D/E filters reduce this risk but don't eliminate it. A stock can look cheap and trending up right until it falls off a cliff.
Momentum whipsaws. The 12-month lookback with 1-month skip is standard but not immune to whipsaws. Sudden trend reversals between rebalance dates can leave the portfolio holding stocks that have already started declining.
Win rate below 50%. The semi-annual win rate is 45.1%. The strategy wins less than half the time but wins bigger when it wins. This requires psychological discipline to hold through losing stretches.
Survivorship bias. Exchange membership uses current profiles, not historical. IPOs and delistings aren't tracked over time.
Takeaway
Value-Momentum on US stocks delivered 11.18% CAGR over 25 years, 3.41% above the S&P 500. The academic insight holds up in practice: combining value and momentum creates a better portfolio than either factor alone. The negative correlation between the two factors smooths out the return stream, even if it doesn't eliminate drawdowns.
The strategy's weakness is concentration risk. Thirty stocks is enough to diversify idiosyncratic risk but not enough to avoid factor-level drawdowns. 2008 and 2018 both showed what happens when the factors turn against you simultaneously.
The recent four-year run (2022-2025) of consistent outperformance is encouraging, but the 2018-2021 stretch is a reminder that patience is required. This is a strategy that rewards investors who can hold through the bad years. Over 25 years, the math worked.
Part of a Series
This analysis is part of our Value-Momentum global exchange comparison. We tested the same composite screen on multiple markets worldwide: - Value-Momentum on Indian Stocks (BSE + NSE) - Value-Momentum on South African Stocks (JNB) - Value-Momentum on Swedish Stocks (STO) - Value-Momentum on Hong Kong Stocks (HKSE) - Value-Momentum on Canadian Stocks (TSX) - Value-Momentum on German Stocks (XETRA) - Value-Momentum: Global Exchange Comparison
References
- Asness, C., Moskowitz, T. & Pedersen, L. (2013). "Value and Momentum Everywhere." Journal of Finance, 68(3), 929-985.
- Jegadeesh, N. & Titman, S. (1993). "Returns to Buying Winners and Selling Losers: Implications for Stock Market Efficiency." Journal of Finance, 48(1), 65-91.
- Fama, E. & French, K. (1992). "The Cross-Section of Expected Stock Returns." Journal of Finance, 47(2), 427-465.
Run This Screen Yourself
Via web UI: Run the Value-Momentum screen on Ceta Research. 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"
# Submit the Value-Momentum value filter query
resp = requests.post(f"{BASE}/data-explorer/execute", headers={
"X-API-Key": API_KEY, "Content-Type": "application/json"
}, json={
"query": """
SELECT
k.symbol,
p.companyName,
f.priceToEarningsRatioTTM as pe_ratio,
k.returnOnEquityTTM * 100 as roe_pct,
f.debtToEquityRatioTTM as debt_to_equity,
k.marketCap / 1e9 as market_cap_billions
FROM key_metrics_ttm k
JOIN financial_ratios_ttm f ON k.symbol = f.symbol
JOIN profile p ON k.symbol = p.symbol
WHERE f.priceToEarningsRatioTTM > 0
AND f.priceToEarningsRatioTTM < 20
AND k.returnOnEquityTTM > 0.10
AND f.debtToEquityRatioTTM >= 0
AND f.debtToEquityRatioTTM < 1.0
AND k.marketCap > 1e9
AND p.exchange IN ('NYSE', 'NASDAQ', 'AMEX')
ORDER BY f.priceToEarningsRatioTTM ASC
LIMIT 100
""",
"options": {"format": "json", "limit": 100}
})
task_id = resp.json()["taskId"]
# Poll until complete
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/E={r['pe_ratio']:.1f} ROE={r['roe_pct']:.1f}% D/E={r['debt_to_equity']:.2f}")
Get your API key at cetaresearch.com. The full backtest code (Python + DuckDB) is on GitHub.
Data: Ceta Research, FMP financial data warehouse. Universe: NYSE + NASDAQ + AMEX. Semi-annual rebalance, equal weight, 2000-2025.