Bivar Capital — Quantitative Research

Germany MomentumParameter sensitivity analysis

One-at-a-time sweeps across momentum lookback, market cap filter, regime window, portfolio size, fundamental filter and costs, plus calendar-year returns and rolling 3-year performance, behind the Germany XETRA momentum strategy. This analysis covers the LIVE variant: German-domiciled companies only (the wide-universe research config is documented in the strategy report). 2000–2026, 319 months. Reminder from the adversarial audit: pre-2015 data is survivors-only; anchor expectations on the 2015+ window.

I. Baseline (live config)

LB 12M skip 0 · mcap top 70% (P30) · N=20 equal weight · DAX vs MA200 · 40bps · no fundamental filter — CAGR +19.0%, Sharpe 0.899, Sortino 1.73, MaxDD -27.8%.

Germany DE-only momentum equity curve and drawdown

II. Momentum Lookback × Skip

ConfigSharpeSortinoCAGRMaxDD
12M skip 00.8991.73+19.0%-27.8%
9M skip 10.8241.56+17.33%-33.5%
9M skip 00.811.69+18.88%-29.4%
12M skip 10.7781.38+16.02%-29.7%
6M skip 10.751.46+17.5%-31.2%
3M skip 10.7471.66+18.74%-34.7%
6M skip 00.7241.53+17.83%-30.4%
3M skip 00.5941.36+15.78%-37.1%

12M/skip-0 is the top of a smooth plateau (9M/skip-1 at 0.82, 9M/skip-0 at 0.81) — not an isolated peak. Short lookbacks degrade materially; adding a skip-month to 12M hurts (0.90→0.78).

III. Market Cap Filter

UniverseSharpeSortinoCAGRMaxDD
none (all)0.8091.55+17.87%-35.8%
top 90% (P10)0.81.56+17.59%-33.6%
top 70% (P30)0.8991.73+19.0%-27.8%
top 50% (P50)0.8651.6+17.33%-23.3%
top 30% (P70)0.6571.1+12.93%-25.9%

P30 (drop the smallest 30%) is the sweet spot. Tightening to large caps only (P70) costs 6pp of CAGR — the edge lives in mid/small caps; P50 trades 1.7pp of CAGR for a 4.5pp shallower MaxDD.

IV. Regime Filter Window

WindowSharpeCAGRMaxDD
MA500.56+12.88%-46.4%
MA750.677+14.87%-36.8%
MA1000.765+16.49%-40.1%
MA1250.817+17.38%-31.6%
MA1500.863+17.99%-32.2%
MA2000.899+19.0%-27.8%
MA2500.774+17.21%-30.0%
MA200 ±2% hysteresis band0.896+19.03%-23.5%

Sharpe rises nearly monotonically from MA50 to MA200 and falls at MA250 — a plateau edge, not a knife-edge. The ±2% hysteresis band (enter above MA200+2%, exit below −2%, at most one state change per month) keeps CAGR/Sharpe and cuts MaxDD to −23.5%; it changes the regime state in only 9 of 321 months and was validated cross-market (improves Canada and Taiwan too), but is not adopted in the live signal.

V. Portfolio Size (N)

NSharpeSortinoCAGRMaxDD
50.2740.45+10.82%-59.8%
70.5661.03+17.71%-46.4%
100.7161.34+19.14%-39.1%
150.7941.46+18.03%-33.1%
200.8991.73+19.0%-27.8%
250.9191.76+18.22%-24.4%
301.0191.98+18.66%-25.0%

Concentration only hurts on this universe: N=5 is unusable (0.27, −60% MaxDD) and Sharpe keeps improving past the live N=20 — N=30 reaches 1.02 with a −25% MaxDD. N=20 was chosen as the practicality ceiling (30 positions is operationally heavy at small capital); the direction of the tradeoff is worth knowing.

VI. Fundamental Filter

FilterSharpeSortinoCAGRMaxDD
None (live config)0.8991.73+19.0%-27.8%
NetIncome(TTM)>00.9551.82+16.18%-20.7%
EBIT(TTM)>00.9471.83+16.06%-19.4%
GrossProfit(TTM)>00.8381.52+15.27%-25.7%
ROE(TTM)>00.8861.66+14.4%-21.2%

On the German-only universe, NetIncome(TTM)>0 is the risk-adjusted winner: Sharpe 0.955 and MaxDD −20.7% vs the unfiltered 0.899/−27.8%, at a cost of 2.8pp CAGR. EBIT>0 is nearly identical. The live config stays unfiltered (CAGR priority), same decision as the wide-universe report; the profitable-only variant is the natural lower-drawdown alternative for anyone who prefers it.

VII. Transaction Costs

Round-trip costSharpeSortinoCAGRMaxDD
0bps RT0.9861.93+20.55%-25.1%
40bps RT0.8991.73+19.0%-27.8%
100bps RT0.7711.45+16.71%-31.6%
200bps RT0.5611.01+12.98%-37.5%

At ~27%/mo one-way turnover, each 10bps of round-trip cost ≈ 0.38pp of CAGR. Real IBKR spreads were measured live for the full eligible universe (median 35bps; held portfolio median 22bps) — the 40bps assumption is realistic at small size.

VIII. Calendar-Year Returns vs DAX

YearStrategyDAX (TR)Excess
2000+13.9%-7.5%+21.4pp
2001-1.5%-19.8%+18.3pp
2002+0.0%-43.9%+43.9pp
2003+62.6%+37.1%+25.5pp
2004+23.1%+7.3%+15.8pp
2005+56.9%+27.1%+29.8pp
2006+43.1%+22.0%+21.1pp
2007+12.5%+22.3%-9.8pp
2008-15.8%-40.4%+24.6pp
2009+24.4%+23.8%+0.6pp
2010+31.4%+16.1%+15.3pp
2011-14.2%-14.7%+0.5pp
2012+23.2%+29.1%-5.9pp
2013+58.4%+25.5%+32.9pp
2014+7.4%+2.7%+4.7pp
2015+48.8%+9.6%+39.2pp
2016+13.1%+6.9%+6.2pp
2017+64.5%+12.5%+52.0pp
2018-0.6%-18.3%+17.7pp
2019+34.2%+25.5%+8.7pp
2020+11.5%+3.5%+8.0pp
2021+18.2%+15.8%+2.4pp
2022-14.0%-12.3%-1.7pp
2023-3.5%+20.3%-23.8pp
2024+26.8%+18.8%+8.0pp
2025+43.9%+23.0%+20.9pp
2026-1.9%+4.7%-6.6pp

22 of 27 years beat the DAX. Crisis protection is the regime filter working (2002: 0.0% vs −43.9%; 2008: −15.8% vs −40.4%; 2018: −0.6% vs −18.3%). The worst relative year is 2023 (−3.5% vs +20.3%) — the classic post-bear momentum crash, present in every regime variant tested; expect it again at the next bear-to-bull turn.

IX. Rolling 3-Year Performance

Germany DE-only momentum rolling 3-year CAGR

Mean rolling 3-year CAGR +20.5%, range -5.6% to +63.4%, negative in only 4.6% of all 3-year windows.

X. Limitations

  1. Pre-2015 is survivors-only (zero delistings in the dataset before 2015; externally verified complete from 2018). The 2015–2026 window delivers +18.6%/0.92 — anchor on that.
  2. All sweeps are in-sample over the same 2000–2026 history; the plateaus (not the peaks) are the evidence.
  3. One-at-a-time sweeps miss interactions; the N×filter interaction found in the wide-universe joint grid is a standing example.
  4. Sub-EUR-2M capacity; median position ADV ~€0.4M/day.