12-Month Momentum on Germany: Best Sharpe in an 18-Exchange Study
German equities don't make many headlines in factor investing literature. Most momentum research focuses on the US, Japan, or global markets. The XETRA data tells a different story. Pure 12-month momentum on German stocks from 2000 to 2025 delivered 12.58% annually with a Sharpe ratio of 0.561, the highest in an 18-exchange study covering Europe, Asia, North America, and emerging markets. It outperformed SPY by 4.84% per year with a max drawdown of -43.56%, which is lower than the S&P 500's own -36.65%.
Contents
- Method
- What We Found
- Backtest Methodology
- Why Germany?
- Limitations
- Takeaway
- Part of a Series
- References
- Run This Screen Yourself
Method
| Parameter | Value |
|---|---|
| Universe | XETRA (Germany) |
| Rebalancing | Semi-annual (January, July) |
| Signal | 12-month return, skip last month (12M-1M) |
| Selection | Top 30 by momentum, equal weight |
| Cash rule | Fewer than 10 qualifying stocks |
| Data source | FMP via Ceta Research warehouse |
| Benchmark | S&P 500 (SPY) |
| Period | 2000–2025 |
| Market cap filter | > €500M (~$550M USD, point-in-time, 45-day lag) |
0% of semi-annual periods went to cash. Germany's market cap coverage is deep enough to consistently produce 30+ qualifying stocks.
What We Found
25-year summary (2000–2025):
| Metric | 12M Momentum | S&P 500 (SPY) |
|---|---|---|
| CAGR | 12.58% | 7.75% |
| Total Return | 1,954.1% | 570.3% |
| Sharpe Ratio | 0.561 | 0.382 |
| Sortino Ratio | 0.978 | — |
| Max Drawdown | -43.56% | -36.65% |
| Down Capture | 75.29% | 100% |
| Up Capture | 129.59% | 100% |
| Cash Periods | 0 of 51 (0%) |
The Sharpe of 0.561 puts Germany ahead of every other exchange tested. For comparison, SPY's Sharpe over the same period was 0.382. The combination of 12.58% CAGR with a max drawdown of -43.56% is the best risk-adjusted profile in the study, the strategy generated more than 4% annual alpha with a smaller worst-case loss than SPY itself.
The down capture of 75.29% means the portfolio fell 25% less than SPY during market downturns on average. The up capture of 129.59% means it captured 30% more of the upside. That combination, more upside, less downside, is the ideal risk/return profile.
Year-by-year standouts:
| Year | 12M Momentum | SPY | Notes |
|---|---|---|---|
| 2000 | +17.0% | -10.5% | Crisis protection |
| 2005 | +41.1% | +7.2% | European growth surge |
| 2008 | -40.3% | -34.3% | Crisis — closer to SPY |
| 2009 | +8.2% | +24.7% | Muted recovery |
| 2010 | +52.0% | +14.3% | Post-crisis German industrial boom |
| 2013 | +34.0% | +27.8% | European recovery trade |
| 2015 | +30.5% | -0.1% | Germany outperformance year |
| 2019 | +40.1% | +32.3% | Pre-COVID momentum |
| 2022 | -13.7% | -19.0% | Protected in rate shock |
| 2024 | +36.0% | +25.3% | German industrials recovery |
2000 stands out. While the Nasdaq crashed and SPY fell -10.5%, Germany momentum returned +17%. The portfolio was long German industrial and chemical names that had real earnings momentum and weren't caught in the dot-com bubble. Germany's lack of a large tech sector in 2000 was an advantage, momentum led into the sectors that held up.
2010 acceleration. After a muted 2009 recovery (+8.2% vs SPY's +24.7%), Germany caught up aggressively in 2010 with +52.0% vs +14.3% for SPY. German industrial exports surged post-crisis as Asian demand recovered first. Momentum captured the sector rotation into XETRA industrial and materials names that led the cycle.
2022 protection. The strategy fell -13.7% vs SPY's -19.0% in 2022. Energy and materials stocks with genuine earnings momentum outperformed during the rate shock and commodity cycle. Germany momentum was long these sectors based on prior-year returns. This pattern, energy and inflation beneficiaries outperforming during rate shocks, appears in the US as well, but Germany's weaker growth-stock sector weighting reduced the rate-sensitivity drag.
The 2008 note. Germany didn't protect well in the global financial crisis (-40.3% vs -34.3% for SPY). The portfolio was long cyclical exporters, auto, industrial, chemicals, that got hit in the synchronized global downturn. The German economy's export dependence means global crisis hits XETRA momentum directly.
Backtest Methodology
- Data: FMP financial data via Ceta Research warehouse. Price data from
stock_eod(adjusted closes). - Point-in-time: Market cap filter uses annual
key_metricsfilings with 45-day lag. No look-ahead bias. - Signal: Price at T-12M to T-1M. The 1-month skip avoids short-term reversal contamination.
- Data quality: Stocks with adjusted close < $1 at either lookback date excluded. Momentum capped at 500% per stock.
- Equal weight: 30 positions, 3.33% each. No intraperiod rebalancing.
- Transaction costs: Modeled as size-tiered. XETRA is a liquid exchange with costs similar to NYSE.
- Benchmark: SPY ETF total return.
Why Germany?
Several structural factors likely contribute to the stronger momentum profile on XETRA:
Sector composition. Germany's index is dominated by industrials, chemicals, automotive, and financial names, sectors with genuine multi-year business cycles. Momentum in these sectors tends to be driven by real orders, exports, and capex cycles that persist for 6-12 months. This is different from the US, where tech momentum is more sentiment-driven and reversal-prone.
Less systematic momentum trading. US momentum is heavily traded by quantitative funds. XETRA has lower institutional quant penetration. The arbitrage of the momentum premium has proceeded more slowly in European mid-cap equities.
Mid-cap depth. XETRA has significant mid-cap depth below the DAX. These names have real earnings momentum but less analyst coverage and less institutional trading. The momentum premium in less-covered stocks is often larger and more persistent.
Limitations
Global crisis correlation. The 2008 result shows Germany momentum isn't a global crisis hedge. If the US economy contracts severely, German exporters follow. The down capture advantage over SPY narrows or disappears in globally synchronized downturns.
Currency exposure. Returns are in USD terms. EUR/USD movements affect the reported CAGR. Strong euro periods benefit USD-denominated investors; weak euro periods hurt. The strategy has embedded EUR exposure.
German economy concentration. XETRA momentum is concentrated in Germany's industrial export economy. A structural shift in global manufacturing (China decoupling, reshoring) could change the sector composition that has historically driven momentum.
Takeaway
Germany has the best Sharpe ratio of the 18 exchanges tested, 0.561 vs 0.382 for SPY. The combination of 4.84% annual excess return, 75.29% down capture, and -43.56% max drawdown is the cleanest risk-adjusted profile in this study.
The European momentum factor is often overlooked in favor of US and India results. The data suggest it deserves more attention. Germany's sector composition, mid-cap depth, and lower quant penetration create conditions where the 12-1M momentum signal translates into durable alpha.
Part of a Series
This is part of a multi-exchange 12-month momentum study:
- 12M Momentum: Global 18-Exchange Comparison, published April 14
- 12M Momentum: India 22.74% CAGR, published April 16
- 12M Momentum: UK Consistent Alpha, Low Down Capture, published April 20
- 12M Momentum: US Underperforms SPY by 3.69%/yr, published April 23
References
- Jegadeesh, N. & Titman, S. (1993). Returns to Buying Winners and Selling Losers. Journal of Finance, 48(1), 65-91.
- Asness, C., Moskowitz, T. & Pedersen, L. (2013). Value and Momentum Everywhere. Journal of Finance.
- Daniel, K. & Moskowitz, T. (2016). Momentum Crashes. Journal of Financial Economics.
Run This Screen Yourself
The current 12-month momentum screen for German stocks is live on Ceta Research:
cetaresearch.com/data-explorer?q=GVijukmSA5
-- 12-Month Momentum Germany Screen
-- Live at: cetaresearch.com/data-explorer?q=GVijukmSA5
WITH universe AS (
SELECT p.symbol, p.companyName, p.exchange, k.marketCap / 1e9 AS market_cap_billions
FROM profile p JOIN key_metrics_ttm k ON p.symbol = k.symbol
WHERE k.marketCap > 500000000 AND p.isActivelyTrading = true
AND p.exchange IN ('XETRA')
),
price_12m_ago AS (
SELECT symbol, adjClose AS price_12m,
ROW_NUMBER() OVER (PARTITION BY symbol ORDER BY ABS(CAST(dateEpoch AS BIGINT) -
CAST(EXTRACT(EPOCH FROM (CURRENT_DATE - INTERVAL '365' DAY))::BIGINT AS BIGINT))) AS rn
FROM stock_eod
WHERE CAST(date AS DATE) BETWEEN CURRENT_DATE - INTERVAL '395' DAY
AND CURRENT_DATE - INTERVAL '335' DAY
AND adjClose > 0
),
price_1m_ago AS (
SELECT symbol, adjClose AS price_1m,
ROW_NUMBER() OVER (PARTITION BY symbol ORDER BY ABS(CAST(dateEpoch AS BIGINT) -
CAST(EXTRACT(EPOCH FROM (CURRENT_DATE - INTERVAL '30' DAY))::BIGINT AS BIGINT))) AS rn
FROM stock_eod
WHERE CAST(date AS DATE) BETWEEN CURRENT_DATE - INTERVAL '45' DAY
AND CURRENT_DATE - INTERVAL '15' DAY
AND adjClose > 0
)
SELECT u.symbol, u.companyName, u.exchange,
ROUND(u.market_cap_billions, 2) AS market_cap_billions,
ROUND((p1m.price_1m - p12.price_12m) / p12.price_12m * 100, 1) AS return_12m_1m_pct
FROM universe u
JOIN price_12m_ago p12 ON u.symbol = p12.symbol AND p12.rn = 1
JOIN price_1m_ago p1m ON u.symbol = p1m.symbol AND p1m.rn = 1
WHERE p12.price_12m > 1.0 AND p1m.price_1m > 1.0
AND (p1m.price_1m - p12.price_12m) / p12.price_12m <= 5.0
ORDER BY return_12m_1m_pct DESC NULLS LAST
LIMIT 30;