Bivar Capital — Quantitative Research

Germany MomentumXETRA strategy report

Buy the ten German-domiciled companies on XETRA with the strongest twelve-month return, equal weighted, rebalance monthly, hold cash when the DAX is below its 200-day average. 2000–2026, 319 months, 40bps round-trip costs. Live since August 2026. This report is the complete specification, the record, every parameter choice with the sweep behind it, and the data audit.

Performance Summary

+19.1%
CAGR
0.72
Sharpe
1.34
Sortino
-39.1%
Max Drawdown
22.5%
Volatility
+15.4pp
Alpha vs DAX
0.35
Beta
43%
Positive Months
319
Months
2000–2026
Period

The DAX returned +5.0% over the same window. The strategy beat it in 20 of 27 years. One euro became €105 against €3.68 in the index.

I. Strategy Specification

UniverseXETRA, German domicile only — read from the ISIN country prefix, not the exchange country field, which tags every US cross-listing as German
Size filterTop 70% by market cap (P30), measured against that month’s own universe
Signal12-month total return, no skip month
PortfolioTop 10, equal weight, 10% each
RebalanceMonthly
RegimeDAX vs its 200-day moving average; below → 100% cash for the month
Fundamental filterNone
Liquidity filterNone — 60-day average euro turnover is computed and reported per name, not filtered on
Costs40bps round-trip on realised turnover
Signal / executionRank on the last trading day of the month, buy at the close of the next

Signal and execution timing

The ranking is computed from closing prices on the final trading day of the month. Nothing is bought that day — by the time the close is known it has happened. Positions are taken at the close of the following trading day and the return is booked from that price. The regime is read on the signal day and governs the whole following month; it is not re-checked intra-month.

II. DAX vs MA200 — Regime Filter

Shaded where the index sits below its average and the strategy stands aside. That is 32% of months since 2000.

III. Equity Curve

Log scale. The strategy compounds to roughly 105x against the DAX’s 3.7x, with the whole gap opening in three stretches: 2003–2007, 2009–2015 and 2019–2021.

IV. Drawdown

Six falls past 10% in 26 years. The deepest is the one running now.

StartedTroughDepthTo troughTo recover
2021-072023-12-39.1%29m14m
2007-112009-06-32.5%19m8m
2026-062026-07-28.1%1mopen
2000-032003-05-22.9%38m2m
2011-012012-01-22.4%12m10m
2005-112005-11-21.4%0m3m

V. Monthly Regime

Green where invested, red where in cash. The filter has taken the book to cash in roughly a third of all months.

VI. Monthly Returns

Worst month -17.0%, best +28.6%, positive in 43% of months. The distribution has a long right tail and a short, fat left one — the shape of a trend strategy.

VII. Annual Returns

YearStrategyDAXExcess
2000+21.1%-7.5%+28.6pp
2001-2.0%-19.8%+17.8pp
2002-0.1%-43.9%+43.9pp
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%+21.0pp
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.4pp
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.5pp
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

VIII. Rolling 3-Year CAGR

Mean +21.2%, range -10.5% to +62.1%, negative in 8% of windows.

IX. Crisis Analysis

PeriodMonthsStrategyDAXExcessDefensive
Dot-com crash2000-03 to 2003-0337-22.7%-68.3%+45.6pp30 cash
Global financial crisis2007-10 to 2009-0318-25.0%-48.0%+23.0pp15 cash
Euro sovereign crisis2011-05 to 2012-0614-4.7%-14.6%+10.0pp5 cash
2018 selloff2018-01 to 2018-1212+8.2%-18.3%+26.4pp10 cash
COVID crash2020-01 to 2020-033-5.0%-25.0%+20.1pp2 cash
2022 bear market2022-01 to 2022-099-9.0%-23.7%+14.7pp9 cash
Current drawdown2026-05 to 2026-073-23.9%+5.5%-29.4pp0 cash

The regime filter did its job in every historical drawdown — between +10 and +46 points of excess, with the book in cash for most of each one. The current episode is the exception and it is worth dwelling on: the strategy is down 23.9% while the DAX is up 5.5%. This is not the market falling. It is the momentum names unwinding while the index holds, which is precisely the case the regime filter cannot see and was never built to catch.

X. Why Each Parameter

12-month lookback, no skip month

The sweep below puts 12/0 at the top, and the neighbourhood holds rather than falling away. Short lookbacks degrade materially: 3 months returns half the Sharpe.

Market cap top 70%

Cutting the smallest 30% costs little and removes the names where the price series itself is least reliable. Tightening further to the top 50% or 30% reduces returns without improving risk — the edge in this market lives in mid-caps, not large ones.

DAX vs MA200

Sharpe climbs monotonically from MA50 (0.433) through MA125, MA150 and MA200 (0.716), then falls at MA250 and MA300. That shape — a rise, a peak, a fall — is a plateau rather than a fitted point. A ±2% hysteresis band gives the same return with a shallower drawdown and is a reasonable alternative.

Ten stocks

Twenty is better on the numbers and is not what runs. See Section XII.

Cash in defensive months

Cash earns nothing in this backtest. At a 3% deposit rate the historical CAGR would be roughly 1.2pp higher; the published figure is the conservative one.

XI. Momentum Lookback Variants

LookbackSkipSharpeSortinoCAGRMaxDD
3Mskip 00.4911.17+18.1%-48.0%
3Mskip 10.5891.27+18.6%-52.3%
6Mskip 00.6041.40+19.5%-31.5%
6Mskip 10.5141.07+16.1%-38.2%
9Mskip 00.6041.28+18.9%-39.4%
9Mskip 10.6011.12+16.3%-37.0%
12Mskip 00.7161.34+19.1%-39.1%
12Mskip 10.7221.34+18.8%-32.3%

XII. Number of Stocks

NSharpeSortinoCAGRMaxDD
50.2740.45+10.8%-59.8%
70.5661.03+17.7%-46.4%
100.7161.34+19.1%-39.1%
150.7941.46+18.0%-33.1%
200.8991.73+19.0%-27.8%
250.9191.76+18.2%-24.4%
301.0191.98+18.7%-25.0%

N=20 is the better configuration and is not the one that runs. Sharpe 0.899 against 0.716, MaxDD −27.8% against −39.1%, for the same CAGR. Ten is run 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. Eleven points of drawdown is the price of that choice and it is paid knowingly.

XIII. Filter Ablation

FilterSharpeSortinoCAGRMaxDD
None (live config)0.7161.34+19.1%-39.1%
NetIncome(TTM)>00.8591.59+18.0%-29.9%
EBIT(TTM)>00.8951.71+18.3%-28.1%
GrossProfit(TTM)>00.7761.41+16.7%-28.1%
ROE(TTM)>00.8381.55+17.5%-28.7%

Every profitability screen raises Sharpe and cuts the drawdown at a cost in CAGR. None is applied live.

CostSharpeCAGRMaxDD
0bps RT0.794+20.9%-36.5%
40bps RT0.716+19.1%-39.1%
100bps RT0.602+16.6%-42.9%
200bps RT0.416+12.4%-48.7%

XIV. Data Audit — Survivorship

The XETRA dataset records no delisting at all before 2015. Not few — none. Three appear in 2015, one in 2016, and then between 56 and 116 every year from 2017. Of 1,362 series, 750 end before the panel does, and every one of those endings falls in 2017 or later. The entire Neuer Markt collapse is absent.

That means the first fifteen years of this backtest contain only companies that survived to be in today’s database. What it costs:

WindowCAGRSharpeMaxDD
2000–2016 (zero delistings recorded)+20.1%0.75-32.5%
2017–2026 (coverage verified complete)+17.4%0.65-39.1%
Full series, as published+19.1%0.72-39.1%

Read the middle row as the honest estimate. The published 19.1% blends a clean decade with fifteen survivor-only years, and the 2.7 points between them are the measure of what the missing dead companies were worth.

Other findings

  1. Broken price series: two, both harmless here. COR rose 305,987% in a single day (€0.0119 to €36.42 on 2005-06-06) and 4BSB 786%. Both are non-German and excluded by the domicile filter before they can be selected; removing them changes the result by 0.00pp. The production de-spike catches neither — it looks for a spike that reverses, and these did not.
  2. No implausible return ever entered the book. Across 3,180 position-months the largest realised monthly return is +97% and the smallest −71%. The engine’s +300% cap and −90% floor were never triggered, so no clip is hiding anything.
  3. Duplicate listings: 48 position-months (1.5%) across 23 months. N4G and N4G0 were held together for twelve consecutive months in 2020–21, putting 20% of the book in one company. De-duplicating costs 0.08pp of CAGR and returns 1.7 points of drawdown (−39.1% to −37.4%).
  4. Stale prices: 52 of 622 German names carry a 20-day stretch at an unchanged price in the last decade. Not excluded — these are illiquid names, not bad data, and the signal now prints each one’s turnover.

XV. Real Spread & Liquidity

TickerNameMcap12MADV €/day€12.5k as % of ADV
SNGSINGULUS TECHNOLOGIES AG€0.08B+457.3%€342,5613.6%
VBKVerbio SE€1.95B+185.8%€2,681,4930.5%
OHBOHB SE€3.63B+177.9%€6,172,4980.2%
AIXAAIXTRON SE€4.25B+167.9%€23,426,5740.1%
S92SMA Solar Technology AG€1.97B+165.4%€6,458,4940.2%
SMHNSUSS MicroTec SE€1.30B+142.2%€6,662,5240.2%
JENJenoptik AG€2.26B+139.9%€5,737,6930.2%
DR0Deutsche Rohstoff AG€0.44B+127.6%€1,294,8281.0%
SZGSalzgitter AG€3.10B+122.9%€8,788,6930.1%
M7UNynomic AG€0.15B+120.1%€526,1122.4%

Median turnover €5,955,096 a day, thinnest €342,561. At €12,500 a position the median holding is 0.2% of a day’s volume and the worst 3.6%; at €50,000 the worst becomes 14.6%, which is a day or two of working an order rather than one fill. Costs are modelled at 40bps against a measured median spread of 35bps across the eligible universe. Comfortable below €2M of capital.

XVI. Risks & Caveats

  1. Survivorship, 2000–2016. Section XIV. The single largest caveat.
  2. The last five years are the weakest. 2021–2026 returned +6.9% at a Sharpe of 0.16, with the whole −39.1% drawdown inside it. Weight that period more heavily than its length suggests.
  3. The regime filter cannot catch what is happening now. Every historical crisis was a falling index; this one is a falling momentum cohort inside a rising index. A 200-day average is blind to it by construction.
  4. Concentration. Ten names at 10% each; a single blow-up costs a tenth of the book.
  5. In-sample selection. The configuration was chosen over the same history it is measured on. The plateaus in the sensitivity analysis are the mitigation, not a cure.
  6. Month-end drawdowns understate the experience — the intra-month low is worse.
  7. Two months of live history. Everything before August 2026 is simulation.

XVII. Position History (last 12 rebalances)

Signal dateHoldings
2025-07-31VH2, ENR, CY1K, RHM, AG1, TKA, ACT, D77, HAG, R3NK
2025-08-31D77, ENR, VH2, RHM, AG1, ACT, TKA, HAG, CBK, CEK
2025-09-30RHM, R3NK, HAG, TKA, VH2, ACT, D77, ENR, AG1, CEK
2025-10-31TKA, RHM, R3NK, BSL, AG1, ACT, VH2, HAG, BIKE, ENR
2025-11-30IBU, TKA, VH2, BIKE, BSL, HOT, S92, R3NK, OHB, FTK
2025-12-31TKA, VH2, IBU, R3NK, BIKE, ACT, HOT, D77, NDX1, S92
2026-01-31OHB, VMED, TKA, IBU, NDX1, BIKE, S92, VBK, 4DS, HOT
2026-02-28VMED, OHB, NDX1, VBK, ENR, BIKE, 4DS, IBU, HOT, SZG
2026-03-31VBK, OHB, AIXA, NDX1, S92, DR0, 4DS, NBG6, ENR, HOT
2026-04-30AIXA, OHB, S92, VBK, ELG, DR0, NDX1, HOT, NBG6, ENR
2026-05-31OHB, AIXA, VBK, S92, BSL, PFSE, HOT, DR0, SZG, WAF
2026-06-30SNG, OHB, AIXA, HOT, S92, NDX1, LPK, NBG6, VBK, JEN

318 rebalances since 2000, 342 distinct names. Roughly three of ten positions change each month.