Bivar Capital — Quantitative Research

The Regime Filter130 rules across three markets

Every one of our momentum strategies stands aside when its index falls below a moving average — MA250 in the US, MA200 in Germany, MA75 in Canada. Those windows were chosen years ago and never revisited. This is what happened when we tried to beat them: roughly 130 rules across the three markets, including everything in the literature we could implement. Two markets had nothing better. One had a single candidate that survived. And the most useful result has nothing to do with which rule wins.

I. What Was Tested

FamilyDetail
Moving-average windows50 to 350 days, each market
Hysteresis bands±2%, ±3%, ±5% around the average
CrossoversMA20/MA100, MA50/MA200, MA100/MA250
Index momentum6- and 12-month index return above zero
Cross-market gatesthe S&P 500 as the gate for the DAX
The strategy’s own curveits equity above its own 4- to 18-month average
Asymmetric rulesone signal to enter, a different one to exit
Convergence / divergencethe four states of index-signal × self-signal
Volatility gatesindex vol, strategy vol, downside vol, 3m/12m ratio, vol-of-vol, rising vol — at three thresholds each
Barroso & Santa-Clara (2015)scale exposure to a constant strategy volatility
Daniel & Moskowitz (2016)weight by μ/σ², and their bear-market-plus-high-vol crash state

Each was scored on the full history and on an out-of-sample window that drops the first five years, then put through a walk-forward.

II. The Windows That Run Are Not Peaks

Sharpe against the moving-average window, one panel per market. In all three the live setting sits on a broad shelf rather than a spike, and the curve falls away on both sides — MA50 and MA350 are materially worse everywhere. Germany’s best single window is MA150 at a Sharpe of 0.80 against MA200’s 0.72, but the standard error of a Sharpe estimated from 26 years is 0.08, so that is one standard error, found after trying eleven windows.

III. The Main Contenders

MarketRuleCAGRSharpeMaxDDCAGRSharpeMaxDD
USAS&P 500 MA250+27.1%0.88-37.6%+29.0%1.00-31.3%
strategy’s own 9m MA+19.4%0.58-66.6%+25.9%0.85-39.4%
both signals agree+22.1%0.73-42.8%+26.3%0.92-29.0%
constant vol, cap 1.0×+21.8%0.86-37.6%+22.4%1.03-22.2%
constant vol, cap 1.5×+26.0%0.95-37.6%+26.8%1.09-25.8%
no filter at all+22.5%0.61-68.3%+27.8%0.82-68.3%
GermanyDAX MA200+19.7%0.74-38.2%+19.4%0.76-38.2%
strategy’s own 9m MA+23.9%0.90-42.0%+20.8%0.83-42.0%
both signals agree+18.8%0.75-29.0%+18.2%0.78-29.0%
constant vol, cap 1.0×+18.8%0.74-31.0%+18.4%0.76-31.0%
constant vol, cap 1.5×+22.9%0.77-42.7%+23.2%0.78-42.7%
no filter at all+19.6%0.60-63.4%+19.1%0.63-56.1%
CanadaTSX MA75+34.7%1.23-25.7%+31.9%1.12-25.7%
strategy’s own 9m MA+37.5%0.67-51.4%+36.5%0.60-51.4%
both signals agree+30.7%1.11-30.5%+27.9%1.01-30.5%
constant vol, cap 1.0×+30.3%1.21-22.9%+27.1%1.09-22.9%
constant vol, cap 1.5×+35.7%1.26-30.7%+32.4%1.15-30.7%
no filter at all+44.0%0.77-57.3%+43.0%0.70-57.3%

The first three numeric columns are the full history; the last three drop the first five years. Highlighted rows are the filters currently running.

IV. The Result That Matters

Re-optimising the rule every January on the previous sixty months, then holding it for twelve, repeated across the sample. In all three markets the optimiser loses to simply leaving the filter alone: 0.91 against 0.94 in the US, 0.46 against 0.86 in Germany, 1.22 against 1.18 in Canada.

This is the same finding that has now appeared four separate times in our work: on portfolio weights across the three sleeves, on an S&P put-writing study, on the Germany portfolio size, and here. The rule that adapts arrives after the thing it was chasing has stopped working. It is a more reliable result than anything about which moving average is best, because it reproduces.

V. Two Results of Ours That Were Wrong

The self-referential filter that could never turn back on

Gating on the strategy’s own equity curve looked promising: it is the only family that catches Germany’s 2023 and 2026, where the momentum cohort unwound while the index rose — a case a 200-day average cannot see by construction. The first implementation returned −1.5% a year with a Sharpe of −25.8, identical for every window, which is not a result but a symptom. When the filter switches off the book earns nothing and pays costs, so the curve declines; a declining curve is always below its own average; it never switches back on. The fix is to gate on the unfiltered curve — what the book would have done fully invested — which asks “is the strategy working” rather than “has my account been going up”.

A target volatility that knew the future

Constant-volatility scaling needs a target. Ours was the median of the strategy’s own volatility — over the whole sample. That is look-ahead, and it was worth a great deal:

SharpeMaxDDSharpeMaxDD
US, cap 1.0×0.95−24.1%0.86−37.6%
US, cap 1.5×1.03−27.7%0.95−37.6%

The first pair uses the full-sample median, the second an expanding median of past data only. The look-ahead inflated Sharpe by 0.08 and invented the entire 13-point drawdown improvement. We had already reported the first version before catching it.

VI. The One Candidate That Survived

Scaling exposure by the inverse of the strategy’s own six-month volatility, with an honest target, is the only rule out of roughly 130 that improves the US sleeve on both return and risk out of sample: Sharpe 1.09 against 1.00, drawdown -25.8% against -31.3%, winning 29.0 of 44 rolling five-year windows.

It does not work in the other two. Canada’s apparent gain disappears at cap 1.0× (Sharpe 1.21 against 1.23) — what looked like risk management was leverage. Germany wins 23.0 of 44 windows, a coin toss.

The lower panel shows what the rule would have done. It is at full exposure or above in 57% of months and below half in 10%. It cut to 56% through Lehman. It also held 36% to 55% exposure through most of the run that produced this year’s +221%, including 45% in a month the strategy returned +58.9%. The Sharpe improves because volatility falls further than return does. This is not a rule that earns more; it is a rule that swings less, and it is honest about the trade.

VII. What We Changed

Nothing.

Two of three markets had no rule that beat the filter already running, on either window. The third had one, by 0.09 of Sharpe, found after roughly 130 attempts on a single 26-year history — which is about what one would expect to find by chance at that number of trials. Adopting it would mean rebalancing exposure every month, at a transaction cost the backtest charges and a margin cost it does not.

There were two alternatives worth naming, both of which buy lower drawdown by giving up return, and neither of which we took. Requiring both signals to agree cuts the drawdown in the US and Germany and makes it worse in Canada. Constant-vol scaling at cap 1.0× — reduce only, never lever — cuts it in all three, at a cost of 4 to 6 points of CAGR.

The case for changing nothing is not that the current filters are optimal. It is that we cannot demonstrate anything is better, and the one piece of evidence that reproduced across every market and every test we ran is that the rule which adapts does worse than the rule which does not.

VIII. Limitations

  1. One history each. 26 years per market, heavily overlapping in time. Three markets is not three independent tests of a regime rule — 2008 is in all of them.
  2. Roughly 130 trials. At a Sharpe standard error near 0.08, differences under 0.16 are noise and should be read as such, including the one candidate we called a survivor.
  3. The self-curve rules are fitted to the drawdowns they are judged on. They were built after seeing 2023 and 2026 fail.
  4. Costs are modelled, financing is not. Any rule with exposure above 100% borrows, and the backtest charges no interest for it.
  5. Germany’s pre-2015 data records no delistings at all, so its regime results before then run on survivors.