One-at-a-time sweeps across momentum lookback, market cap filter, regime window, portfolio size, liquidity, fundamental filter and costs, plus calendar-year returns and rolling 3-year performance, behind the Germany XETRA momentum strategy. 2000–2026, 319 months. This run is the live configuration: German-domiciled companies only, top 10 equal weight, DAX vs MA200, 40bps round-trip, no liquidity filter. All numbers from an independent harness that reproduces the adversarial audit's Section C.2 to the decimal. Data caveat from the delisting forensics: recorded deaths in the XETRA dataset are thin before 2015, so pre-2015 results carry survivorship risk.
12M lookback · skip 0 · mcap top 70% (P30) · N=10 equal weight · DAX vs MA200 · 40bps · no fundamental filter · no liquidity filter — CAGR +19.14%, Sharpe 0.716, Sortino 1.34, MaxDD -39.1%.
Every sweep below moves one dimension and holds the rest at that baseline.
| Lookback | Skip | Sharpe | Sortino | CAGR | MaxDD |
|---|---|---|---|---|---|
| 3M | skip 0 | 0.491 | 1.17 | +18.11% | -48.0% |
| 3M | skip 1 | 0.589 | 1.27 | +18.62% | -52.3% |
| 6M | skip 0 | 0.604 | 1.40 | +19.47% | -31.5% |
| 6M | skip 1 | 0.514 | 1.07 | +16.09% | -38.2% |
| 9M | skip 0 | 0.604 | 1.28 | +18.91% | -39.4% |
| 9M | skip 1 | 0.601 | 1.12 | +16.31% | -37.0% |
| 12M | skip 0 | 0.716 | 1.34 | +19.14% | -39.1% |
| 12M | skip 1 | 0.722 | 1.34 | +18.76% | -32.3% |
12M with no skip is the peak and the neighbourhood holds up; short lookbacks degrade materially.
| Universe | Sharpe | Sortino | CAGR | MaxDD |
|---|---|---|---|---|
| no filter | 0.559 | 1.09 | +17.05% | -46.6% |
| top 90% (P10) | 0.493 | 0.95 | +15.18% | -44.1% |
| top 70% (P30) | 0.716 | 1.34 | +19.14% | -39.1% |
| top 50% (P50) | 0.716 | 1.32 | +18.12% | -31.1% |
| top 30% (P70) | 0.599 | 1.04 | +14.66% | -26.2% |
| Window | Sharpe | Sortino | CAGR | MaxDD |
|---|---|---|---|---|
| MA50 | 0.433 | 0.74 | +12.53% | -53.7% |
| MA75 | 0.511 | 0.90 | +14.45% | -48.2% |
| MA100 | 0.638 | 1.15 | +17.40% | -51.5% |
| MA125 | 0.684 | 1.28 | +18.38% | -40.2% |
| MA150 | 0.701 | 1.36 | +18.67% | -42.8% |
| MA200 | 0.716 | 1.34 | +19.14% | -39.1% |
| MA250 | 0.617 | 1.09 | +17.26% | -41.7% |
| MA300 | 0.533 | 0.91 | +15.47% | -52.6% |
| MA200 ±2% hysteresis | 0.720 | 1.34 | +19.27% | -32.5% |
Sharpe rises monotonically from MA50 to MA200 and falls away on both sides — a plateau, not an isolated peak. A ±2% hysteresis band around MA200 trades a little CAGR for a materially shallower drawdown.
| N | Sharpe | Sortino | CAGR | MaxDD |
|---|---|---|---|---|
| 5 | 0.274 | 0.45 | +10.82% | -59.8% |
| 7 | 0.566 | 1.03 | +17.71% | -46.4% |
| 10 | 0.716 | 1.34 | +19.14% | -39.1% |
| 15 | 0.794 | 1.46 | +18.03% | -33.1% |
| 20 | 0.899 | 1.73 | +19.00% | -27.8% |
| 25 | 0.919 | 1.76 | +18.22% | -24.4% |
| 30 | 1.019 | 1.98 | +18.66% | -25.0% |
N=20 is the better configuration on this evidence — Sharpe 0.899 against 0.716 and MaxDD −27.8% against −39.1%, for essentially the same CAGR — and the adversarial audit reached the same verdict. We run N=10 anyway, for practicality: twenty positions is a lot of book to turn over every month, and the ten that N=20 adds are largely the ones that cannot be filled. On 2026-09-20, four of ranks 11–20 traded under €42k a day, Nuernberger at €1,201 against €1.43B of market cap. The cost of that choice is stated plainly above: eleven points of drawdown.
| ADV floor | Sharpe | Sortino | CAGR | MaxDD |
|---|---|---|---|---|
| none | 0.716 | 1.34 | +19.14% | -39.1% |
| €25,000/day | 0.682 | 1.25 | +18.12% | -31.5% |
| €50,000/day | 0.749 | 1.40 | +19.44% | -35.3% |
| €100,000/day | 0.663 | 1.24 | +17.60% | -29.9% |
| €250,000/day | 0.567 | 0.97 | +14.46% | -35.6% |
| €500,000/day | 0.596 | 1.03 | +14.79% | -32.4% |
| €1,000,000/day | 0.509 | 0.83 | +12.76% | -30.8% |
The live signal computes a 60-day average euro volume for every name and prints it beside the rank, but does not filter on it: whether a name is buyable depends on position size and on how the order is worked, which is decided at execution. The sweep is kept as a diagnostic. Note it is not monotone at N=10 — with ten names drawn from roughly 270, moving the floor swaps one or two holdings and the result moves with them.
| Filter | Sharpe | Sortino | CAGR | MaxDD |
|---|---|---|---|---|
| None (live config) | 0.716 | 1.34 | +19.14% | -39.1% |
| NetIncome(TTM)>0 | 0.859 | 1.59 | +18.04% | -29.9% |
| EBIT(TTM)>0 | 0.895 | 1.71 | +18.33% | -28.1% |
| GrossProfit(TTM)>0 | 0.776 | 1.41 | +16.70% | -28.1% |
| ROE(TTM)>0 | 0.838 | 1.55 | +17.52% | -28.7% |
Every profitability screen lifts Sharpe and cuts the drawdown at a small cost in CAGR. None is applied live; the live config is the unfiltered row.
| Round-trip cost | Sharpe | Sortino | CAGR | MaxDD |
|---|---|---|---|---|
| 0bps RT | 0.794 | 1.51 | +20.89% | -36.5% |
| 40bps RT | 0.716 | 1.34 | +19.14% | -39.1% |
| 100bps RT | 0.602 | 1.10 | +16.56% | -42.9% |
| 200bps RT | 0.416 | 0.73 | +12.38% | -48.7% |
Each 10bps of round-trip cost is worth roughly 0.6pp of CAGR at this turnover. The 40bps assumption is a measurement, not a guess: real IBKR spreads across the German universe had a median of 35bps.
| Year | Strategy | DAX | Excess |
|---|---|---|---|
| 2000 | +21.1% | -7.5% | +28.6pp |
| 2001 | -2.0% | -19.8% | +17.8pp |
| 2002 | -0.1% | -43.9% | +43.8pp |
| 2003 | +58.3% | +37.1% | +21.2pp |
| 2004 | +33.3% | +7.3% | +26.0pp |
| 2005 | +45.7% | +27.1% | +18.6pp |
| 2006 | +42.3% | +22.0% | +20.3pp |
| 2007 | -1.3% | +22.3% | -23.6pp |
| 2008 | -18.2% | -40.4% | +22.2pp |
| 2009 | +34.3% | +23.8% | +10.5pp |
| 2010 | +37.0% | +16.1% | +20.9pp |
| 2011 | -16.8% | -14.7% | -2.1pp |
| 2012 | +36.8% | +29.1% | +7.7pp |
| 2013 | +68.0% | +25.5% | +42.5pp |
| 2014 | +2.3% | +2.7% | -0.4pp |
| 2015 | +46.9% | +9.6% | +37.3pp |
| 2016 | +2.1% | +6.9% | -4.8pp |
| 2017 | +69.7% | +12.5% | +57.2pp |
| 2018 | +8.2% | -18.3% | +26.5pp |
| 2019 | +47.1% | +25.5% | +21.6pp |
| 2020 | +18.7% | +3.5% | +15.2pp |
| 2021 | +12.6% | +15.8% | -3.2pp |
| 2022 | -7.9% | -12.3% | +4.4pp |
| 2023 | -16.2% | +20.3% | -36.5pp |
| 2024 | +37.8% | +18.8% | +19.0pp |
| 2025 | +48.4% | +23.0% | +25.4pp |
| 2026 | -18.4% | +4.7% | -23.1pp |
20 of 27 years beat the DAX.
Mean +21.2%, range -10.5% to +62.1%, negative in 8.1% of all 3-year windows.