Skip to content

Latest commit

 

History

History
93 lines (68 loc) · 3.39 KB

File metadata and controls

93 lines (68 loc) · 3.39 KB

SIG ALGOTHON 2026 — Multi-sleeve statistical trading strategy

Our entry for SIG ALGOTHON 2026 (Susquehanna × UNSW FinTech Society): a multi-sleeve book on the competition’s synthetic multi-asset panel (51 instruments, 1500 daily prices in prices.txt). Each day the strategy returns an integer share vector from getMyPosition(prcSoFar).

Implementation: devtokens.py.
Constant provenance: STRATEGY.md.
Charts over days 1–1500: analysis/figures/.


How it works

The book is a blend of several edges, not a single signal. Confidence in ([-1, 1]) is built per name, converted to dollars under position limits, then augmented with cointegration overlays.

1. Lead-lag (core)

Yesterday’s cross-sectional return vector is mapped through a ridge regression matrix (B) to forecast today’s returns. (B) is refit periodically, shrunk toward a low-rank factor structure, and smoothed against the previous fit. Signals are tilted toward low-vol / high in-sample (R^2) names. This sleeve carries most of the weight (W_LL ≈ 0.75) and most of the measured edge.

2. Factor-neutral residual reversion

Remove the top two PCA factors from recent returns, then fade each name’s idiosyncratic residual z-score over a ~20-day window. The idea: after common moves are stripped out, residuals mean-revert over multi-week horizons. This is the main diversifier to lead-lag (W_RESID ≈ 0.25).

3. Orthogonal short-horizon overlays

Smaller sleeves add information that is explicitly residualised against lead-lag (so they don’t just restate the same forecast):

  • short-horizon momentum (10d / 20d)
  • fade of yesterday’s lead-lag forecast error
  • fade of 60-day name returns
  • fade of price vs a 100-day moving average

4. Market tilt + risk sizing

After the blend is demeaned, an equal-weight index momentum tilt adds intentional net long/short market exposure (asymmetric on up days). Positions are then scaled by inverse EWMA volatility before mapping confidence → shares via a capital multiplier (ALLOC).

5. Cointegration overlays (additive)

On top of the share map:

  • ALGO hub pairs — Engle–Granger spreads of instrument 0 vs other names
  • Broader pairs — rolling discovery of non-ALGO cointegrated pairs, faded when the spread is stretched
  • High-hit pairs — a small frozen set of historically reliable spreads that get extra size when (|z|) is large

6. Execution guards

ALGO (the high-limit name) uses a hysteresis deadband so small target changes don’t churn the large book. A finals-period trend floor can also nudge historically strong up-names when history exceeds 1000 days.

returns → lead-lag B + residual MR + orthog fades
       → demean → index tilt → inv-vol → shares
       → + coint pairs / HH → ALGO hysteresis → positions

Repo layout

Path Role
devtokens.py Live strategy (getMyPosition)
eval.py Local backtest on prices.txt
STRATEGY.md Architecture + where each constant came from
analysis/ Figure generator + charts for days 1–1500

Running locally

python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements-dev.txt
python3 eval.py                       # run the day-loop backtest
python3 analysis/generate_figures.py  # refresh analysis/figures/