Skip to content

View translation

SolPerpIndexPremiumOvershootFadeLS5m

Hypotheses

SOL Perp-Index Premium Overshoot Fade, Long-Short (Single-Instrument BINANCE USD-M Perp vs its INDEX, DEEP mark/index Klines, Fade the Perp Back Toward Spot Index When the Basis Dislocates > 0.35% During a Fast Move — Mechanical Convergence ENFORCED by Funding + Arbitrage, a Non-Price Basis Signal — Fast Snapback Hold, Hard Widen-Stop, 2-Parameter)

Hypotheses

A LONG-SHORT, single-instrument strategy on SOLUSDT.BINANCE (USD-M perp) that trades the PERP-vs-INDEX basis dislocation — a genuine NON-PRICE, mechanically-anchored signal — deliberately outside every class this session confirmed dead: L30 (pure-OHLCV = 0/213 → this uses the mark/index BASIS, not price geometry), L29 (no options), L28 (no funding CARRY — this trades the intraday basis EXCURSION, not funding accrual, so it is immune to the funding-level edge DECAY that just killed the negative-funding basket family), and it is not the shallow-metrics/liquidation-feed trap (mark-price and index-price klines are DEEP historical Binance Vision series). Mechanism: during fast moves the leveraged perp OVERSHOOTS its spot index (aggressive takers push the perp above/below the composite index), creating a basis = (perp_mark − index)/index that dislocates transiently; funding (which mechanically pulls the perp toward the index TWAP) plus cross-market arbitrage FORCE the basis back toward zero within minutes. The strategy fades the overshoot: when the perp trades ≥ +0.35% RICH to index, SHORT the perp; when ≥ 0.35% CHEAP, LONG the perp; exit on convergence. This is a mechanically-enforced convergence (not a hopeful price-reversion), the basis is a real non-price feed, and it is a potentially LIVE edge (unlike the decayed funding premium). SOL is chosen because its higher volatility produces meaningfully-sized, fee-clearing basis excursions that BTC/ETH rarely reach. Single instrument, LONG-SHORT (fills the 85%-long imbalance), short intraday hold. 2 core parameters (basis dislocation threshold, convergence-exit threshold).

Hypotheses

ITERATION 3 IS A CONFIG-ONLY FIX. Layer 1 rejected the previous submission with "config.instrument_id and config.bar_type are REQUIRED (got instrument_id=None, bar_type=None)": the code had already cleared static analysis and the synthetic layer and reached the sandbox (which is what its vectorized premium parsing and 5-MINUTE timeframe were for), the config block simply arrived without its two required fields. The smallest fix is exactly that: instrument_id = SOLUSDT.BINANCE and bar_type = SOLUSDT.BINANCE-5-MINUTE-LAST-EXTERNAL - the timeframe this code is calibrated to, since max_hold_bars = 6 encodes the 30-minute intraday snapback cap - with every parameter pinned to the value the code already defaults to. The only code edit is the docstring recording this cause and fix and the measured premium calibration; no signal, entry, exit or sizing logic was touched, so the layers that already passed stay passing. I verified both data dependencies rather than assuming them: SOLUSDT.BINANCE 5-MINUTE bars exist in the catalog, and data/supplementary/premiumIndexKlines/SOLUSDT carries 2.01M rows from 2020-09 at ~1-minute spacing, so every 5-minute decision bar is backed by a fresh premium print. On that real series |premium| is 0.047% at the median, 0.105% at the 90th pct and 0.33% at the 99th - which is why basis_entry stays at the iteration-2 recalibration of 0.15% rather than the title-line 0.35%: 0.35% sits near the 99.5th percentile and would fire only a handful of times per year (unmeasurable), while 0.15% is still above the 90th percentile, ~3x the median basis, and large enough that a full convergence clears the ~0.10% round-trip taker cost. HYPOTHESIS FIDELITY: the mechanism is unchanged - a genuine non-price basis feed, a mechanically-enforced convergence, an intraday EXCURSION trade rather than funding-carry accrual, and genuinely long-short. BINANCE USD-M is the correct venue because the strategy shorts the perp and the perp-vs-index basis only exists there; leverage stays 1.0 because position_frac is 0.5 of equity, so no margin amplification is used or claimed.

Hypotheses

Account liquidated in the first month (total_return -100%, max_drawdown 100%) with negative net expectancy (avg_trade_return_pct -0.147%, profit_factor 6.4e-05, expectancy -$45/trade). The basis-fade has a catastrophic left tail (avg_loss $59.8 vs avg_win $0.01, largest_loss -$2463, skew -12.3, kurtosis 177) — fading transient perp-index overshoots gets run over precisely during the fast moves the thesis targets, and the widen-stop does not cap the tail. L73 single-perp supplementary-gated + L55 single-name fade family (zero survivors); no threshold tuning turns a liquidating, negative-expectancy fade into an edge. Not worth 2 hours of optimization.

Implementation

Long-short, single-instrument fade of the SOLUSDT.BINANCE USD-M perp against its spot index on 5-MINUTE bars. The decision variable is the published mark-vs-index premium (premium_index / premiumIndexKlines close = (perp_mark - index)/index), read as-of each bar close by O(log n) bisection over a numpy array parsed once at construction. When the perp trades >= +0.15% RICH to its index the strategy SHORTS the perp; when it is >= 0.15% CHEAP it goes LONG; it exits when the basis converges back inside 0.03%, on a hard widen-stop if the dislocation grows another 0.15% against the fade, on a 1.2% adverse price move, or after a 30-minute (6-bar) intraday time cap. Convergence is mechanically enforced by funding pulling the perp toward the index TWAP plus cross-market arbitrage, so this is not a hopeful price reversion and the signal is not price geometry.

Verification Results

Verification failed (Layer 1 — config): config.instrument_id and config.bar_type are REQUIRED (got instrument_id=None, bar_type=None). Set both to the hypothesis's instrument, e.g. instrument_id='BTCUSDT.BINANCE', bar_type='BTCUSDT.BINANCE-4-HOUR-LAST-EXTERNAL'.

Verification Results

Let the optimizer sweep basis_entry; confirm ≥100 trades AND avg_trade_return_pct > 0.15%.

Verification Results

Hypothesis headline threshold is 0.35% but code fires at 0.15%; documented recalibration to the measured SOL premium distribution. Structure matches (entry/convergence-exit/widen-stop/time-cap), so allowed magnitude change, not a mismatch.

Verification Results

No fix required; treat the convergence premise as unproven until the full backtest shows positive net expectancy.

Verification Results

Single-leg basis fade with no index hedge — PnL realized only on the perp, so index-driven convergence pays little. Inherent to the single-instrument hypothesis, not a code defect, but weakens the 'mechanically-enforced convergence' claim.

Backtest Review

The premium_index (mark-vs-index basis) feed is a genuine non-price signal and is wired correctly (346 funding events / deep series, 6792 entries submitted), so this is not a data/plumbing defect.

Backtest Review

The account was LIQUIDATED on 2020-10-10: total_return -100%, max_drawdown 100.0%, calmar/recovery -1.0. The backtest never even reached 2021 — equity went to zero in the first month of trading.

Backtest Review

Negative expectancy net of costs: avg_trade_return_pct -0.147% (below zero, not just below the 0.15% fee floor), profit_factor 0.0000639, expectancy -$45.0/trade over 6792 trades.

Backtest Review

Catastrophic left-tail asymmetry: avg_win $0.01 vs avg_loss $59.8, largest_win $1.21 vs largest_loss -$2463, return_skew -12.3, kurtosis 177, tail_ratio 0.0001, omega 0.0. The fade collects tiny convergence wins and eats enormous losses when the basis keeps widening — the widen-stop/price backstop does not cap the tail.

Backtest Review

Decisively bad risk-adjusted metrics: Sharpe -3.36 (CI [-6.59, -2.76], entirely below zero), Sortino -3.35, PSR 0.0, information_ratio -8.34, alpha -41.6.

Backtest Review

This is the L73 single-perp supplementary-gated (premium/basis) directional family (zero survivors) combined with the L55 single-name fade signature — fading intraday basis excursions on a single alt gets adversely selected during exactly the fast moves the thesis targets.

Iteration History

SolPerpIndexPremiumOvershootFadeLS1m

Iteration History

Verification failed (Layer 3 — sandbox backtest): 'SolPerpIndexPremiumOvershootFadeLS1m' object has no attribute 'subscribe_mark_price_updates' Bar type used: SOLUSDT.BINANCE-1-MINUTE-LAST-EXTERNAL, Bars processed: 0 Ensure your strategy produces trades with the given data and parameters.

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

sandbox_timeout: Verification failed (Layer 3 — sandbox backtest): smoke test exceeded the 300s wall-clock limit on a ~20000-bar window (69 days of SOLUSDT.BINANCE-5-MINUTE-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).
Strategy report

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