Skip to content

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

  1. Wire the style/sector ETF Price Factors (edge-first), or type symbols.
  2. Set benchmark (default SPY), rebalance (monthly/quarterly), max_tilt and the turnover cost.
  3. 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

  1. A backtest, not a forecast — past performance is not indicative of future results.
  2. The regime gate is a benchmark-trend proxy; a markov / macro regime overlay is a planned enhancement.
  3. Flat turnover-cost model; real-world costs (spread, impact, taxes) vary.
  4. 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.

Verifiable intelligence for the decisions that demand scrutiny.