Low Debt Quality on German Stocks (XETRA): 6.72% CAGR Over 25 Years
We ran the same low-leverage, high-quality screen on XETRA-listed German equities across 25 years. The result: 6.72% CAGR vs 7.83% for SPY. A deficit of -1.11% annually. The strategy never sat in cash. It averaged 48 qualifying stocks per rebalance. And it tracked the market's downside closely: 89.44% down capture, max drawdown of -38.84%.
Contents
- Method
- The Signal
- The Screen (SQL)
- What We Found
- 25 years. Behind SPY on total return. Similar drawdown profile.
- Annual returns (EUR vs SPY USD, July-to-July)
- 2001: The Neue Markt collapse
- 2008: The strategy held up
- 2014 and 2016: The standout years
- The post-2017 stretch
- Backtest Methodology
- Limitations
- Takeaway
- Part of a Series
- Run This Screen Yourself
Germany is the clearest illustration of what this screen does in a large, industrial economy. You get diversification, consistent participation, and a returns profile that's just slightly behind the index. The headline number is honest: -1.11% excess return over 25 years, driven mostly by a severe 2001 collapse that took years to repair.
Method
- Data source: Ceta Research (FMP financial data warehouse)
- Universe: XETRA (Germany), market cap > €500M
- Period: 2000-2025 (25 years, 25 annual periods)
- Rebalancing: Annual (July), equal weight all qualifying
- Benchmark: S&P 500 Total Return (SPY)
- Cash rule: Hold cash if fewer than 10 stocks qualify
- Data lag: 45-day point-in-time lag on financial statements (prevents look-ahead bias)
Annual returns are measured July-to-July. The year label marks the start of each 12-month holding period. Returns are in EUR. SPY is in USD.
The Signal
Two filters. Both must pass.
Filter 1: Low Leverage
D/E < 0.5, measured from annual financial statements (FY data). This is a hard cutoff. Companies with debt-to-equity at or above 0.5 are excluded regardless of how strong their other numbers look.
Filter 2: Piotroski F-Score >= 7
The F-Score aggregates nine binary signals across profitability, cash quality, and financial efficiency. Each signal scores 1 or 0. Stocks must score 7 or higher to qualify.
| # | Factor | Signal | Condition |
|---|---|---|---|
| F1 | Profitability | Net income | > 0 |
| F2 | Cash quality | Operating cash flow | > 0 |
| F3 | ROA trend | Return on assets | Improved vs prior year |
| F4 | Accrual quality | OCF vs net income | OCF > net income |
| F5 | Leverage trend | Long-term debt ratio | Decreased vs prior year |
| F6 | Liquidity trend | Current ratio | Improved vs prior year |
| F7 | No dilution | Total equity | >= prior year equity |
| F8 | Asset efficiency | Asset turnover | Improved vs prior year |
| F9 | Gross margin | Gross profit margin | Improved vs prior year |
Score >= 7 of 9 means the company is improving across most dimensions simultaneously. Combined with D/E < 0.5, this selects companies that are both conservatively financed and operationally improving. Germany's industrial base, mid-to-large manufacturers, chemical companies, engineering firms, naturally produces a broad pool of qualifying stocks. 48 on average each year.
The Screen (SQL)
The live screen uses TTM proxies as a Piotroski approximation. Full Piotroski requires year-over-year FY comparisons. The TTM screen substitutes ROE, operating margin, and interest coverage as quality proxies. Use this to find candidates, not to replicate the exact backtest signal.
SELECT p.exchange, r.symbol, p.companyName, p.sector,
ROUND(r.debtToEquityRatioTTM, 3) AS de_ratio,
ROUND(k.returnOnEquityTTM * 100, 1) AS roe_pct,
ROUND(r.operatingProfitMarginTTM * 100, 1) AS opm_pct,
ROUND(r.interestCoverageRatioTTM, 1) AS interest_coverage,
ROUND(k.freeCashFlowYieldTTM * 100, 2) AS fcf_yield_pct,
ROUND(k.marketCap / 1e9, 2) AS mktcap_b
FROM financial_ratios_ttm r
JOIN key_metrics_ttm k ON r.symbol = k.symbol
JOIN profile p ON r.symbol = p.symbol
WHERE r.debtToEquityRatioTTM >= 0
AND r.debtToEquityRatioTTM < 0.50
AND k.returnOnEquityTTM > 0.08
AND r.operatingProfitMarginTTM > 0.08
AND r.interestCoverageRatioTTM > 5.0
AND p.isActivelyTrading = true
AND k.marketCap > 500000000
AND p.exchange IN ('XETRA')
ORDER BY de_ratio ASC
LIMIT 30
Run this query on Ceta Research
What We Found

25 years. Behind SPY on total return. Similar drawdown profile.
| Metric | Low Debt Quality (XETRA) | S&P 500 (SPY) |
|---|---|---|
| CAGR | 6.72% | 7.83% |
| Total Return | 408.36% | 558.69% |
| Volatility | 17.87% | 15.00% |
| Max Drawdown | -38.84% | -36.27% |
| Sharpe Ratio | 0.264 | 0.38 |
| Down Capture | 89.44% | 100% |
| Up Capture | 90.56% | 100% |
| Win Rate (annual vs SPY) | 36% | - |
| Avg Stocks per Period | 48 | - |
| Cash Periods | 0 of 25 | - |
Win rate of 36% means the strategy beat SPY in fewer than 4 of every 10 years. It was fully invested every year, no cash periods, which kept participation consistent but also meant full exposure during down years.
Annual returns (EUR vs SPY USD, July-to-July)

| Year | Portfolio (EUR) | SPY (USD) | Excess |
|---|---|---|---|
| 2000 | +10.2% | -14.8% | +25.0% |
| 2001 | -33.6% | -20.8% | -12.9% |
| 2002 | -7.8% | +3.3% | -11.2% |
| 2003 | +39.6% | +16.4% | +23.2% |
| 2004 | +5.6% | +7.9% | -2.4% |
| 2005 | +9.1% | +8.9% | +0.2% |
| 2006 | +22.7% | +20.9% | +1.8% |
| 2007 | -18.7% | -13.7% | -5.0% |
| 2008 | -18.2% | -26.1% | +7.9% |
| 2009 | +32.3% | +13.4% | +18.9% |
| 2010 | +27.9% | +32.9% | -5.1% |
| 2011 | -5.5% | +4.1% | -9.6% |
| 2012 | +17.5% | +20.9% | -3.4% |
| 2013 | +22.6% | +24.5% | -1.9% |
| 2014 | +17.8% | +7.4% | +10.4% |
| 2015 | +4.3% | +3.4% | +1.0% |
| 2016 | +24.5% | +17.7% | +6.8% |
| 2017 | +4.9% | +14.3% | -9.4% |
| 2018 | +1.3% | +10.9% | -9.6% |
| 2019 | +4.2% | +7.1% | -3.0% |
| 2020 | +29.3% | +40.7% | -11.4% |
| 2021 | -16.1% | -10.2% | -6.0% |
| 2022 | +15.8% | +18.3% | -2.5% |
| 2023 | +4.6% | +24.6% | -20.0% |
| 2024 | +12.3% | +14.7% | -2.4% |
2001: The Neue Markt collapse
The -33.6% return in 2001 is the defining event for this strategy on XETRA. Germany's tech and telecom bubble, centered on the Neue Markt exchange, was one of the most extreme dot-com crashes globally. Companies that had issued equity at sky-high valuations, telecom infrastructure providers, early-internet businesses, media conglomerates, collapsed.
The D/E < 0.5 filter helped some. But German industrials that had loaded up on growth-era debt or expanded through acquisitions also struggled. The 25-point swing from +10.2% in 2000 to -33.6% in 2001 reflects how exposed the portfolio was to the collapse of confidence in Germany's corporate sector broadly, not just tech.
The recovery was solid: +39.6% in 2003, +22.7% in 2006, +32.3% in 2009. But the 2001 hole required years to climb out of, which anchors the 25-year CAGR at 6.72%.
2008: The strategy held up
-18.2% vs SPY's -26.1%. The D/E filter excluded most German financial companies, which were heavily exposed to mortgage-backed securities and counterparty risk. The Piotroski filter had already required that these companies show improving cash flow and asset efficiency in the prior year. Banks in early 2008 weren't passing those filters.
The nearly 8-point outperformance in 2008 is one of the strongest arguments for the strategy's design. It didn't need to predict the crisis, the balance sheet screen did the work.
2014 and 2016: The standout years
2014 returned +17.8% vs SPY's +7.4%, a +10.4% gap. XETRA's quality industrials benefited from a weaker euro and recovering European demand. The Piotroski filter loaded the portfolio toward companies showing margin improvement and cash generation, exactly the companies that outperformed as Germany's export machine resumed.
2016 added another +6.8% excess: +24.5% vs SPY's +17.7%. These years demonstrate the strategy isn't broken, it just requires the right economic backdrop for European industrials to lead.
The post-2017 stretch
From 2017 onward, the strategy trailed SPY in 6 of 8 years. The widest gap: 2023, where the portfolio returned +4.6% while SPY returned +24.6%, a -20.0% excess. US tech mega-caps dominated global equity returns in this period, and a XETRA-only portfolio with equal weighting simply didn't participate.
2023 in particular reflected a concentrated US tech rally (NVIDIA, Microsoft, Meta). German industrials had a solid year in EUR terms, but not enough to match the magnitude of the US rebound.
Backtest Methodology
| Parameter | Choice |
|---|---|
| Universe | XETRA (Germany), Market Cap > €500M |
| Signal | D/E < 0.5, Piotroski F-Score >= 7 (computed from FY statements) |
| Portfolio | All qualifying, equal weight |
| Rebalancing | Annual (July) |
| Cash rule | Hold cash if < 10 qualify |
| Benchmark | S&P 500 Total Return (SPY) |
| Period | 2000-2025 (25 years, 25 annual periods) |
| Data lag | Point-in-time, 45-day lag for financial statements |
Limitations
Currency mismatch. Returns are in EUR. SPY is in USD. EUR/USD movements affect the excess return calculation in any given year. Over the full 25-year window, EUR/USD was roughly flat from parity in 2000 to around 1.05-1.10 today, but the path included large swings (up to 1.50 in 2008, down to near parity in 2022). A year like 2016 where the EUR weakened boosted USD-hedged German stocks, while a year where the EUR strengthened had the opposite effect.
Win rate of 36%. The strategy underperformed SPY in 16 of 25 years. It beat SPY only in 9. That's a low win rate for an annual holding period. Investors need to hold through multiple years of underperformance to capture the periods where Germany outperforms.
No tech exposure. XETRA's qualifying universe skews heavily toward industrials, chemicals, and consumer staples. The strategy doesn't capture German software or biotech names that performed well in certain periods. This is a feature for investors who want traditional industrial exposure, a limitation for those who want balanced sector representation.
Survivorship bias. Exchange membership uses current company profiles. Historical delistings and mergers on XETRA aren't fully captured, likely causing some upward bias in reported returns.
TTM screen vs backtest signal. The live SQL uses TTM ratios as a Piotroski approximation. The actual backtest computed Piotroski from FY year-over-year changes. Use the screen for candidate identification, not for exact replication.
Takeaway
XETRA Low Debt Quality delivered 6.72% CAGR vs SPY's 7.83%, a deficit of -1.11% over 25 years. The max drawdown (-38.84%) was slightly worse than SPY (-36.27%), and the down capture (89.44%) means the strategy closely tracks market losses without meaningfully reducing them in the German context.
The 2001 collapse is the central explanation for the underperformance. Strip it out and the remaining 24-year track record looks much more competitive. But backtests don't let you strip out hard years. The 2001 loss was real, the sequence mattered, and the 25-year CAGR reflects it.
What the strategy does provide: consistent participation (0 cash periods), a diversified 48-stock portfolio drawn from Germany's industrial core, and selective years of meaningful outperformance (2003, 2008, 2014, 2016). For a EUR-based investor who wants exposure to quality German companies with conservative balance sheets, this is a reasonable framework. For someone benchmarking against the S&P 500 in USD, the honest answer is: Germany didn't beat it.
Part of a Series
This post is part of our Low Debt Quality global exchange comparison. We ran the same strategy across 15 exchanges worldwide: - Low Debt Quality on US Stocks (NYSE + NASDAQ + AMEX) - 7.09% CAGR, -0.75% excess, 82.83% down capture - Low Debt Quality on Indian Stocks (BSE + NSE) - 14.05% CAGR, +6.22% excess - Low Debt Quality on Canadian Stocks (TSX) - +1.33% excess - Low Debt Quality on Swedish Stocks - +1.14% excess - Low Debt Quality on Swiss Stocks - best Sharpe in the study (0.429) - Low Debt Quality on UK Stocks (LSE) - -1.69% excess, 96.58% down capture - Low Debt Quality on Japan Stocks (JPX) - 112-stock universe, 75.1% down capture - Low Debt Quality: Global Exchange Comparison - all 15 exchanges
Run This Screen Yourself
The TTM screen SQL above is runnable directly on Ceta Research. Query the FMP financial data warehouse and filter by exchange = 'XETRA'. No setup required.
The full backtest code (Python + DuckDB) is on GitHub.
Run It Yourself
Explore the data behind this analysis on Ceta Research. Query our financial data warehouse with SQL, build custom screens, and run your own backtests across 70,000+ stocks on 20 exchanges.
Data: Ceta Research, FMP financial data warehouse. Returns in EUR. Annual rebalance July, equal weight, 2000-2025.