Skip to content

View original

EthOneHourUTCOpeningRangeBreakoutLong

Hypotheses

ETH 1H UTC Opening Range Breakout Long with ATR Trailing Stop

Hypotheses

A long-only single-instrument session-based breakout strategy on ETHUSDT perpetual futures using 1-hour bars. At each UTC day rollover (00:00 UTC), the strategy defines an 'opening range' from the first 4 hourly bars (00:00-04:00 UTC). Once the range is locked, the strategy waits for a confirmed breakout above the range high by a small ATR buffer and goes long. Exits use a chandelier-style ATR trailing stop, a fixed 2R take profit, and a hard end-of-day flat (23:00 UTC) so positions never carry across the next session's range definition. Only OHLCV data, only 3 parameters (range_hours, atr_period, atr_trail_mult). Deliberately distinct from every recent failure pattern: not 1D, not 4H, not contrarian, not funding-driven, not pairs, not OI/liquidations-driven, not a SMA crossover or RSI(2) pullback. Verification surface is intentionally tiny — no supplementary data, no extra_bar_types, no extra_instruments — to avoid the synthetic-data injection paths that have been correlated with verification timeouts.

Hypotheses

Iteration 2 fix for the Layer-2 'frozen signal (value=0.0)' failure in steady_downtrend, flat_ranging, and price_gap. Root cause was the gated-signal anti-pattern: calculate_signal returned 1.0 only on an actual breakout and 0.0 otherwise, so on scenarios that never break above the opening range the signal was a constant 0.0 (steady_uptrend and volatility_spike already passed because breakouts occur there). Fix: calculate_signal now ALWAYS returns a continuous, bar-varying score — tanh of the close's distance above the locked range high in ATR units, with a tanh momentum fallback while the range is still forming — so the signal varies in every scenario. The exact session-breakout entry decision is unchanged: it is computed in the same place and stored in self._breakout_trigger (range locked AND within the trading window AND not yet traded AND close > range_high + ATR buffer), which should_enter and position_size now consume instead of the raw signal sign. This keeps Layer-3 trade behavior and the chandelier/2R/EOD exit logic (which already passed Layer 1) byte-identical. No imports changed (numpy only), preserving the Layer-1 pass. Venue/leverage unchanged: BINANCE futures at leverage 2.0 with position_size genuinely consuming leverage (equity * position_pct * leverage).

Hypotheses

Two disqualifying failures at once. (1) Catastrophic over-leverage: avg_position_pct 360% vs the stated 1.2x intent, producing impossible single-day losses (-70.6% on 2024-07-19, -146.9% on 2024-07-30), max_drawdown 137.9% and a 2024 annual return of -208% — the account was wiped to ~zero in mid-2024 and every day from 2024-08 onward reads 0.0 (no equity left). This is the same missing-open-position-guard pattern seen in the sibling strategies, here fatal: the per-session entry over-sizes/stacks rather than holding exposure to 1.2x. (2) No underlying edge even before the blow-up: profit_factor 0.70, Sharpe -1.69 with the ENTIRE confidence interval below zero (ci_high -1.06), win_rate 38.3%, probabilistic_sharpe 0.0, and losses in every year 2020-2023 (-19%, -24%, -27%, -55%). The 1H opening-range breakout churns 1,355 trades with commission at 40.95% of gross — a sub-cost signal dominated by fees. This is NOT the iterate-the-sizing case used for the BTC/ETH/SOL trend-continuation siblings (which had positive PF/alpha distorted by stacking): here profit_factor 0.70 is near-leverage-invariant, so even correct 1.2x sizing leaves a fee-devoured net loser, and the signal loses every year. No parameter region turns a PF-0.70, 41%-fee-drag opening-range-breakout into a viable edge, so optimization is not worth the 2 hours — abandon. (Developer note: the leverage/position-sizing defect that produced 360% exposure recurs across this family and must be fixed in any future strategy, but it is not the sole reason for this abandonment — the edge is absent regardless.)

Implementation

Long-only UTC opening-range breakout on ETHUSDT.BINANCE USD-M perp, 1H bars, pure OHLCV. Each UTC day locks an opening range from the first 4 hourly bars, then goes long on the first bar closing above range_high + an ATR buffer (one entry/session). Exits: chandelier ATR trailing stop, fixed 2R take-profit, and a hard 23:00 UTC end-of-day flat. calculate_signal() returns a continuous breakout-distance score (tanh of close-vs-range_high in ATR units, momentum fallback pre-lock) so the signal varies every bar; the binary breakout entry is stored in self._breakout_trigger and consumed by should_enter/position_size. Leverage 2.0 (~1.2x equity notional).

Verification Results

Verification failed (Layer 2 — synthetic scenarios): Parameters used: ['atr_period', 'range_hours', 'min_notional', 'position_pct', 'eod_flat_hour', 'take_profit_r', 'atr_trail_mult', 'breakout_buffer_mult'] Check that __init__ sets all attributes from self.parameters.get(). - steady_downtrend: Frozen signal: all 481 signals are identical (value=0.0). calculate_signal() likely has a bug — the signal never varies. - flat_ranging: Frozen signal: all 481 signals are identical (value=0.0). calculate_signal() likely has a bug — the signal never varies. - price_gap: Frozen signal: all 481 signals are identical (value=0.0). calculate_signal() likely has a bug — the signal never varies.

Backtest Review

Tiny, clean verification surface as intended (OHLCV-only, no extra bars/instruments); session/range logic and UTC-from-ts_event are implemented coherently.

Backtest Review

CATASTROPHIC over-leverage: avg_position_pct 360% vs the intended 1.2x, producing impossible single-day losses (-70.6% on 2024-07-19, -146.9% on 2024-07-30), max_drawdown 137.9%, 2024 annual -208% — the account was wiped to ~zero mid-2024 and every subsequent day reads 0.0.

Backtest Review

No edge even before the blow-up: profit_factor 0.70, Sharpe -1.69 with the entire CI below zero (ci_high -1.06), win_rate 38.3%, probabilistic_sharpe 0.0, losing in every year 2020-2023 (-19%, -24%, -27%, -55%).

Backtest Review

Fee-dominated: 1,355 trades with commission 40.95% of gross — the 1H opening-range breakout churns with a sub-cost edge; PF 0.70 is leverage-invariant, so correct sizing still loses gross.

Backtest Review

Same missing open-position guard as sibling strategies, here catastrophic (per-session entry over-sizes / fails to hold exposure to 1.2x).

Outcome Summary

This strategy aimed for a clean, low-surface intraday edge: a UTC opening-range breakout long on ETH 1H with an ATR trailing stop and end-of-day flat, deliberately avoiding recent failure patterns. Instead it suffered two simultaneous failures — a catastrophic over-leverage bug that drove average exposure to 360% (vs the intended 120%), producing single-day losses beyond -100% that wiped the account to zero in mid-2024, and, beneath that, no real edge at all (profit factor 0.70, Sharpe -1.69 with the whole CI below zero, losses every year 2020-2023, commissions 41% of gross). The analyst abandoned it at the backtest-review gate on its second iteration, distinguishing it from sibling trend-continuation strategies whose stacking bug merely distorted a positive edge: here the leverage-invariant PF 0.70 means correct sizing still loses to fees, so there was nothing to optimize and it never advanced to optimization or risk review.

Outcome Summary

A high-churn 1H opening-range breakout is fee-dominated (commissions ~41% of gross) with a leverage-invariant sub-cost edge, so fixing the recurring position-stacking bug would only reveal a still-losing strategy — and the catastrophic 360% over-leverage shows the open-position guard defect in this strategy family must be fixed before any results can be trusted.

Outcome Summary

The backtest-review analyst issued an 'abandon' verdict for two disqualifying failures at once: a fatal missing-open-position guard that over-sized exposure to 360% and blew up the account, and — independently — no underlying edge, since the leverage-invariant profit factor of 0.70 and 41% fee drag mean even correct 1.2x sizing leaves a fee-devoured net loser that lost every year.

Outcome Summary

A long-only, single-instrument session-breakout strategy on ETHUSDT 1H Binance futures (intended 1.2x notional at 2.0x leverage) that locked a UTC opening range from the first 4 hourly bars, went long on a confirmed breakout above the range high plus an ATR buffer, and exited via a chandelier ATR trailing stop, a 2R take-profit, and a hard end-of-day flat.

Outcome Summary

Across 1,355 trades it returned -142.6% with profit factor 0.70, Sharpe -1.69 (entire CI below zero, ci_high -1.06), win rate 38.3%, probabilistic Sharpe 0.0 and a 137.9% max drawdown; a catastrophic over-leverage bug pushed avg position to 360% (vs the intended ~120%), producing impossible single-day losses (-70.6%, -146.9%) that wiped the account to ~zero in mid-2024, and it lost in every year from 2020-2023, with commissions at 40.95% of gross.
Strategy report

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