HyperliquidFiveMajorTrendFollowingBasketLS
Hypotheses
Hyperliquid 5-Major Diversified Trend-Following Basket, Long-Short (Independent Absolute-Momentum per Name — NOT Ranked/Rotated — Dual-MA Trend State on BTC/ETH/SOL/AVAX/LINK HYPERLIQUID Perps, 4H Bars, Per-Name Vol-Scaled Risk, Net Exposure Floats, 2-Parameter)
Hypotheses
A LONG-SHORT, MULTI-INSTRUMENT, pure-OHLCV managed-futures-style TREND-FOLLOWING BASKET across five liquid Hyperliquid perpetuals (BTCUSD, ETHUSD, SOLUSD, AVAXUSD, LINKUSD). Its thesis is a DIVERSIFICATION-AS-ROBUSTNESS construction that directly attacks this factory's dominant failure mode (overfit, 249x): instead of betting the result on one instrument's fitted signal — the fragility that killed the LINK spot dip-buyer (PBO 0.89) and most single-name strategies — it runs the SAME simple, non-bespoke trend rule INDEPENDENTLY on five names and holds the portfolio average. Each name is traded on its OWN absolute (time-series) trend state; there is NO cross-sectional ranking, NO rotation, NO relative-value leg — so it is explicitly NOT the empirically-exhausted majors-rotation family, and NOT a market-neutral spread. This is the canonical CTA design whose whole point is that averaging many independent, individually-modest trend edges yields a far more OOS-stable Sharpe than any single leg, because idiosyncratic noise diversifies away while the common momentum premium survives. It is materially different from every strategy already in this factory's pipeline: those are all SINGLE-INSTRUMENT (SOL Donchian, ETH pullback, AVAX efficiency-ratio, BTC dual-TF, SOL BTC-gate, LINK vol-target TSMOM) — this is a five-name portfolio whose edge and novelty live at the PORTFOLIO level. Fills the most under-represented data-safe buckets simultaneously: HYPERLIQUID venue (6.0% vs 20% quota), long_short direction (13.7% vs target), and multi-instrument scope. All five legs are HYPERLIQUID 4H bars (~2.3 years usable history, above the sub-hourly wall) — same venue, so NO cross-venue price_precision schema-merge landmine and NO spot-lookup timing bug. Five names firing independently guarantee a high, statistically-measurable trade count (avoiding the thin-sample overfit that sinks single-name fits). Pure OHLCV, no supplementary feed (best-surviving tag family at 4%). Avoids every recent death mode: no options-expiry cadence, no funding fee-floor, no 90-day liquidation-feed wall, no COIN-M booking defect. Deliberately only 2 tunable parameters shared across all five names (one MA pair + one vol target) to keep the sensitivity surface flat and the OOS robust.
Hypotheses
Both audit findings are fixed, and the universe one is fixed properly rather than by re-substituting. AVAX is restored so the traded universe is exactly BTC/ETH/SOL/AVAX/LINK as the hypothesis names. The reason it was dropped in iteration 1 was real — AVAX has a measured 772-hour contiguous outage, and because all five legs share a timeframe the base class's alignment barrier would defer the entire basket until every leg reported, freezing all five books for ~45 days. Rather than change the universe to dodge that, I removed the coupling: the barrier exists to stop a COMBINED cross-leg signal from reading a stale price, and this strategy computes no cross-leg quantity at all — each leg decides purely from its own prices — so clearing the sync set costs nothing and makes the legs genuinely independent, which is what the hypothesis specifies. In its place I added an explicit per-leg staleness guard so a leg in a data outage stands aside instead of trading dead prices, with exits still permitted so a position can always be closed. The second finding was a real defect: because every leg including the primary is submitted through _submit_entry_instrument, the base class's min-notional check (which lives only in the _process_primary/should_enter path, inert here) never ran, so the declared min_notional parameter was decorative. It is now read in __init__ and enforced on the computed notional in _leg_size, and I also fixed integer-precision handling there for any leg whose instrument reports size_precision 0. Everything else — the signal, the vol-scaled sizing, the cooldown, the O(1) indicator state — is untouched. I re-measured the compliant universe before submitting and the analyst should see this up front: with AVAX restored the basket returns +2.6% over the full ~2.5-year history with a 13.8% max drawdown, 134 trades and Sharpe +0.14, and is NEGATIVE over the trailing year at -1.5%. That is materially worse than the XRP-substituted variant I measured in iteration 1 (+7.6%, Sharpe +0.36), because AVAX brings both the outage and a weaker trend profile. So the honest position is that this now implements the hypothesis exactly and the hypothesis, implemented exactly, does not show a promotable edge — roughly flat over the full sample, negative recently, with the diversification thesis delivering its promised low drawdown but not a return worth the capital. If the desk wants to keep pursuing the CTA-basket idea, the evidence says the constituent list is the thing to revisit, not the rule.
Hypotheses
No promotable edge in either universe configuration, and the developer honestly concedes it. This iteration-2 compliant version (AVAX restored per the named universe) posts Sharpe 0.291 with CI [-0.79, 1.37] straddling zero (PSR 0.71, coin-flip), profit_factor 1.19 (< 1.2, L9 abandon signal for OHLCV trend), total_return just 10.6% over 2.5 years, and a losing 2024 (-5.7%). The code docstring itself states the compliant basket is 'roughly FLAT over the full sample and NEGATIVE over the trailing year… does not currently show an edge worth promoting.' Restoring the hypothesis's named universe cost the edge — AVAX adds both a data outage and a poorer trend profile — dropping Sharpe from the iteration-1 XRP variant's 0.576 (already borderline, and a universe deviation) to 0.29. The two configurations bracket the honest reality: a borderline ~0.58 that violates the named universe, or a compliant ~0.29 with a CI straddling zero. avg_trade_return_pct 1.68% clears the fee floor and the code is correct and two-sided, so this is neither a bug nor a fee death — the trend edge on this 5-major HL basket is simply too weak to survive the robustness gauntlet, and no 2-parameter tuning can lift a ~0.29 Sharpe / 1.19 PF to a robust 1.5 without overfitting the thin 2.5yr history. Iterating again would only thrash between two weak configurations. Abandon rather than spend 2 hours optimizing a strategy its own author reports has no promotable edge.
Implementation
Long-short managed-futures-style trend-following basket across the five Hyperliquid perpetuals the hypothesis names — BTC, ETH, SOL, AVAX, LINK — on 4H bars. The same dual-moving-average rule runs independently on each name (long while its 60-bar MA is above its 240-bar MA, short while below), with no ranking, no rotation and no relative-value leg, so net exposure floats freely. Each leg is sized by its own realized volatility toward a shared portfolio volatility target (leg fraction = (15% target / that name's annualized vol) / 5, clipped to 0.5%–15% of equity) and every order is checked against the exchange minimum notional before submission. Legs exit when their own trend state flips, each with an independent 12-hour calendar-anchored cooldown, and a leg whose data has gone stale stands aside rather than trading on dead prices. Leverage 1.0. Exactly two tunable parameters shared across all five names (slow_ma_window, vol_target_annual).
Verification Results
Analyst should likely ABANDON at backtest_review (flat edge), OR the Research Lead should re-issue with a better constituent set (AVAX is the drag; the XRP variant was materially stronger). Do not spend the full optimization on a roughly-flat basket unless a constituent change is authorized.
Verification Results
FLAT EDGE — the developer's own honest verdict, and I agree. With AVAX restored (the compliant named universe), the full-history dry-run is +2.6% / Sharpe +0.14 with a negative trailing year (-1.5%), materially worse than the iteration-1 XRP-substituted variant (+7.6% / Sharpe +0.36) because AVAX brings both a 45-day data outage and a weaker trend profile. The engine sandbox is marginally better (+4.0%, Sharpe +0.28, PF 1.25, 51 trades, avg_trade_return_pct +1.71% above floor, max_drawdown 8.5%) but still marginal. Diversification delivers LOW DRAWDOWN but not a promotable return. The developer states: 'the hypothesis, implemented exactly, does not show a promotable edge... the constituent list is the thing to revisit, not the rule.'
Verification Results
Rely on the engine's full-history backtest for the promote/abandon decision, not the offline dry-run.
Verification Results
OFFLINE-vs-ENGINE DISCREPANCY. The dry-run reports the trailing year at -1.5%, but the engine sandbox is +4.0% (Sharpe +0.28). Trust the engine (marginally positive); both agree the edge is marginal/flat, so the discrepancy doesn't change the conclusion — the dry-run figures (incl. +2.6% full-history) should be re-verified by the engine's full backtest.
Verification Results
Acceptable as-is (correct, well-reasoned); consider having the base template expose a supported 'independent-legs' mode so strategies do not mutate _sync_extra_iids directly. Not a correctness defect.
Verification Results
BASE-CLASS INTERNAL MODIFICATION (verified safe, maintainability coupling). The strategy clears the base's cross-leg alignment barrier (self._sync_extra_iids = set()) and replaces it with a per-leg staleness guard. Verified correct with NO look-ahead: the strategy computes no cross-leg quantity (each leg decides from its own prices), so without the barrier a non-primary leg may lag the primary clock by <=1 bar — past (causal) data, immaterial for a 240-bar MA — and the staleness guard (>3 bars behind -> stand aside) handles AVAX's 45-day outage while still allowing exits. Un-warmed/stale legs cannot trade. Functionally sound, but it reaches into a base-class attribute.
Backtest Review
Correctly implements the compliant named universe (AVAX restored) with a sound leg-decoupling + staleness-guard fix; genuinely two-sided (68 long / 65 short), avg_trade_return_pct 1.68% above the fee floor
Backtest Review
Low beta (-0.01), max_drawdown modest 11.2% — no bug, no liquidation, no fee death
Backtest Review
No promotable edge: Sharpe 0.291 with CI [-0.79, 1.37] straddling zero, PSR 0.71 (coin-flip), profit_factor 1.19 < 1.2 (L9 trigger)
Backtest Review
Near-flat: total_return 10.6% over 2.5 years, 2024 a losing year (-5.7%), calmar 0.87
Backtest Review
Developer concedes in the code docstring the compliant basket is 'roughly FLAT over the full sample and NEGATIVE over the trailing year… does not currently show an edge worth promoting'
Backtest Review
Restoring the named universe (AVAX) dropped Sharpe from the iter-1 XRP variant's 0.576 to 0.29 — the two configs bracket a genuinely weak edge; no 2-param tuning lifts ~0.29 Sharpe to a robust 1.5 on thin 2.5yr HL data
Analysis
Code↔hypothesis misalignment found by the semantic auditor — the code does NOT implement the hypothesis. Re-code the strategy to implement the hypothesis EXACTLY (instrument, timeframe, direction, the named edge/mechanic, sizing). Concrete issues: Hypothesis names the basket universe as BTC/ETH/SOL/AVAX/LINK, but config.extra_instruments trades BTC/ETH/SOL/LINK/XRP — AVAX is replaced by XRP. Disclosed and justified (measured AVAX data outage) but a real, concrete deviation from the specific universe the hypothesis names. | min_notional (10.0) is a declared strategy parameter but is never enforced on any leg: should_enter/should_exit/position_size are inert stubs, so all five legs (primary included) enter via _manage_leg -> _submit_entry_instrument, which has no min_notional check. The only base-class min_notional enforcement lives in _process_primary's should_enter path, which is dead here, and the strategy code never reads parameters['min_notional'] itself.
Outcome Summary
Aimed squarely at the factory's dominant overfit failure mode, this CTA-style basket tried to win at the portfolio level by running one non-bespoke trend rule across five Hyperliquid majors and diversifying idiosyncratic noise away. Iteration 1 had substituted XRP for AVAX and reached a borderline ~0.58 Sharpe, but that violated the hypothesis's named universe; iteration 2 restored AVAX with a leg-decoupling and staleness-guard fix and, honestly, the edge collapsed to Sharpe 0.291 with a confidence interval straddling zero and profit factor 1.19. The developer reported plainly in the code that the compliant basket was flat-to-negative and showed no edge worth promoting. With the two universes bracketing a genuinely weak signal and no tuning able to manufacture robustness from 2.5 years of data, the analyst abandoned it at the backtest-review gate after two iterations.
Outcome Summary
Diversification only stabilizes a Sharpe that exists to begin with — averaging five individually-weak Hyperliquid trend legs produced a compliant basket of only ~0.29 Sharpe, and honoring the named universe (restoring AVAX with its data outage and poor trend profile) cost real edge versus the iteration-1 XRP substitution (~0.58), so the two configs merely bracketed a genuinely weak signal.
Outcome Summary
The analyst abandoned it at the pre-optimization BACKTEST_REVIEW gate — optimization never ran — because there was no promotable edge: Sharpe ~0.29 with a CI straddling zero, profit factor 1.19 tripping the OHLCV-trend PF<1.2 abandon signal, and the developer's own docstring conceding the compliant basket was 'roughly FLAT over the full sample and NEGATIVE over the trailing year.' No 2-parameter tuning could lift a ~0.29 Sharpe to a robust 1.5 on thin 2.5-year Hyperliquid history.
Outcome Summary
A long-short, multi-instrument managed-futures-style trend-following basket that ran the same simple dual-moving-average absolute-momentum rule independently on five Hyperliquid majors (BTC, ETH, SOL, AVAX, LINK), sized each leg by its own realized volatility toward a portfolio vol target, and held the average — betting that averaging five modest, decorrelated trend edges would yield a more OOS-stable Sharpe than any single fitted leg, with only 2 shared parameters.
Outcome Summary
The compliant iteration-2 basket was near-flat: total return 10.6% over ~2.5 years with 133 two-sided trades (68 long / 65 short), Sharpe 0.291 (CI [-0.79, 1.37] straddling zero, PSR 0.71), profit factor 1.19, and 11.2% max drawdown, with 2024 a losing year (-5.7%). avg_trade_return_pct 1.68% cleared the fee floor and beta was ~0, but the edge was statistically indistinguishable from a coin flip.
Backtest and paper results are hypothetical. Trading involves risk of loss.