Skip to content

View original

SpotMajorsBuyTheDipAccumulationBasketLong

Hypotheses

Crypto Majors Spot Buy-the-Dip Accumulation Basket, Long-Only (BINANCE_SPOT, 5 Liquid Majors, Accumulate Names ≥8% Below Their 20-Day High ONLY in a BTC Bull Regime, Sell the Bounce, Pure OHLCV, No Leverage, 3-Parameter)

Hypotheses

A LONG-ONLY, multi-asset spot accumulation strategy on 5 liquid BINANCE_SPOT majors (BTCUSDT, ETHUSDT, SOLUSDT, BNBUSDT, XRPUSDT). It systematizes the 'buy-the-dip in an uptrend' accumulation archetype that underlies the factory's spot/long-carry survivors, and deliberately routes to the UNDER-REPRESENTED spot venue (BINANCE_SPOT 10.4% vs a ≥15% target; BINANCE USD-M is saturated at 72.1%), correctly per the venue rules since it is long-only with no leverage. It is engineered around this session's hard-won data lessons: it uses ONLY OHLCV (the best-surviving tag family, 5%) — NO open interest, NO liquidations, NO alt funding, NO monthly options (every one of which hit a data wall this session). It escapes the 0/213 single-symbol OHLCV no-edge class by being MULTI-ASSET (idiosyncratic dip risk is diversified across 5 names) and, crucially, is MEAN-REVERSION-in-an-uptrend rather than a breakout (the SOL squeeze breakout just died no-edge at PF 0.81 — breakouts on single symbols have no edge here; regime-gated dip-buying is a structurally different bet). Fee-robust by construction: spot 0.20% round-trip vs multi-percent bounce targets, few trades. 3 parameters only, to resist overfit (the 202x killer).

Hypotheses

Iteration 2 makes the smallest possible change to fix the reported failure, which was search-induced overfit, NOT a code or edge defect (the analyst confirmed the edge is real: default-param full-sample Sharpe 2.56, DD 19.65%, sensitivity passed, and 2 of 3 OOS windows were strongly positive ~5). The optimizer sweeps every numeric key in the config's parameters dict over [0.5x, 1.5x] (walk_forward.py / parallel_runner.py objective), so the previous config exposed 8 numeric params and the best-of-N inflation drove deflated_sharpe to 0.015 and the fragile IS-max selection. Fix: the output config's parameters dict now contains ONLY the 3 intended economic params (dip_pct, high_lookback, regime_sma_days), so the optimizer sweeps exactly 3 (verified) — sharply lowering expected-max-by-luck so the deflated-Sharpe/overfit gate should clear and IS/OOS should tighten below 3.0. The structural/risk knobs (max_positions=5, profit_target_pct=6, stop_loss_pct=12, min_notional=10) are held at their existing code defaults and kept out of the config so they can't be swept, and gross_exposure is pinned to the robust 0.72 plateau (default changed 0.90 -> 0.72) — the single cliff parameter whose 0.9+ zone produced the fragile IS spikes the feedback flagged. That gross default is the ONLY code change; the strategy logic, universe, sizing, exits, imports, and venue routing are byte-for-byte identical to the version that passed Layers 1-3 and produced the real edge. If the constrained 3-param search still flags overfit or yields a deeply negative OOS window, that would indicate genuine regime-fragility and the analyst should abandon on attempt 2, per the feedback.

Hypotheses

Post-optimization overfit gates are hard-failed and unwaivable: walk-forward is_overfitted=TRUE (IS 7.93 / OOS 2.26, ratio 3.5 > 3.0) and PBO 0.66 > 0.5. DSR 0.525 << 0.95 and the optimized Sharpe 5.41 ≈ expected-max-by-luck 5.30 — the selected config is indistinguishable from the best of 225 noise draws. Optimization attempt 2 of 2 is exhausted, and the iter-1 targeted fix (collapse search 8→3 params, pin gross_exposure to the 0.72 plateau) was correctly applied yet still did NOT clear the gate — the overfit is inherent to the optimizer selecting over a wide IS-Sharpe surface (trial Sharpes 2.4→10.5), not a specific bad parameter, so no further parameter feedback can lower PBO. Matches the known abandoned overfit pattern (BTC Spot 4H Trend-Filtered Pullback / Buy-the-Dip-in-Uptrend). NOTE FOR RESEARCH LEAD: this is NOT a dead mechanism — the DEFAULT-param configuration (Sharpe 2.60, DD 15.8%, holdout 2.93, OOS all-positive) is promotable-quality and the failure is purely optimizer overfitting via best-of-N inflation. If this archetype is resubmitted, constrain the optimizer (far fewer trials and/or narrow parameter ranges around the default plateau) so expected-max-by-luck drops below the strategy's true Sharpe; the dip-buying edge itself generalizes.

Implementation

Long-only spot buy-the-dip accumulation basket over 5 liquid BINANCE_SPOT majors (BTC, ETH, SOL, BNB, XRP) on daily bars. It accumulates any name trading >= dip_pct below its trailing high_lookback-day high, but only while BTC is above its regime_sma_days SMA (bull regime), equal-weight across up to 5 names, and sells the bounce on a +6% target, a reclaim of the rolling high, a -12% stop, or a regime flip to cash. Pure OHLCV, no leverage, long-only. Only 3 parameters are tunable (dip_pct, high_lookback, regime_sma_days); the structural/risk knobs are fixed at robust defaults, with gross exposure pinned at 0.72 (the robust plateau, away from the 0.9+ sensitivity cliff).

Verification Results

Optimizer/analyst: confirm the 3-param walk-forward clears deflated-Sharpe/IS-OOS gates; per the developer's note, abandon if it still flags overfit or a deeply negative OOS window.

Verification Results

Iter-2 anti-overfit fix correctly applied and is the RIGHT remedy (contrast the 200-SMA cells' metrics-gaming churn): config exposes ONLY 3 params (dip_pct, high_lookback, regime_sma_days) so the optimizer sweeps 3 not 8, and gross_exposure pinned to 0.72 (off the 0.9+ IS-spike cliff). Matches the hypothesis's '3 parameters'; strategy logic byte-for-byte the analyst-verified version. Open question (does 3-param search clear DSR/IS-OOS gate) is what optimization exists to test.

Verification Results

DIAGNOSTIC backtest (unlike the low-turnover 200-SMA cells): vol 39.87% plausible, data_days 216 with 324 trades = dense return series, metrics_reliable, Sharpe CI lower bound positive (0.58). exposure_pct 105% is mark-to-market artifact (unlevered CASH, avg_position 14.34% = 0.72/5, correct); frozen-signal warnings benign.

Backtest Review

Iterate feedback correctly applied: search collapsed to the 3 economic params (dip_pct, high_lookback, regime_sma_days), gross_exposure pinned to the robust 0.72 plateau, structural/risk knobs fixed out of the config

Backtest Review

Clean, significant base: Sharpe 2.60 with sharpe_ci_low 0.583, Sortino 4.02, max_drawdown 15.85% (improved), PF 1.39, win_rate 62.3%

Backtest Review

Healthy non-artifact distribution: skew 0.108, kurtosis 6.31, end_unrealized_pct 0.0; 324 trades over 216 trade-days; avg_trade_return_pct 2.26% above spot fee floor

Backtest Review

The tightened 3-param search should clear the deflated-Sharpe/overfit gate that failed attempt 1 by removing the gross≈0.99 fragile region that produced the -9.06 OOS window

Backtest Review

information_ratio -0.73 vs the equal-weight basket — gives up upside for drawdown control; the ANALYZING stage must confirm alpha justifies it

Backtest Review

Recent softness (2025 -4.2%, 2026 -4.0%, rolling Sharpe negative in late 2025) — walk-forward should verify the edge generalizes beyond 2021/2023

Backtest Review

max_consecutive_losses 12 — a real losing streak to stomach

Analysis

Genuine underlying edge: default-param backtest Sharpe 2.60, max_drawdown 15.8%, PF 1.39, holdout PASSED (2.93, ratio 1.295), return_skew 0.09 (non-lottery)

Analysis

OOS now all-positive across 3 windows [1.03, 3.47, 2.29], avg 2.26 — iter-1 fix removed the earlier -9.06 blowup

Analysis

avg_trade_return_pct 2.26% (default) / 4.06% (optimized) — comfortably above the spot fee floor; NOT a fee-edge death

Analysis

Under-represented BINANCE_SPOT venue, correct long-only-no-leverage routing

Analysis

HARD GATE: walk-forward is_overfitted TRUE — IS 7.93 vs OOS 2.26 (ratio 3.5 > 3.0)

Analysis

HARD GATE: PBO 0.66 > 0.5 — parameter selection more likely than not overfit

Analysis

DSR 0.525 << 0.95 and optimized Sharpe 5.41 ≈ expected-max-by-luck 5.30 — selected config indistinguishable from best-of-225 noise

Analysis

Optimizer cannot pin a stable param set: IS trial Sharpes range 2.4→10.5, inflating best-of-N selection

Analysis

information_ratio -0.72 vs equal-weight basket — does not beat simply holding the majors

Analysis

Do NOT promote (hard overfit gate) and do NOT abandon — the WF OOS mean of 0.277 is misleading: the three OOS windows are [-9.06, 5.06, 4.83], so 2 of 3 are strongly positive (~5) and the mean is dragged down entirely by one window where the IS-overfit params blew up. The default-param full-sample backtest showed no such collapse (Sharpe 2.56, DD 19.65%, sensitivity passed), so the edge is real; the overfit is search-induced. Re-run optimization with a TIGHTER search: 1) COLLAPSE THE SEARCH TO THE INTENDED 3 ECONOMIC PARAMS. The hypothesis promises 3 tuned params but the optimizer swept 8 (dip_pct, min_notional, high_lookback, max_positions, stop_loss_pct, gross_exposure, regime_sma_days, profit_target_pct) over 225 trials — that best-of-N inflation is the direct cause of deflated_sharpe=0.015 (expected-max-by-luck 9.56 > optimized 5.93) and the fragile IS-max selection. Tune ONLY dip_pct, high_lookback, regime_sma_days. FIX max_positions=5, stop_loss_pct=12, profit_target_pct=6, min_notional at their defaults. 2) PIN gross_exposure OUT OF THE FRAGILE ZONE. The sensitivity heatmap shows gross 0.99 produces the IS spikes (5.8-6.5) and 1.08 collapses to 0 — this is the one cliff parameter. Fix gross_exposure at ~0.72 (robust plateau) or constrain to a narrow [0.6, 0.8] band; do NOT let it reach 0.9+. 3) SELECT FOR OOS ROBUSTNESS, NOT IS MAX. The current pick (dip_pct 0.118, high_lookback 15, gross 0.643, regime_sma 135, stop 16, profit 8.4) maximized IS (10.7) and caught a -9.06 OOS window. With the constrained 3-param search over the robust plateau, target an IS/OOS ratio < 3.0 and a positive worst-case OOS window. The two strong OOS windows (5.06, 4.83) show the edge generalizes when params aren't overfit. 4) TARGET: fewer params/trials sharply lowers expected-max-by-luck, so deflated_sharpe should clear and the overfit flag should clear. If after this constrained search the strategy STILL flags overfit OR any OOS window is deeply negative, abandon on attempt 2 — that would indicate the dip-buy edge is genuinely regime-fragile rather than fixable.

Outcome Summary

SpotMajorsBuyTheDipAccumulationBasketLong systematized the buy-the-dip-in-an-uptrend archetype on 5 spot majors, regime-gated to BTC bull markets and deliberately kept pure-OHLCV, low-parameter, and routed to the under-represented spot venue. It was one of the strongest candidates of the batch: the default-parameter backtest earned an optimize verdict with a clean Sharpe 2.60 and 15.8% drawdown, and the optimized run's holdout passed with all-positive out-of-sample windows. But the optimizer, searching a wide IS-Sharpe surface where trial Sharpes ranged 2.4 to 10.5, tripped the unwaivable overfit gates — is_overfitted TRUE, PBO 0.66, and a deflated Sharpe of 0.525 against a 5.30 luck bar — so the analyst abandoned it on the second and final optimization attempt. Crucially the analyst flagged this as not a dead mechanism: the default configuration is promotable-quality and the dip-buying edge generalizes, so a resubmission with a tightly constrained optimizer could clear the gate.

Outcome Summary

The dip-buying-in-an-uptrend edge is genuinely promotable at its default parameters (Sharpe 2.60, 15.8% drawdown, holdout passing, all-positive OOS) — the abandonment was pure best-of-N selection inflation, so the fix is to constrain the optimizer (far fewer trials or narrow ranges around the default plateau) so the expected-max-by-luck bar drops below the strategy's true Sharpe rather than to change the mechanism.

Outcome Summary

The analyst returned 'abandon' at the post-optimization ANALYZING stage on hard, unwaivable overfit gates — is_overfitted TRUE, PBO 0.66 > 0.5, and deflated Sharpe 0.525 << 0.95 — on the second and final optimization attempt: the iteration-1 fix (collapsing the search from 8 to 3 params and pinning gross_exposure) was correctly applied but still could not clear the gate, because the overfit came from the optimizer selecting over a wide IS-Sharpe surface (trial Sharpes 2.4-10.5), not a single bad parameter.

Outcome Summary

A long-only, multi-asset spot buy-the-dip accumulation basket on 5 liquid Binance spot majors (BTC, ETH, SOL, BNB, XRP) that accumulated names trading ≥8% below their 20-day high — but only while BTC was above its regime SMA (a bull regime) — and sold each on a bounce, reclaim, stop, or regime flip; pure OHLCV, no leverage, with only 3 economic parameters exposed to the optimizer.

Outcome Summary

The base backtest was clean and strong — Sharpe 2.60 (sharpe_ci_low 0.583), max drawdown 15.85%, profit factor 1.39, 62.3% win rate over 324 trades, healthy non-lottery distribution, avg_trade_return_pct 2.26% — and it earned an 'optimize' verdict. Optimization then showed a genuine but overfit-flagged edge: the holdout passed (Sharpe 2.93, ratio 1.295) with all three OOS windows positive (avg 2.26), but is_overfitted was TRUE (IS 7.93 vs OOS 2.26, ratio 3.5), PBO 0.66, deflated Sharpe 0.525, and the optimized Sharpe 5.41 sat at the best-of-225 luck bar of 5.30, with a negative information ratio (-0.72) vs the equal-weight basket.
Strategy report

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