Strategies
Hyperliquid Cross-Sectional Short-Term Reversal Basket — Weekly Dollar-Neutral: Long Last Week's Relative Losers / Short Last Week's Relative Winners Across the Liquid HL Perp Universe (HYPERLIQUID, Market-Neutral, 1D Bars, 3-Parameter)
Outcome: Abandoned
HyperliquidCrossSectionalWeeklyReversalNeutralBasketDaily
Backtest gate: - metrics unreliable: 1382 trades / 2207 data days is too little evidence (need >=5 trades over >=10 days) — increase signal frequency or widen the window
Hypothesis
backtest_failed:data: the full backtest could not run 3 times — ktest_agent.py", line 424, in _ensure_funding_for_perp_legs raise RuntimeError( RuntimeError: Funding data unavailable for perp leg 'BTCUSD.HYPERLIQUID' — on-demand collection failed or the venue has no funding history (backtest blocked for accuracy; set SF_DISABLE_ONDEMAND_FUNDING=1 to bypass) Pipeline/data failure, not a verdict on the strategy; revive once the cause is fixed.
Implementation
Dollar-neutral cross-sectional short-term reversal across the 8 deepest Hyperliquid USD perps (BTC, ETH, SOL, BNB, XRP, DOGE, AVAX, LINK) on 1-DAY bars. Every calendar-anchored weekly slot the names are screened by trailing 30-day dollar volume, ranked by their trailing rank_lookback-day return, and the book goes LONG the bottom quintile_fraction (relative laggards) and SHORT the top quintile_fraction (relative over-performers), equal-weighted with EQUAL USD notional per side so gross exposure is 80% of equity at zero net delta. Positions are moved with netting delta orders and only when the delta clears both the $10 exchange minimum and a 30% turnover band, so a name that stays in the same quintile is not re-traded for drift. No leverage, no supplementary feeds — pure HL 1-DAY OHLCV.
Verification Results
If the mechanism were to be pursued, restore the 16-20 name universe (the fix belongs in catalog query batching, not in shrinking the tradable cross-section) so the quintile legs hold enough names to be a genuine cross-sectional bet.
Hypothesis specifies a ~16-20 name liquid HL perp universe; the code ships an 8-name universe (max_universe=8), so with quintile_fraction=0.20 each rebalance holds only 2 longs and 2 shorts (k=round(8*0.2)=2). The cross-sectional reversal mechanism is preserved and the reduction is documented as a Layer-3 wall-clock fix (per-instrument catalog query cost), but the effective cross-section is much thinner than the hypothesis's stated breadth, which weakens diversification and makes the ranking noisier. The optimizer could restore breadth if the timeout is addressed at the catalog level rather than by dropping legs.
Strong negative-expectancy signal on adequate sample: sandbox avg_trade_return_pct -0.41% (below the ~0.09% HL round-trip floor), total_return -81.5%, profit_factor 0.88 over 922 trades, and the developer's engine-free replay on real HL 1-DAY closes (2021-2026) finds cross-sectional reversal negative in essentially every cell across 5 constructions / 85+ (lookback,hold) combinations with several significantly negative t-stats (L14/H1 -0.180% t=-4.36; L7/H1 vol-adj -0.200% t=-5.05). Evidence points to cross-sectional MOMENTUM (opposite sign) being the real effect on this universe, i.e. a different hypothesis. Analyst should treat the reversal premise as likely falsified; a sign-flip is a Research Lead call, not a re-parameterization. The book is verifiably dollar-neutral (beta measured -0.022 on iter 1) so this is a mechanism failure, not a construction bug.
Analysis
Backtest gate: - metrics unreliable: 1382 trades / 2207 data days is too little evidence (need >=5 trades over >=10 days) — increase signal frequency or widen the window
Iteration History
sandbox_timeout: Verification failed (Layer 3 — sandbox backtest): smoke test exceeded the 300s wall-clock limit on a ~20000-bar window (2400 days of BTCUSD.HYPERLIQUID-1-DAY-LAST-EXTERNAL). This almost always means per-bar work that scales with history — e.g. rescanning the full funding/supplementary series, or rebuilding a list and calling min()/sorted() inside calculate_signal()/on_bar() on every bar. Precompute sorted timestamp arrays ONCE in __init__ and use bisect, or cache lookups keyed by timestamp, so per-bar cost is O(log n) not O(n).
Backtest Review
- Sharpe
- 0.54
- Total return
- -68.67%
- Max drawdown
- 72.14%
- Trades
- 1382
- Win rate
- 52.5%
- Profit factor
- 0.90
Backtest and paper results are hypothetical. Trading involves risk of loss.