Skip to content

View original

SolHighBetaSpotPerpBasisDislocationHarvestNeutral1H

Hypotheses

SOL Spot-Perp Basis Dislocation Harvest — Market-Neutral, Cross-Venue, High-Beta Asset (Long SOLUSDT Spot + Short SOLUSDT USD-M Perp ONLY When the Perp Premium Blows Out Far Beyond Its Rolling Mean, Unwind on Convergence; 3-Parameter, 1H)

Hypotheses

A MARKET-NEUTRAL, CROSS-VENUE basis strategy that harvests convergence of the Binance spot-vs-perp basis on SOL — deliberately chosen over BTC/ETH because SOL is a HIGH-BETA name whose leveraged-long crowding drives perp premiums that are structurally LARGER and MORE FREQUENT (routinely 0.5–1.5% during momentum phases and funding squeezes) than the sub-0.3% dislocations on BTC/ETH. That larger dislocation is exactly what creates fee headroom: the captured convergence must clear the ~0.30% two-leg round trip (spot 0.20% RT + perp 0.10% RT), which BTC/ETH basis rarely does but SOL's fatter dislocations do. When the perp trades rich to spot beyond an entry threshold measured as deviation from a rolling-mean basis (normalizing out the persistent funding/stablecoin offset), the strategy goes LONG SOLUSDT.BINANCE_SPOT + SHORT SOLUSDT.BINANCE (USD-M perp) in equal notional (net delta ≈ 0), and unwinds both legs on convergence back toward the rolling mean, collecting funding on the short-perp leg while held. Only the PREMIUM side is traded (the CASH spot leg cannot be shorted). This is NOT single-name momentum/trend (0/213 OHLCV — dead), NOT a single-name mean-reversion fade (L53), NOT funding-differential carry (just died fee_edge at 0.05%/trade), NOT a non-price feed gate (L46). It is distinct from the two pending cross-venue reversion items: those are ETH spot-perp and BTC perp-vs-perp; this is a THIRD asset (SOL), chosen specifically for its larger basis amplitude and higher trade count, on the spot-vs-perp axis. It fills three under-represented buckets: cross-venue (6.9% vs ≥15%), long-short/market-neutral (13.2% vs the ≥45% implied by the ≤55% long-only cap), and adds a spot leg (11.9% vs ≥15%).

Hypotheses

Iteration 3 addresses the ONLY reported failure — the Layer-3 sandbox exceeded the 300s wall clock — with the smallest change that removes the cost, leaving the signal, hurdle, exit and funding logic that already passed Layers 1-2 byte-for-byte intact. Two changes: (1) the basket goes from 12 pairs / 24 legs to 5 pairs / 10 legs (SOL, XRP, ADA, AVAX, DOT — all verified to have BOTH perp and spot 1H series in the catalog), a ~58% cut in the dominant per-run cost, since bar wrangling, engine event dispatch, the base class's cross-leg alignment barrier and this strategy's own per-bar loop all scale linearly with leg count; per_leg_pct is re-scaled 0.06 -> 0.12 (bounds updated to match) so five pairs still deploy ~60% of each venue's capital. (2) per-bar work is made history-independent exactly as the feedback prescribes: the growing basis list that was re-sliced (a full copy) and re-wrapped in np.asarray every bar per symbol is replaced by a preallocated fixed-length numpy ring buffer written at a rotating index with mean/std computed in place, and the 2-per-leg cache.positions_open() calls collapse to ONE snapshot dict per bar. Funding was already O(log n) via a cached sorted-timestamp + cumulative-sum array built once per leg; the trailing-rate lookup now reuses that cumsum instead of slicing the rate array, so no allocation happens there either. No imports were added or removed, the class/structure is unchanged (Layer 1 stays green), and calculate_signal still returns the primary symbol's continuous basis z-score every bar (Layer 2 stays green). The trade rate stays several times SOL-alone, preserving iteration 2's fix for the empty-holdout problem while fitting inside the smoke-test budget.

Hypotheses

No-edge, capacity-dead market-neutral cross-venue basis basket (L45 0/84) — not worth 2 hours of optimization. Funding is credited by the engine, so this is a real result and it still fails: profit_factor 1.009 (break-even), total_return -7.3%, Sharpe -0.24 with CI [-1.04, 0.54] straddling zero, PSR 0.30, and avg_trade_return_pct 0.114% is below the ~0.30% two-leg round trip the hypothesis itself says it must clear; it loses in most years and in all three vol regimes. It is capacity-dead: impact_cost_pct 70.8% (impact consumes 71% of gross PnL) with capacity_usd only $199k — the mid-cap alt spot+perp legs are far too thin, exposure runs to 413% gross to prop up a tiny per-trade result, and any edge exists only at toy scale (a hard blocker). There is also a plausibility red flag: the final bar posts a +57% daily return on a supposedly delta-neutral book with return_kurtosis 59.2 and end_unrealized_pct -9.28 — a suspected stale-leg/end-of-backtest artifact (mechanism not independently verified), and the premise of persistent 0.5-1.5% SOL perp-spot basis is implausibly large for a same-asset spread (real basis is a few bps to ~0.3%). This is the L45 market-neutral cross-venue pairs family, the same no-edge + capacity signature as the ETH/BTC, OP/ARB and LTC-BCH pairs abandoned this session. No tuning of entry_z/profit_target_mult/max_hold flips a PF-1.0, negative-return basket with 71% impact drag into a scalable edge, and the legs are illiquid by construction. Failure pattern: no_edge/capacity market-neutral cross-venue basis basket (L45).

Implementation

Market-neutral cross-venue spot-perp basis harvest on five high-beta Binance names (SOL primary, plus XRP, ADA, AVAX, DOT). For each symbol independently it tracks the 1H basis (perp_close/spot_close - 1) on strictly contemporaneous bars, z-scores it against that symbol's own rolling mean/std, and when the perp premium blows out beyond entry_z AND the expected convergence plus expected funding carry clears profit_target_mult x the 0.30% two-leg round trip, it SHORTS the USD-M perp and BUYS the equal-base-quantity spot leg (net delta ~0, collecting funding on the short). The pair unwinds when captured convergence + accrued funding reaches the same edge target, on a max-hold time cap, or on a basis-divergence stop, followed by a per-symbol cooldown. Only the premium side is traded because the CASH spot leg cannot be shorted.

Verification Results

CLEAN RESTART 2026-09-04 — this run's verdict history and learning records were removed and it was restarted from verification. Its previous abandonment came from the pipeline, not from the market: the Layer-2 harness mis-bound @staticmethod helpers (fixed), QA issued terminal performance verdicts on an unoptimized smoke test (removed — QA now judges correctness only), and sandbox timeouts came from backtest-slot starvation (fixed). The hypothesis and the strategy code are unchanged. Verify the code on its merits; performance is decided later by the full backtest and the optimizer.

Backtest Review

Delta-neutral construction bounds realized drawdown (7.3%) and never liquidates; funding loaded (18,011 events); 1270 trades is an adequate sample

Backtest Review

Layer-3 timeout was fixed (ring buffers, one cache call) — the run completed

Backtest Review

profit_factor 1.009, total_return -7.3%, Sharpe -0.24 CI [-1.04,0.54] straddling zero — no edge net of the two-leg round trip

Backtest Review

impact_cost_pct 70.8% with capacity_usd only $199k — impact eats 71% of gross PnL; edge exists only at toy scale (hard blocker); exposure 413% gross

Backtest Review

avg_trade_return_pct 0.114% is below the ~0.30% round-trip the hypothesis says it must clear

Backtest Review

Plausibility red flag: +57% final-day return on a delta-neutral book, return_kurtosis 59.2, end_unrealized_pct -9.28 — suspected stale-leg/end-of-backtest artifact; the claimed 0.5-1.5% SOL basis is implausibly large for a same-asset spread

Backtest Review

L45 market-neutral cross-venue pairs family (0/84) — same signature as the ETH/BTC, OP/ARB, LTC-BCH pairs abandoned this session

Iteration History

SolSpotPerpBasisDislocationHarvestNeutral1H

Iteration History

Verification failed (Layer 4 — QA review): - STRUCTURALLY UNMEASURABLE — empty holdout by construction. The sandbox placed only 6 trades over 363 days (avg holding ~29 days). The Phase-3 15-day holdout is near-certain to contain ZERO trades (HARD zero-trades gate failure) and the walk-forward OOS windows will be nearly empty. 6 trades is far below the ~100-trade floor: Sharpe -0.24, PSR 0.385, CI [-1.89, 1.46], and total_return +0.016% is indistinguishable from zero. The funding/exit code is correct — this is a hypothesis-design flaw that would burn the full 3-phase optimization for a near-certain hard-gate failure. - The SOL premise (0.5-1.5% premiums, larger than BTC/ETH) is falsified in the evaluable window, per the developer's own measurement: SOL basis sd was ~30 bps in 2020-2022 but compresses to 7.7/6.0/2.9/1.8 bps by 2026, never positive in 2026. The larger dislocation that justified choosing SOL has evaporated in exactly the recent regime the sandbox/OOS/holdout evaluate, so the trade count is still ~6/year at break-even. The developer concedes no parameterisation delivers a measurable recent-window sample because the dislocation is below the 30 bps two-leg fee. - Family-level dead end. Third cross-venue basis-reversion attempt to hit the same wall: BTC perp-perp (sub-$60K capacity, ~1-bar latency artifact), ETH spot-perp iters 1-2 (unmeasurable/dead-carry), now SOL spot-perp (unmeasurable/compressed basis). The mechanism only pays when the recent dislocation or funding exceeds the ~30 bps two-leg cost, which it does not on any liquid Binance symbol checked.

Iteration History

Verification failed (Layer 3 — sandbox backtest): smoke test exceeded the 300s wall-clock limit. 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).

Iteration History

Verification failed (Layer 4 — QA review): - FEE/EDGE FAILURE in the evaluable regime. The iteration-3 performance fix works and the backtest now runs, but the result is negative and sub-fee: total_return -0.24%, Sharpe -0.64, avg_trade_return_pct 0.088% (below the 0.15% floor and far below the ~0.30% two-leg round trip), PF 0.98, PSR 0.221 over 30 trades. The recent regime — which the sandbox/OOS/holdout all evaluate — is the dead-carry regime established across the prior spot-perp basis reviews, and the book loses here. - Still below the measurability floor despite the basket. Trade count rose from SOL-alone's 6 to 30 over 363 days — under the ~100-trade floor, with a sparse-to-empty 15-day holdout. The high-beta basket did not produce the several-hundred-trade recent-window sample the mechanism needs, because recent SOL/high-beta basis has compressed below the fee (established for SOL in the prior review), so few dislocations clear the hurdle regardless of breadth. - Confirmed dead family — sixth cross-venue basis-reversion result to fail (ETH spot-perp iters 1-2, ETH 7-pair basket, SOL single-symbol, BTC perp-perp iters 1-2, now SOL-led 5-pair basket). Every one: the mechanism only paid in the 2020-2021 high-funding regime; the current regime does not clear the ~0.30% two-leg cost on any liquid Binance name.
Strategy report

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