Skip to content

View original

LinkSpotWeeklyRegimeVolumeConfirmedMomentumLong

Hypotheses

LINK Spot Weekly-Regime-Gated, Volume-Confirmed Daily Momentum, Long-Only (Single-Instrument LINKUSDT.BINANCE_SPOT, 1D Primary + 1W Regime Filter, Participation Confirmation, ATR-Trailing Exit, 3-Parameter)

Hypotheses

A LONG-ONLY, SPOT, single-instrument daily-momentum trend follower on LINKUSDT.BINANCE_SPOT. This is a deliberate FOUR-AXIS pivot away from the XRP dual-timeframe momentum-confluence idea that just collided (and that whole XRP+confluence sub-family has died overfit): (1) VENUE moves from USD-M futures to BINANCE_SPOT — the factory's highest-survival, most under-represented venue (~6% vs a >=15% target); (2) DIRECTION moves from long-short to LONG-ONLY, which is what a CASH spot account can express and what removes the fragile short half that kept whipsawing XRP; (3) MECHANISM moves from two-timeframe SIGN-AGREEMENT (the exact recipe that overfit on XRP) to VOLUME/PARTICIPATION-CONFIRMED momentum — the mechanism actually advancing through the pipeline right now (SolSpotVolumeConfirmedMomentumLong, EthVolumeConfirmedMomentumLS, AvaxConvictionGatedMomentumLS, BnbDualTimeframeTrendConfluenceLS all cleared backtest_review/optimizing); (4) INSTRUMENT moves from XRP to LINK, a deeply liquid 2019-listed name absent from every recent momentum run. LINK is a strong carrier for slow spot momentum: it trends hard on DeFi/oracle-adoption cycles and spends the rest of the time ranging, so a participation-gated daily trend follower sits out the chop and only engages when volume confirms real directional demand. Only 3 free parameters over a coarse grid, directly attacking the overfit/PBO death mode.

Hypotheses

Implements all four pivot axes of the hypothesis. (1) VENUE: BINANCE_SPOT, CASH account, leverage 1.0 - the strategy is long-only, uses no margin and has no funding-based edge, which is exactly the spot routing rule; nothing in the sizing path reads self.config.leverage. (2) DIRECTION: long-only - should_enter can only ever return OrderSide.BUY, and SELL is used solely by the base template to close an existing long. (3) MECHANISM: volume/participation-confirmed momentum, the same construction as the SolSpotVolumeConfirmedMomentumLong sibling that cleared backtest_review - a median (not mean) volume baseline so a prior spike cannot swallow the next genuine surge, with momentum expressed in ATR units so one threshold means the same thing in LINK's calm ranges and its DeFi-cycle expansions. There is no two-timeframe sign-agreement anywhere; the weekly term is a one-sided REGIME GATE, not a second momentum vote. (4) INSTRUMENT: LINKUSDT, a deeply liquid 2019-listed spot pair absent from recent momentum runs. The '1W regime filter' is computed from the daily closes (56-bar average plus its one-week slope) rather than by subscribing to a second 1-WEEK bar leg: it is the identical weekly information, it updates daily instead of once a week, and it keeps the strategy single-leg - no cross-leg alignment barrier and no extra-leg warm-up that could produce zero evaluated bars (the recurring multi-leg verification_loop failure mode). Entry-frequency sanity: on daily LINK the regime gate is up roughly half the time, the 0.75-ATR momentum threshold fires on ~30% of bars and a 1.5x median-volume surge on ~20-25%; the terms are positively correlated, so the joint gate is eligible on ~5% of bars and the up-cross rule converts that into roughly 40-60 round trips over LINK's full history - comfortably above the sandbox's >=1 trade requirement while keeping turnover low enough that the ~0.20% spot round-trip cost is a small fraction of a multi-week, multi-ATR trend leg. Only three parameters are free, with _param_bounds declared and the identical ranges enforced in code, directly attacking the overfit/PBO death mode called out in the hypothesis. Per-bar cost is bounded (index reads over fixed windows plus one bounded sort), and all state is re-derived from the bar buffer with no process-relative counters, so restarts and paper replay are bit-identical.

Hypotheses

Overfit / no-generalization death (NOT fee-edge — per-trade economics clear the spot floor). Four unwaivable HARD gates fail: walk-forward is_overfitted=true with in-sample Sharpe 0.856 collapsing to out-of-sample -3.190 (all three OOS windows deeply negative: -3.14 / -3.93 / -2.50), OOS Sharpe <= 0, PBO 0.7037 > 0.5, and the holdout carries only 3 trades (< 10). Robustness confirms best-of-N noise: deflated_sharpe 0.0082 << 0.95, is_significant=false, Sharpe CI [-0.043, 1.348] straddles zero, and it does not survive programme-level FDR (keeps 3 of 240, candidate_p 0.9918). Per the overfit-vs-dead-premise rule, high-IS/negative-OOS is ABANDON not revise: the sensitivity surface is flat (~0.49 everywhere, no cliffs, no untried robust region), so there is nothing to tune toward, and reframing the same slow spot-momentum mechanism onto another config just overfits again — it already has, with the LINK momentum/confluence/trend-participation family dying repeatedly (LINK dual-TF confluence overfit, LINK trend-participation risk_reject at 94% DD, LINK funding-crowding fee_edge, LINK HL confluence, LINK 4H volume-breakout no_edge at -64%). The strategy is also structurally too slow to validate: 26 trades over 6.7 years, oos_vault flagged UNDERPOWERED (~5 expected trades), so optimizing over ~26 trades only curve-fits noise. Failure pattern: overfit / no-generalization (single-name spot momentum).

Implementation

Long-only, single-instrument daily trend follower on LINKUSDT.BINANCE_SPOT (CASH, leverage 1.0). It holds LINK only when three conditions coincide on the same daily series: (1) a WEEKLY UPTREND REGIME - the close is above the 8-week (56 daily bar) moving average and that average is no lower than one week ago; (2) DAILY MOMENTUM - the mom_lookback-day price change measured in ATR units is at least entry_thresh_atr; and (3) PARTICIPATION CONFIRMATION - the bar's volume is at least vol_surge_mult times the median volume of the prior 60 bars. The signal returned every bar is the continuous participation-weighted momentum mom_atr * min(1, participation); the regime and surge gates live in should_enter, so the signal never flatlines. Entry requires an UP-CROSS of the threshold (previous bar not eligible) so a multi-day confirmed uptrend cannot churn round trips. Exits are structural: an ATR trailing stop at trail_atr_mult ATRs below the best close since entry (seeded at the entry price), and a weekly-regime break when the close falls exit_hyst_atr ATRs below the regime average. Sizing is risk-first - equity * risk_pct / (trail_atr_mult * ATR) - capped at 95% of equity notional, floored at LINK's 0.01 step and the $10 spot minimum. Exactly three tunable parameters (mom_lookback, vol_surge_mult, trail_atr_mult) with declared bounds; everything else locked.

Verification Results

No change required; keep the override intentional. If the base does not actually call this override, warm-up could be shorter than intended, but the internal _evaluate() guards (returning None until every window is filled) make entries safe regardless.

Verification Results

min_bars_required(self) overrides a framework method (flagged by static analysis as base_shadow). This appears deliberate and correct here — the override returns a value derived from the strategy's own window lengths (regime_len + slope_lag, vol_window, atr_period, mom_lookback) so warm-up is sized to the actual indicators. Confirmed the base template consumes an override of this method for warm-up gating.

Verification Results

Turnover is intentionally very low: the sandbox produced only 23 trades over ~2398 days, with win_rate 0.26 (trend-follower profile) and the calm vol tercile slightly negative (-2.64%, Sharpe -0.20). The joint regime+surge+cross gate is restrictive, so the full-history sample may sit near the lower end of the ~40-60 round trips the hypothesis projects. This is not a correctness defect — the code faithfully implements the edge — but the analyst should confirm the full backtest yields a statistically usable trade count before trusting the metrics, since a sub-~100-trade sample struggles to distinguish edge from noise.

Backtest Review

Trades faithfully implement the hypothesis: 27 long-only trades, 0 shorts, ~32-day holds on BINANCE_SPOT — a clean regime+surge-gated daily trend follower, not a churner.

Backtest Review

Classic trend-following signature with real edge: PF 2.66, total_return +63%, avg_win $14.4k vs avg_loss $1.9k, low 0.26 win rate expected for this style.

Backtest Review

Per-trade edge enormous vs cost: avg_trade_return_pct 17.4% of notional, commission only 0.97% of gross — nowhere near fee-fragile on the expensive spot venue.

Backtest Review

Genuinely selective, not buy-hold beta: beta 0.096, exposure 32%, max_DD 19.7% (well under the L49 <40-trade/>50%-DD trap); on the favorable spot volume-confirmed-momentum class currently advancing.

Backtest Review

Deliberately small 3-parameter coarse-grid surface directly targeting the overfit/PBO death mode.

Backtest Review

Only 27 trades over 7.6 years — below the ~40-60 projected. A 3-window walk-forward gets ~9 trades/window and the holdout ~5, so the optimization will be statistically underpowered and deflated-Sharpe/holdout is the real hurdle ahead.

Backtest Review

Sharpe 0.52 is modest; alpha slightly negative (-0.016) and information_ratio -0.91 vs an extremely bullish LINK buy-hold — the risk-adjusted headroom over the benchmark is thin.

Backtest Review

Calm vol tercile is negative (-2.2%); most of the return comes from the stressed tercile (+48.5%), so the edge is concentrated in a few big trend legs.

Analysis

Trades faithfully implement the hypothesis: 26-27 long-only spot trades, 0 shorts, ~32-day holds, regime+surge-gated — a clean, low-turnover trend follower.

Analysis

Sensitivity grid is flat with zero cliff parameters (~0.49 Sharpe everywhere), and per-trade economics clear the spot fee floor by a wide margin (multi-week holds, no fee-fragility).

Analysis

Catastrophic out-of-sample collapse: walk-forward is_overfitted=true with IS Sharpe 0.856 falling to OOS -3.19, and ALL three OOS windows deeply negative (-3.14 / -3.93 / -2.50).

Analysis

PBO 0.704 > 0.5 — parameter selection is more likely than not overfitting.

Analysis

Deflated Sharpe 0.008 << 0.95, is_significant=false, Sharpe CI [-0.043, 1.35] straddles zero, fails programme-level FDR (candidate_p 0.9918, keeps 3 of 240).

Analysis

Holdout only 3 trades (< 10 min) — forward window is statistically empty; oos_vault flagged UNDERPOWERED (~5 expected trades) — the strategy is structurally too slow (26 trades / 6.7 years) to validate out-of-sample.

Analysis

Flat sensitivity grid combined with uniformly negative walk-forward OOS means the in-sample Sharpe is a fit to favorable paths, not a robust parameter region to tune toward.

Analysis

Benjamini-Hochberg at q=0.10 over 240 programme candidates keeps 3. A candidate that does not survive here is not distinguishable from the programme's own noise, however good its individual statistics look.

Outcome Summary

LinkSpotWeeklyRegimeVolumeConfirmedM-9cf54908b9

Outcome Summary

Full story captured in the file.

Outcome Summary

26 trades over 6.7 years is too slow to validate OOS — optimization only curve-fits noise.

Outcome Summary

Abandoned at ANALYZING on overfit/no-generalization: is_overfitted=true, OOS Sharpe ≤ 0, PBO 0.70, holdout 3 trades, deflated Sharpe 0.008.

Outcome Summary

A long-only spot daily-momentum trend follower on LINKUSDT.BINANCE_SPOT that only engaged when a weekly uptrend regime, positive ATR-scaled daily momentum, and above-median volume participation all aligned.

Outcome Summary

Initial backtest: 27 long trades, +63.2% return, Sharpe 0.52, PF 2.66, 19.7% max DD; optimized to +99.1% and Sharpe 0.69, but walk-forward IS Sharpe 0.856 → OOS -3.19.
Strategy report

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