Skip to content

View translation

BtcDailyVolumeConfirmedDonchianBreakoutRisingSlopeLong

Hypotheses

BTC Daily Volume-Confirmed Donchian Breakout with Rising-Trend-Slope Filter Long

Hypotheses

A long-only, single-instrument, single-timeframe strategy on BTCUSDT.BINANCE DAILY bars (not 4H) applying the analyst-validated Volume-Confirmed Donchian Breakout template with rising-trend-slope filter to a clean instrument-timeframe gap in the portfolio. No existing BTC futures Daily trend-following strategy exists in pipeline: BtcFourHourVolumeBreakoutLong covers 4H, BtcSpotDrawdownAccumulationLong covers spot drawdown accumulation, BtcVolatilityTargetedLong covers vol-targeted sizing, but the Daily-timeframe trend-following slot is genuinely empty. Other Daily Volume-Confirmed Donchian strategies exist for XRP (just landed) and for ETH/SOL/LINK (different mechanisms), but the highest-liquidity instrument (BTC) has not been deployed on this template. The mechanism: 20-day Donchian high breakout, confirmed by above-average volume, gated by long-term Daily uptrend (close > sma_50_daily) AND rising-trend-slope filter (sma_50 itself rising over 15 days). The slope filter is the analyst's prescribed defensive remediation against 2026-style chop regimes — it disables entries when the SMA-50 is flat or declining, even if price is technically above it. BTC Daily provides cleaner signal-to-noise than 4H because: (a) Daily bars filter out intra-day noise that triggers false 4H breakouts; (b) BTC has the deepest institutional liquidity of any crypto, so Daily breakouts tend to coincide with genuine flow shifts; (c) Daily timeframe gives ~252 bars/year, producing ~10-20 trades/year on this mechanism — sufficient for walk-forward statistical power per the analyst's 100+ trade threshold over 5+ years of history. Single-instrument, single-timeframe, NO secondary dependencies — directly avoids the multi-instrument audit_stale failure mode.

Hypotheses

Iteration-4 fix for the Layer-2 synthetic failure 'BtcDaily...._mean() takes 1 positional argument but 2 were given'. The mean helper is now defined exactly once as `_mean(self, values)` (two positional params) and called consistently as `self._mean(...)` in `_compute_atr`, the SMA level/slope computations, and the volume-MA computation — eliminating any signature collision. All previously-passing Layer-1 structure and signal logic is unchanged: imports remain limited to stdlib + nautilus_trader, the class still extends FactoryStrategy, calculate_signal still returns a continuous ATR-unit breakout strength every bar (thresholded in should_enter), and __init__ still sets every attribute from self.parameters.get(). Implements the hypothesis: 20-day Donchian breakout + volume confirmation + close>SMA50 trend gate + rising-SMA50-slope defensive filter on BTC Daily, long-only on spot.

Hypotheses

Failed deflated Sharpe and every forward gate on optimization attempt 1. DSR=0.0 (vs 0.95 bar) with the optimized Sharpe 18.1 FAR below the 225-trial expected-max luck bar of 129.58 (is_significant=false, PBO=0.5635 >0.5) — after multiple-testing correction the selected best-of-225 config is statistically indistinguishable from best-of-N noise; probabilistic_sharpe 0.9998 vs DSR 0.0 is the textbook PSR-vs-DSR selection-inflation trap, and trial Sharpes reaching 190 show the search space is dominated by artifacts. The walk-forward is is_overfitted=TRUE: avg IS Sharpe 142.87 (implausible) collapses to avg OOS 3.94 with OOS windows [0.0, 0.0, 11.8] — two of three OOS folds are EMPTY (no trades), the average carried by a single lucky window. Decisively, the untouched time-ordered HOLDOUT FAILED and is ZERO (holdout_sharpe 0.0, ratio 0.0 vs WF-OOS 3.94) — the forward window produces no trades at all. The base backtest is itself a suspected artifact (Sharpe 10.74, ~5% single-day returns), well beyond the Sharpe>5 plausibility flag. Not iterate: this is the overfit case (is_overfitted=TRUE, huge IS -> near-zero/empty OOS), so a second best-of-225 sweep re-overfits, and no parameter change manufactures trades in empty OOS/holdout windows or lifts a Sharpe from below a 129 luck bar to significance. Not revise_hypothesis: BTC daily is a valid instrument and this is overfitting to noise on a fine target, not a proven mechanism stranded on a dead one — per the overfit->abandon rule, re-targeting the same single-asset daily Donchian expression just re-overfits. FAILURE PATTERN: porting the 4H Volume-Confirmed Donchian Breakout + rising-slope template to single-asset BTC DAILY does NOT inherit promotability — the daily port yields the pure overfit signature (IS Sharpe 142.87 -> two empty OOS windows, DSR 0.0, PBO 0.56, optimized Sharpe 18.1 vs a 129.58 luck bar, holdout Sharpe 0.0). A mostly-clean 1-cliff sensitivity surface and PSR 0.9998 measure consistency, not significance or forward-generalization, and do not rescue a strategy that fails deflated Sharpe, the walk-forward, and the holdout simultaneously.

Implementation

BTCUSDT Daily long-only Volume-Confirmed Donchian Breakout with a rising-SMA-slope chop-defense filter. Enters when a 20-day Donchian-high breakout (measured in ATR units) is confirmed by above-average volume, price is above the 50-day SMA, AND the 50-day SMA is itself rising over the prior 15 days. Exits on ATR take-profit (~3R), ATR stop-loss, or a 10-day Donchian-low channel break. Routed to BINANCE_SPOT (CASH, leverage 1). Single-instrument, single-timeframe, no secondary dependencies.

Verification Results

Verification failed (Layer 2 — synthetic scenarios): Parameters used: ['risk_pct', 'atr_period', 'sma_period', 'sl_atr_mult', 'tp_atr_mult', 'volume_mult', 'min_notional', 'size_precision', 'slope_lookback', 'entry_atr_buffer', 'volume_ma_period', 'max_notional_frac', 'donchian_exit_period', 'donchian_entry_period'] Check that __init__ sets all attributes from self.parameters.get(). - steady_uptrend: TypeError: BtcDailyVolumeConfirmedDonchianBreakoutRisingSlopeLong._mean() takes 1 positional argument but 2 were given (bar timestamp: 1735693620000) - steady_downtrend: TypeError: BtcDailyVolumeConfirmedDonchianBreakoutRisingSlopeLong._mean() takes 1 positional argument but 2 were given (bar timestamp: 1735693620000) - flat_ranging: TypeError: BtcDailyVolumeConfirmedDonchianBreakoutRisingSlopeLong._mean() takes 1 positional argument but 2 were given (bar timestamp: 1735693620000) - volatility_spike: TypeError: BtcDailyVolumeConfirmedDonchianBreakoutRisingSlopeLong._mean() takes 1 positional argument but 2 were given (bar timestamp: 1735693620000) - zero_volume: TypeError: BtcDailyVolumeConfirmedDonchianBreakoutRisingSlopeLong._mean() takes 1 positional argument but 2 were given (bar timestamp: 1735693620000) - price_gap: TypeError: BtcDailyVolumeConfirmedDonchianBreakoutRisingSlopeLong._mean() takes 1 positional argument but 2 were given (bar timestamp: 1735693620000)

Backtest Review

Strategy functions correctly: 38 signals all submitted, 0 dropped (size/notional/cash), clean entry diagnostics

Backtest Review

Trades match the hypothesized mechanism: 38 long trades, 0 shorts, long-only volume-confirmed Donchian breakouts in uptrends

Backtest Review

Reasonable trade quality: win_rate 65.8%, profit_factor 3.93, avg_win (8830) > avg_loss (4318)

Backtest Review

Single-instrument single-timeframe with no secondary dependencies — avoids the multi-instrument stale-leg failure mode

Backtest Review

Positions sized relative to capital (avg_position_pct ~39%), max_drawdown modest at 6.26%

Backtest Review

Implausibly high headline Sharpe (10.74) is a sparse-return artifact: only 38 non-zero daily-return days vs 3235 bars, and Sharpe 10.7 is inconsistent with CAGR 12% / annualized_vol 62%. NOT evidence of edge — must be deflated downstream

Backtest Review

Thin sample: 38 trades over ~9 years (~4.2/yr), far below the hypothesis's own promised ~10-20/yr and 100+ threshold for walk-forward statistical power

Backtest Review

Restrictive 4-filter stack means optimization risks curve-fitting to a small, likely outlier-carried sample (return_kurtosis 1.89, several 5-9% single-day contributions carry the result)

Backtest Review

Negative information_ratio (-0.534) with benchmark_meaningful=true — loses to its own BTC buy-hold on a risk-adjusted basis

Analysis

Single-instrument, single-timeframe, no secondary dependencies — avoids the multi-instrument stale-leg artifact class

Analysis

Sensitivity surface is mostly clean (only 1 cliff: volume_mult) — but this measures consistency, not significance

Analysis

Deflated Sharpe = 0.0 vs 0.95 bar; is_significant=false; optimized Sharpe 18.1 sits far below the 225-trial expected-max luck bar of 129.58 — indistinguishable from best-of-N noise

Analysis

PBO = 0.5635 (>0.5): parameter selection is more likely than not overfitting

Analysis

Walk-forward is_overfitted=TRUE: avg IS Sharpe 142.87 collapses to avg OOS 3.94, with two of three OOS windows exactly 0.0 (empty)

Analysis

Holdout FAILED: ratio 0.0, holdout_sharpe 0.0 — zero trades in the untouched forward window

Analysis

Base Sharpe 10.74 / optimized 18.1 are implausibly high (suspected backtest artifact); trial Sharpes reaching 190 confirm the search space is dominated by artifacts

Analysis

PSR 0.9998 vs DSR 0.0 is the textbook selection-inflation trap

Analysis

Code↔hypothesis misalignment found by the semantic auditor — the code does NOT implement the hypothesis. Re-code the strategy to implement the hypothesis EXACTLY (instrument, timeframe, direction, the named edge/mechanic, sizing). Concrete issues: Hypothesis frames the work as filling the empty 'BTC futures Daily trend-following' slot and names the instrument 'BTCUSDT.BINANCE' (futures/MARGIN venue), but config.instrument_id and bar_type are 'BTCUSDT.BINANCE_SPOT' (CASH spot venue) — a materially different account type and fee schedule (spot taker 0.10% vs futures 0.05%). The futures-specific gap the hypothesis claims to fill is not addressed; a spot strategy was shipped instead.

Outcome Summary

This strategy filled an empty BTC daily trend-following slot by applying the analyst-validated Volume-Confirmed Donchian Breakout template with a rising-slope chop filter. Its initial backtest showed a high win rate (65.8%), strong profit factor (3.93), and low drawdown (6.26%), but only 38 trades in ~9 years and an implausibly high Sharpe flagged as a sparse-return artifact — enough to earn an 'optimize' verdict but not confidence. Optimization then revealed the true problem: a pure overfit signature with in-sample Sharpe of 142.87 collapsing to two empty out-of-sample windows, deflated Sharpe of 0.0, PBO above 0.5, and a holdout that produced zero trades. The analyst abandoned it as best-of-N noise rather than a real edge, concluding that transplanting the 4H template to single-asset BTC daily does not inherit promotability and that re-optimizing would only re-overfit.

Outcome Summary

Porting a promotable 4H template to a single-asset daily timeframe does not inherit its edge; the daily version produced too few trades for statistical power, yielding a textbook overfit signature (huge in-sample Sharpe, empty out-of-sample and holdout windows) that no further optimization can rescue.

Outcome Summary

The analyst abandoned it at the post-optimization ANALYZING stage (verdict: abandon), because it failed the deflated-Sharpe test and every forward gate — significance, PBO, walk-forward, and holdout — making the optimized Sharpe 18.1 statistically indistinguishable from best-of-225 noise (far below the 129.58 luck bar).

Outcome Summary

A long-only, single-instrument BTC daily-bar trend-following strategy applying a Volume-Confirmed Donchian Breakout (20-day high, above-average volume) gated by a close-above-SMA-50 uptrend filter and a rising-SMA-50-slope filter for chop defense.

Outcome Summary

The initial backtest looked strong but thin — 38 trades over ~9 years (~4.2/yr, below the 100-trade/10-per-year targets), win rate 65.8%, profit factor 3.93, max drawdown 6.26%, with an implausibly high Sharpe (10.74) flagged as a sparse-return artifact and a negative information ratio (-0.534) vs BTC buy-hold. It passed the backtest-review gate to optimization, but optimization exposed overfitting: deflated Sharpe 0.0 (vs 0.95 bar), PBO 0.5635, walk-forward is_overfitted=true (avg IS Sharpe 142.87 collapsing to OOS windows [0.0, 0.0, 11.8]), and a failed holdout (Sharpe 0.0, ratio 0.0, zero trades in the forward window).
Strategy report

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