Style Rotation Strategy
Walk-forward rotation backtest of a style/sector ETF basket vs a benchmark, plus the current target weights. At each rebalance the strategy scores the basket from past data only (no look-ahead) and tilts off equal-weight toward the Leading/Improving names — with a hard tilt cap, long-only, shrinking toward equal-weight when the benchmark-trend regime is unclear — net of turnover cost. A conservative, regime-aware tilt, not an aggressive all-in rotation.
How to use
- Wire the style/sector ETF Price Factors (edge-first), or type
symbols. - Set
benchmark(default SPY),rebalance(monthly/quarterly),max_tiltand the turnover cost. - Read the strategy-vs-benchmark equity curve, the headline metrics, the current target weights, and the window-sensitivity robustness row.
Core method
At each rebalance bar t (monthly/quarterly), using prices[:t+1] only:
scores = style_score(basket up to t)
tilt_i ∝ (score_i − mean score), scaled so max |tilt| = max_tilt
weight = clip(1/N + tilt, 0) renormalized (long-only simplex)
risk-off (benchmark < its regime_ma mean) → shrink tilt toward equal-weight
hold to next rebalance; charge txn_cost_bps · turnover
No look-ahead: weights decided at t earn the t→t+1 return.Assumptions & applicability
Assumptions: daily aligned history (≥ ratio_window + momentum_window + lookback + one rebalance period); flat bps turnover cost; benchmark trend is a usable regime proxy.
Applicability: equity / ETF / multi-asset baskets, daily data, ≥ 160 observations.
Out of scope: live execution, high-frequency rotation, leverage/shorts (long-only).
Known limitations
- A backtest, not a forecast — past performance is not indicative of future results.
- The regime gate is a benchmark-trend proxy; a markov / macro regime overlay is a planned enhancement.
- Flat turnover-cost model; real-world costs (spread, impact, taxes) vary.
- Window-sensitive — always read the robustness row before trusting a single setting.
References
Relative Rotation Graph rotation + standard periodic-rebalance long-only tilt backtesting with transaction costs.
Golden Test
tests/golden/fixtures/tier3/style_rotation/ — 1e-3 absolute, an independent walk-forward reimplementation (explicit rebalance loop + pandas RRG/score) of the backtest, 2026-05-25 passing. Locks the rebalance schedule, the no-look-ahead timing, the turnover-cost accrual, and the regime-gate shrink.
Changelog
- 1.0.0 (2026-05-25) — New operator (Stage 2 — Style Rotation). Walk-forward backtest kernel + handler, frontend registry + equity-curve renderer, golden added.

