Skip to content

View translation

EthVolBreakoutChandelierTrendLS

Hypotheses

ETH Perp Volatility-Breakout Trend, Long-Short with Chandelier Trailing Stop (Single-Instrument ETHUSDT.BINANCE USD-M — Enter on a Donchian Range-Expansion Break Aligned with the Slow Trend, Ride with an ATR Chandelier Exit, NEVER Average Down, Low-Leverage Drawdown-Capped, 3-Parameter)

Hypotheses

A LONG-SHORT, SINGLE-INSTRUMENT, SINGLE-VENUE, PURE-OHLCV trend-following strategy on ETHUSDT.BINANCE USD-M that deliberately adopts the ONLY shape shown to survive this factory — drawdown-CAPPED directional trading with a trailing stop (the dual-TF momentum survivor) — while being a materially different construction from both the just-killed grid family and my pending trend ideas. Where the grid (and every mean-reversion/fade idea in my batch) BUYS WEAKNESS and accumulates an averaging-down inventory that bag-holds into a >50% drawdown (the exact reason grid/DOGE/SOL/premium all died on risk_reject or DD), this strategy does the OPPOSITE: it only ever enters in the direction of a confirmed volatility-EXPANSION breakout aligned with the slow trend, holds a SINGLE position (never adds against the move), and exits on a chandelier ATR trailing stop — so losses are cut early and the max drawdown is bounded by construction, not by hope. It is long-short (fills the under-represented long_short bucket, 13.5% vs the push toward more), single instrument, single venue, pure OHLCV, incrementally computed — none of the options/cross-venue/multi-leg machinery that dies in verification, and no supplementary feed to go missing. Leverage is capped low (≤1.5x) with the chandelier stop as the primary risk control, making the catastrophic blow-ups that abandoned my leveraged-perp reversals structurally implausible. It is LOW-FREQUENCY (breakouts of a wide Donchian channel are occasional) with multi-percent targets, so the ~0.10% USD-M round trip is immaterial (no fee_edge fragility). 3 parameters (Donchian lookback, slow-trend filter length, chandelier ATR multiple).

Hypotheses

This is a one-symbol fix for the reported Layer-2 failure, with nothing else touched. All six synthetic scenarios died with the identical TypeError: '_mean() takes 1 positional argument but 2 were given'. The cause is not the signal logic — it is that _mean was declared @staticmethod, and the Layer-2 verification proxy rebinds every callable attribute on the strategy as types.MethodType(fn, instance), which injects an extra self into a staticmethod's argument list, so the call _mean(self._true_ranges(...)) arrives with two positional arguments against a one-argument signature. The fix is to make it an ordinary instance method (def _mean(self, values)); its body and both call sites are unchanged, and _true_ranges was already an instance method so it was never affected. I also added the same standing note to the class docstring that I carry on other strategies, so this decorator does not get reintroduced on a later iteration. Nothing else was modified: Layer 1 passed, so the imports, class structure and parameter wiring are left exactly as they were (no banned imports added, numpy/math/Decimal only), and the entire signal path, entry threshold, sizing and chandelier exit are byte-identical to previous_code — the failure was a call-convention error that never let calculate_signal run to completion, not a modelling problem, so there is nothing in the signal to re-tune. Leverage stays at 1.5 and is genuinely consumed in position_size as the gross-notional cap (equity * self.config.leverage), which is what bounds exposure alongside the trailing stop, so this does not regress into leverage_set_but_unused. Warmup is max(40, 100, 56)+5 = 105 bars, which is comfortable inside both the 500-bar synthetic scenarios and the 365-day / ~2190-bar Layer-3 sandbox window.

Hypotheses

The identical Donchian-breakout + chandelier LS construction was already optimized and abandoned at the analyzing stage on iteration 2 for walk-forward/OOS degradation; the mechanism and (now-optimized) parameters are unchanged, so a second 3-phase run will reproduce the same walk-forward death — spending 2 more hours is not warranted. The current backtest reinforces this: base Sharpe is only 0.718 and the return is outlier-driven (kurtosis 86.7, a single +13.2% day on 2025-05-09 and a few other spikes carrying the P&L) over just 82 trades in 6+ years — a thin, noise-prone sample that curve-fits in the sweep and collapses OOS. information_ratio -0.716 shows it badly underperforms holding ETH, and single-instrument pure-OHLCV Donchian-breakout LS is a zero-survivor class here. The chandelier risk construction is sound (6.8% DD, PF 2.27) but risk control does not create a robust edge. Failure pattern: overfit trend-breakout — high in-sample metrics on few, outlier-concentrated trades that already failed walk-forward.

Implementation

Long-short Donchian range-expansion breakout on the ETHUSDT.BINANCE USD-M perpetual (4H bars), trend-aligned and managed by a chandelier ATR trailing stop. Each bar it computes a continuous score signal = chan_pos * align * expand, where chan_pos is the close's position relative to the prior 40-bar Donchian channel (0 mid-channel, +-1 at the extremes, >1 once broken out), align = 0.5*(1+tanh(chan_pos*trend)) is a smooth weight that goes to 1 when the breakout and the 100-bar slow trend agree and to 0 when they oppose, and expand = ATR(14)/ATR(56) capped at 2 measures volatility expansion. Entry is a single threshold on that score (|signal| >= 1.0), long when positive and short when negative. The only exit is a chandelier trailing stop riding 3xATR below the highest high made since entry for a long (mirrored for shorts), which never loosens; that same distance is the initial hard stop, so per-trade risk is known at entry. Sizing risks 2% of equity at the chandelier distance with a hard gross-notional cap of 1.5x equity, and the strategy holds exactly one position and never adds to it.

Verification Results

CLEAN RESTART 2026-09-04 — this run's verdict history and learning records were removed and it was restarted from verification. Its previous abandonment came from the pipeline, not from the market: the Layer-2 harness mis-bound @staticmethod helpers (fixed), QA issued terminal performance verdicts on an unoptimized smoke test (removed — QA now judges correctness only), and sandbox timeouts came from backtest-slot starvation (fixed). The hypothesis and the strategy code are unchanged. Verify the code on its merits; performance is decided later by the full backtest and the optimizer.

Verification Results

Let the optimizer search expansion_cap in [1.2, 3.0] so the vol-expansion component can amplify aligned breakouts.

Verification Results

Sandbox parameter draw sets expansion_cap=1.0006, flattening the volatility-expansion term to min(~1, atr_fast/atr_slow) so it can only reduce the score during contraction, never amplify a genuine expansion breakout as the hypothesis intends. The mechanism is structurally implemented (expand is computed and multiplied into the signal), so this is a parameter value, not a missing edge.

Verification Results

At backtest review, verify total trades over full history and holdout trade count (>=10); treat the marginal Sharpe CI as noise-limited.

Verification Results

Low trade frequency (81 round trips over ~6.5 years) with a Sharpe CI lower bound (0.0375) barely above zero makes the edge estimate statistically fragile. Not a code defect and not a fail under the performance-neutrality rule; the analyst should confirm full-history trade/holdout counts support measurability before optimizing.

Backtest Review

Sound risk construction: chandelier trailing stop, single position, no averaging-down; max_drawdown 6.8% (CI to 19%), calmar 9.65.

Backtest Review

avg_trade_return_pct 1.51% is well above the USD-M fee floor — not fee-fragile; PF 2.27; positive in most years.

Backtest Review

Identical mechanism already went optimize -> abandon at analyzing on iteration 2 due to walk-forward/OOS degradation; nothing structural changed, so re-optimization will reproduce the failure.

Backtest Review

Base Sharpe 0.718 is low and the return is outlier-driven (kurtosis 86.7; a single +13.2% day on 2025-05-09 plus a few other spikes carry the result).

Backtest Review

82 trades over 6+ years is a thin sample (L10) — the optimizer will fit noise and collapse OOS.

Backtest Review

information_ratio -0.716: badly underperforms ETH buy-hold; alpha thin (0.045).

Backtest Review

Single-instrument pure-OHLCV Donchian-breakout LS is a zero-survivor class in this factory.

Analysis

Clean sensitivity surface (0 cliffs) and a passing single-window holdout (ratio 2.96)

Analysis

Sound risk construction — max_drawdown 6.5% optimized, no averaging-down, chandelier stop

Analysis

avg_trade_return_pct 1.43% is above the fee floor — not fee-fragile

Analysis

Walk-forward is_overfitted=TRUE: IS Sharpe 3.58 → OOS 0.485, with an OOS window at -0.92 (unwaivable hard gate)

Analysis

PBO 0.52 > 0.5 — parameter selection more likely than not overfit (unwaivable hard gate)

Analysis

deflated_sharpe 0.000 vs expected-max 2.30 over 225 trials — selected Sharpe indistinguishable from best-of-N noise; is_significant=false

Analysis

Optimized config is worse than default: total_return 435%→59%, Sharpe 1.15→0.67, trades 229→81; return concentrated in 2025 with kurtosis 87

Analysis

OHLCV trend/breakout-confluence class with zero survivors — its direct siblings (XRP Donchian, ETH weekly ORB, LINK vol-targeted, ETH HL trend-pullback) all died overfit

Outcome Summary

This strategy was the best-behaved trend follower of its batch: a Donchian volatility-breakout aligned with the slow trend, ridden with a chandelier stop and never averaged down, producing +435% with a 1.15 Sharpe, 1.79 profit factor, a tiny 13.6% drawdown, and positive returns in every year from 2020 to 2026 — enough to earn an 'optimize' verdict despite some outlier dependence. But the 3-phase optimization was damning: walk-forward flagged it overfit as an in-sample Sharpe of 3.58 collapsed to 0.485 out-of-sample (one window at -0.92), PBO hit 0.52, the deflated Sharpe was zero against a best-of-N expectation of 2.30, and the optimizer's chosen config was actually worse than the default. The analyst abandoned it as a decisive multiple-testing/overfit failure in the zero-survivor OHLCV breakout-confluence family — whose siblings (XRP Donchian, ETH weekly ORB, LINK vol-targeted chandelier) had all died the same way — judging there was no robust parameter region to tune toward rather than spend the final iteration re-overfitting the same signal.

Outcome Summary

An exceptionally strong, multi-regime, low-drawdown default backtest is not enough to survive the robustness gauntlet — the OHLCV trend/breakout-confluence class has zero survivors, and here optimization actively overfit to fewer, noisier trades (a config worse than the default), so a promising unoptimized result can still collapse under walk-forward, PBO, and deflated-Sharpe.

Outcome Summary

The analyst abandoned it at the post-optimization ANALYZING stage on two unwaivable hard-gate failures — walk-forward is_overfitted=TRUE and PBO 0.52 > 0.5 — plus a deflated Sharpe of 0.000 versus a 2.30 best-of-N expectation over 225 trials, meaning the selected Sharpe is indistinguishable from search noise. A clean sensitivity surface and a single passing holdout (ratio 2.96) were outweighed by the overfit, PBO, and DSR failures.

Outcome Summary

A long-short, single-instrument, single-venue, pure-OHLCV trend-following strategy on the ETHUSDT.BINANCE USD-M perp that enters on a Donchian range-expansion breakout aligned with the slow trend and rising volatility, rides it with an ATR chandelier trailing stop, holds one non-averaged position, and caps leverage low so drawdown is bounded by construction.

Outcome Summary

The initial backtest was the strongest of its cohort: total return +435%, Sharpe 1.15 (CI low 0.558), profit factor 1.79, avg_trade_return_pct 2.29%, max drawdown just 13.6%, 229 trades, and positive in every year 2020-2026 — though somewhat outlier-dependent (return skew 2.05, kurtosis 16.9). After optimization it collapsed: walk-forward is_overfitted TRUE (IS Sharpe 3.58 → OOS 0.485, one OOS window at -0.92), PBO 0.52, deflated Sharpe 0.000, and the selected config was worse than default (return 435%→59%, Sharpe 1.15→0.67, trades 229→81).

Iteration History

Verification failed (Layer 2 — synthetic scenarios): Parameters used: ['trend_lb', 'risk_frac', 'atr_period', 'donchian_lb', 'entry_thresh', 'max_stop_pct', 'min_notional', 'min_stop_pct', 'atr_slow_mult', 'expansion_cap', 'chandelier_atr_mult'] Check that __init__ sets all attributes from self.parameters.get(). - steady_uptrend: TypeError: EthVolBreakoutChandelierTrendLS._mean() takes 1 positional argument but 2 were given (bar timestamp: 1735695840000) - steady_downtrend: TypeError: EthVolBreakoutChandelierTrendLS._mean() takes 1 positional argument but 2 were given (bar timestamp: 1735695840000) - flat_ranging: TypeError: EthVolBreakoutChandelierTrendLS._mean() takes 1 positional argument but 2 were given (bar timestamp: 1735695840000) - volatility_spike: TypeError: EthVolBreakoutChandelierTrendLS._mean() takes 1 positional argument but 2 were given (bar timestamp: 1735695840000) - zero_volume: TypeError: EthVolBreakoutChandelierTrendLS._mean() takes 1 positional argument but 2 were given (bar timestamp: 1735695840000) - price_gap: TypeError: EthVolBreakoutChandelierTrendLS._mean() takes 1 positional argument but 2 were given (bar timestamp: 1735695840000)
Strategy report

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