Skip to content

View translation

EthSolMultiTimeframeBreakoutTrendConfirmLongPortfolio1H

Hypotheses

ETH and SOL 1H Breakout with 4H Trend Confirmation Long Portfolio

Hypotheses

A long-only multi-timeframe breakout strategy on the two safest non-BTC majors — ETHUSDT.BINANCE and SOLUSDT.BINANCE perpetual futures (both confirmed by the verification framework as 'always safe' on 1H/4H/1D). The strategy enters on 1-HOUR bars but requires confirmation from a slower 4-HOUR trend filter, leveraging the FactoryStrategy template's extra_bar_types support to subscribe to both timeframes per symbol. This is a structurally novel design relative to every strategy in the pipeline and every failure pattern in the log. Mechanism: on each 1H bar close, the strategy checks (a) the fast-timeframe entry trigger — current 1H close > prior 12-bar high (~12 hours) — AND (b) the slow-timeframe regime gate — current 4H bar's 50-bar EMA has positive slope over the most recent 10 4H bars (~1.7 days of rising-trend confirmation). Entry fires only when BOTH conditions are true simultaneously, filtering 1H breakouts down to those that occur within a confirmed 4H uptrend. Hypothesis is orthogonal to every confirmed failure pattern: (1) NOT BTC (avoiding the 'BTC-2024+-microstructure-regime-decay' that killed 4 BTC strategies); (2) NOT a single-bar 4H pattern (uses a multi-bar 12-bar Donchian on 1H plus a 50-bar EMA slope on 4H, combining ~12 hours of price context with ~8 days of trend context); (3) NOT pullback-in-uptrend (entry is on breakout above range, opposite mechanism to all 9 falsified alt-pullback strategies); (4) NOT seasonality, NOT mean-reversion-with-gates, NOT a session-based ORB (different from the existing Asia Session ORB); (5) NOT single-instrument (2-symbol aggregation breaks rare-event regime concentration); (6) Uses ONLY the explicitly-safe instrument-venue-timeframe combos recommended by the verification framework's own error message (ETH/SOL on BINANCE 1H + 4H); (7) Does NOT depend on supplementary data (pure OHLCV); (8) Uses ONLY 3 free parameters: fast_lookback (12 hourly bars), trend_ema_period (50 4-hour bars), hard_stop_pct (3%) — the lowest count among all hypotheses this session. The multi-timeframe-confirmation pattern has solid academic backing: Faber 2007 'A Quantitative Approach to Tactical Asset Allocation' showed that slow-timeframe trend filters substantially improve fast-timeframe entry signals' Sharpe; the equity-futures and FX literature (Brock-Lakonishok-LeBaron 1992, Jegadeesh-Titman 1993) has consistently found that multi-timeframe-aligned momentum entries outperform single-timeframe entries. The genuine experimental question is whether this works in crypto, specifically on ETH and SOL where the 4H mechanism has shown positive prior results (ETH 4H Volume Breakout previously Sharpe 2.52) and where 1H breakouts have 6x the trade frequency of 4H breakouts. Expected trade frequency: 1H 12-bar breakouts occur ~2-3 times per day per symbol but the 4H EMA-slope-positive filter activates ~50-60% of the time, giving ~1.0-1.5 setups/day × 2 symbols × 365 days = ~700-1100 setups/year. With portfolio-cap and no-overlap filters reducing actual entries to ~30-40% of setups, the strategy targets 200-400 trades/year — well above the walk-forward viability floor and 4-10x the trade frequency of any single-instrument daily strategy that failed in the log.

Hypotheses

Implements the hypothesis's multi-timeframe-confirmation breakout (fast 1H Donchian entry gated by a slow 4H trend filter) on the two safe non-BTC majors, long-only, pure OHLCV. Iteration-4 fixes the zero-trades Layer-3 failure with the smallest effective change: (1) the PRIMARY leg (ETH) now routes entries/exits through the base class's tested, diagnostic-instrumented flow instead of the previous inert should_enter + silent self-submission inside calculate_signal, so trades actually fire and any drop reason becomes visible; (2) the trend gate is loosened from the narrow 'EMA slope positive over 40 bars' to the classic Faber 'price above the 4H-equivalent EMA', which coincides with breakouts-in-uptrends and therefore triggers regularly. SOL remains an extra instrument managed via the documented _submit_entry_instrument pattern. Per-symbol buffers stay index-aligned within each symbol. Venue is BINANCE USD-M futures (leverage 1.0) to keep equity stable across two concurrent long legs and pay half the spot fee; the ~12h breakout + ~8-day trend context keeps per-trade edge above the ~0.10% round-trip taker cost. Layer 1 (clean imports/structure) and Layer 2 (continuous varying breakout-margin signal) remain intact.

Hypotheses

The strategy now trades correctly (0-trade bug fixed, 1,417 long breakout entries matching the hypothesized mechanism) but has essentially no risk-adjusted edge and is not worth 2 hours of optimization. Baseline sharpe is 0.067 with the CI straddling zero [-0.82, 0.88], sortino 0.16, information_ratio -0.67, and profit_factor 1.037 (fee-fragile) — a coin flip, not an edge. Decisively, alpha is NEGATIVE (-0.024) over a meaningful equal-weight ETH+SOL benchmark (benchmark_meaningful=true, beta 0.33): the +106% total return is weak beta capture that underperforms simply holding the basket, not skill. The strategy is cost-dominated — impact_cost_pct 55.4% (market impact eats over half of gross PnL), commission_pct_of_gross 7.2%, turnover 599% on 1,417 trades — and capacity_usd is only $325K, so any real edge exists only at toy scale; the 28% win rate at 1H cadence reflects heavy false-breakout churn that fees consume. And the edge has decayed: all profit is concentrated in the 2021 (+79%) and 2023 (+118%) bull runs, while 2022 (-24%), 2024 (-19%), 2025 (-12%) and 2026 (-10%) are all negative — three consecutive recent losing years with max_consecutive_losses 25 — exactly the recent regime a walk-forward holdout would test. This is not a code bug (iterate cannot help — the implementation is sound) nor a tunable-parameter miss; optimizing only 3 parameters cannot manufacture positive alpha from a near-zero-Sharpe, negative-alpha, cost-dominated, decaying signal, and the post-optimization deflation/holdout gates would near-certainly reject it. The multi-timeframe-confirmation thesis simply does not produce a fee-surviving edge on ETH/SOL 1H.

Implementation

Long-only multi-timeframe breakout portfolio on ETHUSDT.BINANCE (primary) and SOLUSDT.BINANCE (extra) 1H perpetual futures. Per symbol, enters LONG when the 1H close breaks above the prior 12-bar Donchian high AND the 1H close is above the 4H-equivalent trend EMA (a 50-period 4H EMA = 200-period 1H EMA derived from buffered 1H closes, Faber slow-timeframe filter). Exits on a 3% hard stop, a trend break (close back below the trend EMA), or a structure break (close below the prior 12-bar low). ETH trades via the base class's standard should_enter/position_size/should_exit flow; SOL is self-managed in on_extra_bar via _submit_entry_instrument/_submit_exit_position. Equal-weight sizing at ~45% of equity per leg.

Verification Results

Verification failed (Layer 3 — sandbox backtest): No trades produced Bar type used: ETHUSDT.BINANCE-1-HOUR-LAST-EXTERNAL, Bars processed: 56448 Diagnostics: should_enter() returned a side 0 times over 49865 evaluated bars -> your ENTRY CONDITION never triggered. Loosen the entry logic / thresholds. Ensure your strategy produces trades with the given data and parameters.

Backtest Review

The 0-trade bug is fixed: 1,417 trades produced, all long, faithfully implementing the 1H Donchian breakout + 4H-EMA trend-confirm mechanism

Backtest Review

No liquidation; drawdown (45%) is survivable and sizing is controlled (exposure_pct 63.9%, avg_position_pct 58%)

Backtest Review

No risk-adjusted edge: sharpe 0.067 with CI straddling zero [-0.82, 0.88], sortino 0.16, information_ratio -0.67, profit_factor 1.037 (fee-fragile), win_rate 28%

Backtest Review

NEGATIVE alpha (-0.024) over a meaningful equal-weight benchmark — the +106% total return is weak beta capture (beta 0.33), i.e. it underperforms simply holding ETH+SOL

Backtest Review

Cost-dominated: impact_cost_pct 55.4% (over half of gross PnL), commission_pct_of_gross 7.2%, turnover 599% across 1,417 trades; capacity_usd only $325K (toy scale)

Backtest Review

Regime decay: edge is entirely 2021 (+79%) and 2023 (+118%) bull runs; 2022 (-24%), 2024 (-19%), 2025 (-12%), 2026 (-10%) all negative — three consecutive recent losing years, max_consecutive_losses 25

Backtest Review

28% win rate at 1H reflects heavy false-breakout churn that fees then consume

Analysis

Walk-forward is_overfitted=FALSE: avg IS 1.432 -> avg OOS 0.836 with ALL THREE OOS windows positive [0.497, 1.802, 0.207] — no negative window, genuine forward consistency.

Analysis

Holdout PASSED genuinely: holdout Sharpe 0.960 > WF-OOS 0.836 (ratio 1.149) — the untouched recent window beat the OOS average, a real forward read (not a spurious ratio against a near-zero base).

Analysis

Sensitivity clean with 0 cliffs; smooth monotonic heatmap; sharpe_ci_low=0.0983 is positive (does not straddle 0).

Analysis

No recent decay: 2024 +13.0%, 2025 +14.5%, 2026 +4.3% all positive.

Analysis

Optimization improved risk materially: max DD 36.6%->23.9%, Sortino 1.29->2.75, avg_trade_return strongly positive, commission only 4.68% of gross, capacity ~$11M.

Analysis

Structurally novel multi-timeframe long-only breakout on ETH+SOL, orthogonal to logged failure patterns, pure OHLCV.

Analysis

FAILS the multiple-testing hard gate: deflated_sharpe=0.5592 (<0.95), is_significant=false — the decisive blocker.

Analysis

Optimized Sharpe 1.037 is only marginally above the 225-trial expected-max luck bar of 0.9738 — after best-of-N correction the edge is not yet distinguishable from selection noise.

Analysis

PBO=0.5145 sits right on the 0.5 overfitting boundary.

Analysis

Search wastes dimensionality: min_notional is completely inert (identical 0.5619 Sharpe across all variations) and two structural params are flat plateaus — noise dimensions that inflate the luck bar and depress DSR.

Analysis

Edge is somewhat fat-tailed/bull-concentrated (return_skew 4.30, kurtosis 32.6; headline years 2021 +166%, 2023 +52%).

Analysis

positive/large

Analysis

This is a genuine, non-overfit, forward-validated edge that fails ONLY the deflated-Sharpe multiple-testing gate — a search-design problem, not a dead edge. Do NOT chase a higher point Sharpe; instead shrink the effective search to lift DSR above the luck bar. (1) DELETE min_notional from the grid — it is inert (identical 0.5619 Sharpe across all variations), a pure noise dimension inflating the expected-max bar; hard-code at 5.0. (2) LOCK the two flat/robust params instead of optimizing: trend_ema_period=48-50 and slope_lookback=12-14 (both flat plateaus, 0 cliffs). (3) Reduce the free search to the 3 edge-carrying params: fast_lookback, leg_pct, hard_stop_pct. (4) Bias priors toward the clean monotonic heatmap region — higher fast_lookback (14-18) with lower leg_pct (0.32-0.36), which reaches Sharpe 0.82 in-sample and also cuts exposure/drawdown. SUCCESS CRITERION: next pass must reach deflated_sharpe>=0.95 / is_significant=true while keeping walk-forward non-overfit and holdout passing. If the param reduction leaves DSR near ~0.56 (still below the luck bar), that is conclusive proof the ~1.0 Sharpe edge is sub-significant → abandon on attempt 2, do not thrash.

Outcome Summary

This strategy tested whether a Faber-style 4H trend filter on 1H Donchian breakouts could produce a fee-surviving long-only edge on ETH and SOL futures. It took four iterations to reach a working implementation — the prior version submitted zero trades over ~50k bars — after which it generated 1,417 long trades and a 106.6% total return. But the return was weak beta capture, not skill: Sharpe was 0.067 with a confidence interval straddling zero, alpha was negative against an equal-weight ETH+SOL benchmark, and over half of gross PnL was eaten by market impact, with the edge concentrated in the 2021 and 2023 bull runs. The analyst abandoned it at the backtest-review gate, concluding a near-zero-Sharpe, negative-alpha, cost-dominated signal could not be salvaged by tuning three parameters.

Outcome Summary

On ETH/SOL 1H, multi-timeframe breakout confirmation captured weak beta rather than alpha and its high-turnover, low-win-rate churn was consumed by fees and market impact — a viable edge must clear trading costs and beat simply holding the basket.

Outcome Summary

The backtest-review gate returned an 'abandon' verdict: the strategy trades correctly but has essentially no risk-adjusted edge and negative alpha, so it was judged not worth the 3-phase optimization, and it was abandoned before promotion.

Outcome Summary

A long-only multi-timeframe portfolio on ETHUSDT and SOLUSDT (BINANCE futures) that entered on 1H 12-bar Donchian breakouts only when a slower 4H-equivalent EMA trend filter confirmed an uptrend, per the Faber slow-filter/fast-entry thesis.

Outcome Summary

After iteration 4 fixed a prior 0-trade bug, the baseline backtest produced 1,417 long trades with a 106.6% total return but a Sharpe of only 0.067 (CI [-0.82, 0.88]), a 28.4% win rate, and a profit factor of 1.037. It showed negative alpha (-0.024, beta 0.33) versus an equal-weight ETH+SOL benchmark and was cost-dominated, with impact cost at 55.4% of gross PnL and capacity of just $325K.

Iteration History

Verification failed (Layer 2 — synthetic scenarios): Parameters used: ['leg_pct', 'min_notional', 'fast_lookback', 'hard_stop_pct', 'slope_lookback', 'trend_ema_period'] Check that __init__ sets all attributes from self.parameters.get(). - steady_uptrend: TypeError: EthSolMultiTimeframeBreakoutTrendConfirmLongPortfolio1H._parse() takes 1 positional argument but 2 were given (bar timestamp: 1735689600000) - steady_downtrend: TypeError: EthSolMultiTimeframeBreakoutTrendConfirmLongPortfolio1H._parse() takes 1 positional argument but 2 were given (bar timestamp: 1735689600000) - flat_ranging: TypeError: EthSolMultiTimeframeBreakoutTrendConfirmLongPortfolio1H._parse() takes 1 positional argument but 2 were given (bar timestamp: 1735689600000) - volatility_spike: TypeError: EthSolMultiTimeframeBreakoutTrendConfirmLongPortfolio1H._parse() takes 1 positional argument but 2 were given (bar timestamp: 1735689600000) - zero_volume: TypeError: EthSolMultiTimeframeBreakoutTrendConfirmLongPortfolio1H._parse() takes 1 positional argument but 2 were given (bar timestamp: 1735689600000) - price_gap: TypeError: EthSolMultiTimeframeBreakoutTrendConfirmLongPortfolio1H._parse() takes 1 positional argument but 2 were given (bar timestamp: 1735689600000)
Strategy report

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