Skip to content
All strategies

Strategies

Hyperliquid Low-Activity Relative-Shock Reversal Basket

Outcome: Abandoned

HyperliquidLowActivityRelativeShockBasket

Outcome Summary

After three iterations, the strategy reached backtest review with nine approximately equal-notional long/short pairs across 731 days. Bar coverage audits passed and accounting reconciled, but net return was -0.430% and average per-leg return was -0.1864%. The reviewer abandoned the specification before optimization because it lost after costs and lacked sufficient evidence for further tuning, without rejecting liquidity provision generally.

Hypothesis

Test whether unusually low trading activity distinguishes temporary inventory-driven relative price shocks from informative repricing. Trade a fixed six-perpetual basket using synchronized 4-HOUR bars, buying relative losers and shorting relative winners only when their preceding 24-hour dollar volume is below its historical baseline. Hold paired positions for three days. Inspired by Bianchi, Babiak and Dickerson's cryptocurrency liquidity-provision research: [Trading volume and liquidity provision in cryptocurrency markets](https://eprints.lancs.ac.uk/172093/1/Babiak_Trading_Volume.pdf). This is a new Hyperliquid experiment, not a reproduction of the paper's aggregate-exchange daily portfolios. Exact catalog coverage must be verified before coding; missing instruments must not be substituted.

Long-only research is 81.9%, exceeding its 55% target by 26.9 percentage points. This dollar-neutral experiment addresses that largest imbalance while increasing Hyperliquid exposure from 8.9% toward 20% and reducing single-symbol concentration. Unlike failed high-volume auction reversals, downside-variance spreads and percentage-rebound entries, the identifying variable is below-normal trading activity accompanying a cross-sectional displacement. Corpus concentration is empty, so instrument-level novelty cannot be verified. The supplied inspiration excerpts do not establish a suitable executable mechanism; the cited primary cryptocurrency study provides a more direct economic motivation.

Decline optimization of this six-perpetual operationalization: executed pairs lose after costs, and no verified implementation defect or measured improvement path supports developer iteration. This rejects the tested Hyperliquid specification, not the paper's aggregate-exchange daily portfolios or liquidity provision generally; no parameter sweep has been evaluated.

Implementation

Each day at a fixed calendar time, picks one equal-notional pair from six synchronized Hyperliquid perpetuals: it buys the biggest relative loser and shorts the biggest relative winner, but only when both had below-baseline 24-hour dollar volume. Each pair is held for 18 four-hour bars, with ATR stops fixed at entry and a six-bar cooldown after exit. Bars from the other five instruments are used only when their timestamp exactly matches the FILUSD bar.

Fixes the critical QA finding. The _entries_paused check used to sit in the early return, so a pause also skipped the stops and the holding limit on an open pair. It now sits after open-pair management and just before new-pair selection. During a pause the 18-bar holding limit and the ATR stops still run and close both legs; the base template's pause filter lets these exits through because they only reduce positions. No other logic, parameter or config value changed. The edge concern stands: the sandbox produced only 9 pairs, averaging -0.176% per leg. The frozen plan only allows low_volume_ratio and residual_z_entry to be tuned, and that is left to optimization.

Verification Results

The sandbox recorded nine pairs with average net return of -0.1757% per leg. Full-history evaluation should establish whether the low-activity reversal signal clears commissions and impact; this smoke-test result does not establish a correctness defect.

Backtest Review

Sharpe
-0.34
Total return
-0.43%
Max drawdown
1.24%
Trades
18
Win rate
50.0%
Profit factor
0.87

Trade records show nine synchronized, approximately equal-notional long/short pairs, closed within three days; sizing varies with risk as intended.

All six bar inputs pass coverage audits; accounting reconciles and no positions remain open.

Net return is -0.430%, profit factor 0.873 and average leg return -0.1864%, below the +0.15% Hyperliquid review floor. QA's economic concern is borne out in the evaluated history.

Only nine paired episodes occur across 731 days, providing little evidence for a two-parameter optimization. This sample does not establish that the broader liquidity-provision mechanism is absent.

Code implements loser-long/winner-short selection with low-volume gates, but trade records lack entry residuals and volume ratios, preventing independent verification of those conditions.

The long-only basket benchmark is explicitly not meaningful for this paired strategy.

initial backtest review economics

Iteration History

Verification failed (Layer 1.5 — hypothesis/config consistency) [class=hypothesis_mismatch]: - optimization_plan fixes leverage at 1.0

Verification failed (Layer 4 — QA review) [class=code_defect]: - [edge_concern] The sandbox produced only nine completed pairs over 785 days, with -0.176% average return per leg and profit factor 0.876. Full-history evaluation should examine trigger frequency and whether reversals cover approximately 0.09% round-trip commission per leg plus impact. These results do not independently block the strategy. - [critical] calculate_signal returns immediately when self._entries_paused is true, before managing existing……Show moreShow less

Verification failed (Layer 4 — QA review) [class=code_defect]: - [edge_concern] The sandbox produced only nine completed pairs over 785 days, with -0.176% average return per leg and profit factor 0.876. Full-history evaluation should examine trigger frequency and whether reversals cover approximately 0.09% round-trip commission per leg plus impact. These results do not independently block the strategy. - [critical] calculate_signal returns immediately when self._entries_paused is true, before managing existing positions. This disables both the three-day holding limit and the frozen ATR stops during an entry pause. The base framework cannot provide a fallback: should_exit returns false outside the explicitly established context_index, and it only examines the primary instrument. Consequently, an entry pause can leave both legs exposed indefinitely. (line 145) — fix: Separate entry suppression from position management. Continue evaluating and submitting risk-reducing exits for an existing pair while entries are paused; apply the _entries_paused guard only after existing-position management and before selecting a new pair. Verify that a paused strategy closes both legs on either stop or the 18-bar holding deadline.

Separate entry suppression from position management. Continue evaluating and submitting risk-reducing exits for an existing pair while entries are paused; apply the _entries_paused guard only after existing-position management and before selecting a new pair. Verify that a paused strategy closes both legs on either stop or the 18-bar holding deadline.

calculate_signal returns immediately when self._entries_paused is true, before managing existing positions. This disables both the three-day holding limit and the frozen ATR stops during an entry pause. The base framework cannot provide a fallback: should_exit returns false outside the explicitly established context_index, and it only examines the primary instrument. Consequently, an entry pause can leave both legs exposed indefinitely.

Verification failed (Layer 4 — QA review) [class=hypothesis_mismatch]: - [edge_concern] In the sandbox, 9 pairs (18 legs) over 785 days averaged -0.176% per leg, with PF 0.876 and 9.4% exposure. The stress windows show no positions at all. Even with the liquidity floor fixed, check first whether the low-volume condition adds anything over plain residual reversal. Compare IC with and without the volume gate. - [critical] should_enter() applies a fixed liquidity floor, minimum_daily_dollar_volume = $2,000,000 of……Show moreShow less

Verification failed (Layer 4 — QA review) [class=hypothesis_mismatch]: - [edge_concern] In the sandbox, 9 pairs (18 legs) over 785 days averaged -0.176% per leg, with PF 0.876 and 9.4% exposure. The stress windows show no positions at all. Even with the liquidity floor fixed, check first whether the low-volume condition adds anything over plain residual reversal. Compare IC with and without the volume gate. - [critical] should_enter() applies a fixed liquidity floor, minimum_daily_dollar_volume = $2,000,000 of baseline daily dollar volume. The hypothesis does not state this floor, and it is frozen in the optimization plan. It removes two of the six declared perps from the 'fixed six-perpetual basket' for most of the history. I decoded the catalog 4H bars and computed the 30-day baseline of daily dollar volume. It is at least $2M only 18% of the time for FILUSD.HYPERLIQUID (the PRIMARY instrument; median daily DV $0.60M) and 4% of the time for ETCUSD.HYPERLIQUID (median $0.42M). The other legs pass most of the time: BCH 80%, UNI 84%, INJ 75%, SUI 97%. In practice the strategy tests a four-name SUI/UNI/BCH/INJ book. FIL and ETC still feed the basket mean and are almost never tradable. (line 223) — fix: Either drop the absolute floor or set it below every declared leg's typical liquidity, for example about $250k. Cap position size against each leg's dollar volume instead; impact and capacity are a sizing question, not a universe filter. If a floor is truly wanted, the hypothesis must declare it and pick legs that clear it. Do not silently shrink the six-name universe. - [critical] The entry gate fires too rarely to measure anything. Entries are limited to one decision per day. Each decision needs a low-volume leg at z <= -1.25 and a different low-volume leg at z >= +1.25, both above the $2M floor, so effectively 4 of 6 legs. The book holds one pair at a time, for 18 bars plus a 6-bar cooldown. The sandbox produced 9 pairs over 785 days. All six legs share history only from 2024-04-20 (ETC starts then), about 895 days. That projects to about 10 pairs (about 20 legs) over the full backtest, far below the ~100-trade level where edge can be told apart from noise. The adaptive walk-forward also needs at least 20 expected trades per 30+-day validation window. At about 0.35 pairs per month it cannot build valid windows and will fail or come out inconclusive. (line 185) — fix: Restoring the six-name universe (issue above) is the main lever. Also consider allowing more than one concurrent pair, for example the top and bottom low-volume legs each day with gross capped at max_gross_equity_fraction. This keeps the hypothesis's daily paired 3-day hold without retuning thresholds. Re-check that the sandbox yields enough pairs to project to ≥100 legs over about 895 days. - [warning] Any missing synchronized timestamp resets all rolling state: baseline, residual history and sample_count. New entries then wait for about 186 bars (about 31 days) to refill. The catalog shows only 2 UNI gaps (max 8h), so the cost is small but real. (line 78) — fix: Acceptable. Alternatively, invalidate only the 24h return window across the gap instead of the 180-bar baseline and residual history. - [warning] The ATR/3% hard stops and the 6-bar cooldown are additions that the hypothesis does not state. They are risk overlays and do not replace the stated 3-day hold, which is implemented correctly as 18 x 4H bars measured from entry_ns. They are checked only at bar close. (line 240) — fix: None required. Document them as overlays.

Outcome Summary

Future tests need more paired episodes and recorded entry residuals and volume ratios to verify the selection conditions; this result rejects only the tested Hyperliquid specification.

The backtest-review verdict was abandon because executed pairs lost after costs, the sample was too sparse to support optimization, and no verified implementation defect or measured improvement path supported another iteration. Optimization, post-optimization analysis and risk review were not reached.

It tested whether low-volume relative price shocks reverse by buying relative losers and shorting relative winners in a six-perpetual Hyperliquid basket, using synchronized four-hour bars and three-day holds.

Across 731 days, the backtest produced 18 closed positions representing nine paired episodes, with a net return of -0.430%, Sharpe of -0.338 and profit factor of 0.873. Average per-leg return was -0.1864%, below the +0.15% review floor.

Backtest and paper results are hypothetical. Trading involves risk of loss.