DailyDonchianBreakoutTrendLongShortBasket
Hypotheses
Binance USD-M Daily Donchian Channel-Breakout Trend-Following Long-Short Basket (Established Majors, Turtle Entry/Exit, ATR-Trailed, Risk-Parity)
Hypotheses
A long-short, daily trend-following basket across ~10 established, confirmed-full-history Binance USD-M majors (BTC, ETH, SOL, BNB, XRP, DOGE, ADA, LTC, LINK, BCH) using a CHANNEL-BREAKOUT (Donchian) signal — the one trend primitive distinct from the moving-average momentum that all the factory's validated baskets use. Each asset goes LONG when it breaks above its prior N-day high and SHORT when it breaks below its prior N-day low. This sits squarely inside the ONLY validated edge in this factory: the analyst conclusively established that DAILY trend on majors is the sole profitable form (the daily vol-targeted basket: +392% / Sharpe 2.59), that short-horizon single-bar signals fail in BOTH directions (15m breakout -98.5%, 15m fade -99.96%, 4H volume-climax fade -97.7%) because of cadence, and — explicitly — that 'the SAME trend/breakout primitive WORKS on DAILY bars because daily trends persist.' A daily Donchian breakout is therefore the validated-cadence form of breakout, NOT the refuted intraday one. It is the data-safe salvage of the Hyperliquid Donchian basket that died purely on HL data: restricting to established majors (broad-alt baskets fail on data_unavailable) makes it backtestable. It avoids every refuted class (no intraday, no mean-reversion, no basis/funding/options/COIN-M/HL/liquidations) and is distinct from the existing single-asset, long-only Donchian breakouts (Ada/Bnb) by being a diversified LONG-SHORT basket. Long-short improves the 87%-long skew; daily cadence keeps fees trivial; few parameters resist overfitting.
Hypotheses
Iteration 2 fix for the Layer-2 synthetic failure. The reported TypeError (`super(type, obj): obj must be an instance or subtype of type`) came from the zero-arg `super().on_extra_bar(bar)` call inside the `on_extra_bar` override: under Layer-2's `_StrategyProxy`, the bound instance is the proxy, which is not an instance of this class, so `super()`'s implicit `__class__`/instance resolution fails. The base `FactoryStrategy.on_bar()` already buffers the extra bar into `self._extra_bars` before invoking the `on_extra_bar` hook (base_template.py lines 264-268), so the super call was pure dead weight. Removing it (leaving only `self._manage_all()`) is the smallest change that fixes the failure while preserving all signal, sizing, and exit logic that already passed Layer 1. No imports, class structure, or trade-generation logic were touched, so no earlier passing layer regresses.
Hypotheses
Failed deflated Sharpe: DSR=0.21 (vs 0.95 bar), with the optimized Sharpe 0.861 BELOW the 225-trial expected-max luck bar of 1.068 (is_significant=false, PBO 0.5476>0.5) — after multiple-testing correction the selected config is statistically indistinguishable from best-of-N noise. Two independent forward gates concur: the walk-forward is is_overfitted=TRUE (avg IS 1.361 collapsing ~5x to avg OOS 0.276, OOS windows [-1.58, 1.74, 0.67] with one deeply negative), and the HOLDOUT FAILED (holdout_sharpe 0.071 vs WF-OOS 0.276, ratio 0.256 < 0.70) — the untouched recent window has essentially no edge, consistent with genuine 2025-2026 decay (2025 -26%, rolling Sharpe -8 to -10). The clean sensitivity grid (0 cliffs) and PSR 0.9996 measure consistency, not significance — the textbook PSR-vs-DSR trap — and cannot override the deflation, PBO, is_overfitted, and negative-holdout failures. Not iterate (attempt 1 of 2): sensitivity is already a flat 0-cliff plateau (optimizer on its ceiling) and the entire best-of-225 surface sits below the luck bar with a near-zero holdout, so there is no robust region to tune toward — a second sweep re-selects the same sub-significant config. Not revise_hypothesis: daily trend on majors is already the validated/promoted family (daily vol-targeted basket, Sharpe 2.59), so this Donchian-breakout variant on the same majors is a construction/variant failing deflation, not a proven mechanism stranded on a dead target. FAILURE PATTERN: a clean, low-fee, plausibly-grounded daily channel-breakout long-short basket on majors produces a genuine but modest, outlier-carried trend edge (Sharpe 0.86, kurtosis 118) that cannot clear best-of-225 deflation — DSR 0.21 with the selected Sharpe below the 1.07 luck bar, an is_overfitted walk-forward (avg OOS 0.28), and a near-zero holdout (0.07, ratio 0.256). The Donchian-breakout primitive does not add promotable edge over the already-validated moving-average daily-trend basket; a passing sensitivity grid and PSR~1.0 do not rescue a variant that fails deflated Sharpe and its forward holdout.
Implementation
Daily long-short Donchian channel-breakout trend-following basket across 10 established Binance USD-M majors (BTC, ETH, SOL, BNB, XRP, DOGE, ADA, LTC, LINK, BCH). Each asset enters LONG on a break above its prior entry_lookback-day high and SHORT on a break below its prior entry_lookback-day low (Turtle entry). Exits on whichever fires first: the opposite exit_lookback-day channel (Turtle exit) or an ATR trailing stop (atr_stop_mult x ATR off the favorable extreme). Risk-parity sizing (each position risks risk_frac of equity over its ATR stop), bounded by per-position and portfolio gross caps.
Verification Results
Verification failed (Layer 2 — synthetic scenarios):
Parameters used: ['assets', 'risk_frac', 'atr_period', 'min_notional', 'atr_stop_mult', 'exit_lookback', 'max_hold_days', 'qty_precision', 'entry_lookback', 'gross_cap_frac', 'per_position_frac', 'default_qty_precision']
Check that __init__ sets all attributes from self.parameters.get().
- steady_uptrend: TypeError: super(type, obj): obj must be an instance or subtype of type (bar timestamp: 1735689600000)
- steady_downtrend: TypeError: super(type, obj): obj must be an instance or subtype of type (bar timestamp: 1735689600000)
- flat_ranging: TypeError: super(type, obj): obj must be an instance or subtype of type (bar timestamp: 1735689600000)
- volatility_spike: TypeError: super(type, obj): obj must be an instance or subtype of type (bar timestamp: 1735689600000)
- zero_volume: TypeError: super(type, obj): obj must be an instance or subtype of type (bar timestamp: 1735689600000)
- price_gap: TypeError: super(type, obj): obj must be an instance or subtype of type (bar timestamp: 1735689600000)
Backtest Review
Genuine, functioning edge with a clean trend-follower signature: 37% win rate, 2.4:1 avg-win/avg-loss, positive expectancy (+$945/trade), profit_factor 1.42, +737% total return, Sharpe CI low positive (0.24)
Backtest Review
Trades match the hypothesis: balanced long-short daily breakout book (327 long / 313 short), diversified across 10 established majors — no mechanism mismatch
Backtest Review
Ample sample (640 trades) supports meaningful optimization; clean construction (fees 1.17% of gross, capacity $661M, no leverage/accounting artifact, realized ≈605% with only ~18% open MTM)
Backtest Review
Sits inside the factory's explicitly-validated edge (daily trend on majors, distinct Donchian primitive), improving the 87%-long skew
Backtest Review
Modest Sharpe (0.77) — well below the validated vol-targeted daily sibling (2.59)
Backtest Review
Regime-concentrated in bull-trend years (2021 +246%, 2024 +109%) with weak/negative off-years (2022 -9%, 2025 -29%); high kurtosis 193 / skew 11.6 means a few huge days carry the result
Backtest Review
Painful drawdown behavior: 38% max DD, 31-trade max losing streak, rolling Sharpe -14 to -17 in mid-2025 — deflation/holdout must confirm durability
Analysis
Clean sensitivity surface: 0 cliffs across all 10 parameters, so the modest edge is at least parameter-stable rather than knife-edge.
Analysis
sharpe_ci_low is marginally positive (0.317) and the mechanism (daily channel-breakout trend on majors) is a legitimate, non-degenerate construction with balanced long/short legs (367 long / 346 short optimized).
Analysis
Genuinely diversified, low-fee daily cadence (commission 1.42% of gross, impact 1.62%) — the fee axis is not the problem.
Analysis
Fails deflated Sharpe decisively: DSR 0.21 vs 0.95 bar, optimized Sharpe 0.861 BELOW the 225-trial expected-max luck bar of 1.068 (is_significant=false, PBO 0.548>0.5) — indistinguishable from best-of-N noise.
Analysis
Walk-forward is_overfitted=TRUE: avg IS 1.361 collapses ~5x to avg OOS 0.276 with one deeply negative OOS window (-1.58).
Analysis
Holdout FAILED: holdout_sharpe 0.071 vs WF-OOS 0.276 (ratio 0.256) — the untouched recent window has essentially no edge.
Analysis
Edge is regime-concentrated and outlier-carried (return_kurtosis 118, skew 9; 2021 +196%, 2024/2023 strong, but 2025 -26% with rolling Sharpe running to -8/-10 through 2025-2026) — genuine recent decay, not variance.
Analysis
PSR 0.9996 vs DSR 0.21 is the classic multiple-testing trap; the high headline is best-of-225 selection inflation.
Outcome Summary
Pitched as the validated-cadence form of breakout — a diversified long-short daily Donchian basket on established majors, distinct from the factory's promoted moving-average trend sibling — this strategy produced a genuine trend-follower signature (+737% return, Sharpe 0.77, positive expectancy) and passed the backtest-review gate to earn optimization. But its modest edge was outlier-carried (kurtosis 193, skew 11.6) and regime-concentrated in bull years, and optimization exposed it as statistically fragile: deflated Sharpe 0.21 with the selected Sharpe below the luck bar, an overfitted walk-forward, and a near-zero holdout signaling real 2025-2026 decay. The analyst abandoned it after full optimization, concluding the Donchian primitive adds no promotable edge over the validated daily-trend basket and that a passing sensitivity grid and PSR~1.0 could not rescue a variant failing deflation. It reached optimization and analysis but never advanced to risk review or paper trading.
Outcome Summary
A clean sensitivity grid and a high probabilistic Sharpe measure consistency, not significance — an outlier-carried, regime-concentrated trend edge that cannot clear deflated Sharpe and its forward holdout is the classic PSR-vs-DSR trap, and a Donchian-breakout variant adds no promotable edge over the already-validated moving-average daily-trend basket on the same majors.
Outcome Summary
The analyst issued an 'abandon' verdict at the post-optimization analysis stage: the edge failed deflated Sharpe decisively and was corroborated by two independent forward gates (an overfitted walk-forward and a near-zero holdout consistent with genuine 2025-2026 decay), making the selected config statistically indistinguishable from best-of-225 noise despite a headline PSR of ~1.0.
Outcome Summary
A long-short daily Donchian channel-breakout (Turtle-style) trend-following basket across ~10 established Binance USD-M majors, going long on breaks above the prior N-day high and short on breaks below the prior N-day low, with ATR trailing stops and risk-parity sizing — a breakout primitive distinct from the moving-average momentum of the factory's validated daily-trend basket.
Outcome Summary
The initial backtest showed a genuine but modest trend-follower edge: +737.8% total return, Sharpe 0.77 (CI low 0.24), 640 balanced long/short trades (327 long / 313 short), profit factor 1.42, positive expectancy (+$945/trade), 37% win rate, and 38.4% max drawdown, earning an 'optimize' verdict. After 3-phase optimization the selected config held up on sensitivity (0 cliffs) but failed the robustness gates — deflated Sharpe 0.21 (vs 0.95 bar) with the optimized Sharpe of 0.861 below the 225-trial luck bar of 1.068, walk-forward is_overfitted TRUE (avg IS 1.36 collapsing ~5x to avg OOS 0.276), and a failed holdout (holdout Sharpe 0.071, ratio 0.256).
Backtest and paper results are hypothetical. Trading involves risk of loss.