BtcVolCompressionBreakoutLS
Hypotheses
BTC USD-M Volatility-Compression Breakout, Long-Short (Single-Instrument BINANCE Perp, 1H Bars, Trade Only Expansions Out of Statistically-Rare Low-Volatility Coils, Volume-Confirmed, Chandelier-Trailed, Low-Parameter)
Hypotheses
A LONG-SHORT, SINGLE-INSTRUMENT, intraday strategy on BTCUSDT.BINANCE (USD-M perpetual, 1-HOUR bars) that exploits VOLATILITY CLUSTERING — the statistical property that periods of unusually LOW realized volatility are followed by volatility EXPANSION — rather than return persistence. It is deliberately ORTHOGONAL to the factory's promoted trend/momentum siblings (TS-momentum daily sign on BTC/ETH/SOL, impulse-bar 1H): those condition on the DIRECTION of recent returns; this conditions on the MAGNITUDE/regime of recent VOLATILITY and is dormant most of the time, arming ONLY when volatility coils to a statistically-rare low. When a coil resolves with a volume-confirmed directional break, it takes a position in the break direction and rides the expansion. It is also distinct from the long-only Donchian breakout siblings (ADA/DOGE/BNB): it is long-AND-short on a major, and crucially it does NOT trade every channel breakout — it requires a prior volatility-compression gate, which filters out the chop-driven false breaks that sink naive breakout systems. SINGLE-VENUE, SINGLE-INSTRUMENT (no cross-venue fee/basis trap, no cross-account equity-aggregation artifact, no multi-instrument rotation accounting bug — all explicit prior failure modes), on BTC (the least news-gap-fragile major, avoiding the single-alt event blowups that wiped the XRP daily book), with 1H bars so the ATR stop acts intrabar rather than only at daily close. Uses pure OHLCV (+volume), deep Binance history for robust walk-forward/holdout, and a small parameter set to resist the overfitting that recurs in the factory.
Hypotheses
Iteration-2 fix for the Layer-2 TypeError: `_atr_at() takes 5 positional arguments but 6 were given`. The method was a `@staticmethod`, but the Layer-2 strategy proxy invokes it as a bound method, prepending `self` and passing 6 args to a 5-arg signature. Fix: convert `_atr_at` to a normal instance method (`def _atr_at(self, highs, lows, closes, end, length)`) and drop the `@staticmethod` decorator. Call sites are unchanged (`self._atr_at(highs, lows, closes, end, self.atr_len)`), so this works whether or not the harness honors staticmethod. No other logic, imports, parameters, or signal behavior touched — Layer 1 stays green and the volatility-coil/breakout signal is intact.
Hypotheses
Not worth optimizing: the base is fundamentally without edge, not merely marginal. Over 6.5 years / 56,856 1H bars spanning bull, bear, and chop, the strategy is net-negative — profit_factor 0.963 (<1.0, gross wins do not cover gross losses), Sharpe -0.195 (CI [-1.50, +0.90]), negative expectancy (-$22.6/trade), total_return -4.7%, max_drawdown 50% — with regime-scattered results (deeply negative 2022 -19.5% and 2023 -24.7%). The 1H cadence adds severe cost drag (commission 12.21% of gross; impact_cost_pct 448% and capacity ~$5k are symptoms of the vanishing gross edge, confirming no fee headroom). The code correctly implements the hypothesis (482 balanced long/short trades, ~19% exposure, selective vol-compression arming), so there is nothing specific to iterate on — the volatility-compression breakout premise simply has no directional edge on BTC 1H. Optimizing a losing breakout base via best-of-N would overfit a config that fails deflated Sharpe rather than surface a real edge, wasting the 2-hour budget. If the compression idea is pursued later, it needs a materially different, lower-frequency construction and a genuinely edge-positive base before optimization — a premise reframe, not a parameter tune.
Implementation
Long-short volatility-compression breakout on BTCUSDT.BINANCE USD-M perp, 1H bars. Arms only when current ATR sits in the lowest vol_pct quantile of the trailing coil_lookback window (a statistically-rare low-volatility coil). When armed AND the latest bar's volume exceeds volume_mult times its moving average, it takes the direction of a Donchian-channel break (close beyond the breakout_lookback high/low, scaled by breakout_k). Rides the expansion with a Chandelier trailing stop (chand_mult * ATR from the position's running high/low). Sizing is capital-relative via ATR risk (risk_pct of equity per ATR-stop distance), capped by a leverage-aware notional cap.
Verification Results
Verification failed (Layer 2 — synthetic scenarios):
Parameters used: ['atr_len', 'vol_pct', 'risk_pct', 'breakout_k', 'chand_mult', 'vol_ma_len', 'volume_mult', 'min_notional', 'coil_lookback', 'breakout_lookback', 'notional_cap_frac']
Check that __init__ sets all attributes from self.parameters.get().
- steady_uptrend: TypeError: BtcVolCompressionBreakoutLS._atr_at() takes 5 positional arguments but 6 were given (bar timestamp: 1735698180000)
- steady_downtrend: TypeError: BtcVolCompressionBreakoutLS._atr_at() takes 5 positional arguments but 6 were given (bar timestamp: 1735698180000)
- flat_ranging: TypeError: BtcVolCompressionBreakoutLS._atr_at() takes 5 positional arguments but 6 were given (bar timestamp: 1735698180000)
- volatility_spike: TypeError: BtcVolCompressionBreakoutLS._atr_at() takes 5 positional arguments but 6 were given (bar timestamp: 1735698180000)
- zero_volume: TypeError: BtcVolCompressionBreakoutLS._atr_at() takes 5 positional arguments but 6 were given (bar timestamp: 1735698180000)
- price_gap: TypeError: BtcVolCompressionBreakoutLS._atr_at() takes 5 positional arguments but 6 were given (bar timestamp: 1735698180000)
Backtest Review
Strategy functions and matches the hypothesis: 482 balanced long/short trades, exposure only 18.9% (correctly dormant, arming selectively on rare low-vol coils), single-instrument BTC — no code bug, faithful implementation of the vol-compression gated breakout.
Backtest Review
Deep sample (56,856 1H bars, 6.5 years) spanning multiple regimes, and a genuinely orthogonal premise (conditions on volatility magnitude, not return direction).
Backtest Review
No edge in the base: profit_factor 0.963 (<1.0), Sharpe -0.195 (CI [-1.50, +0.90] straddles 0), negative expectancy (-$22.6/trade), total_return -4.7% over 6.5 years, max_drawdown 50%.
Backtest Review
Regime-scattered and net-losing: strong 2020/2024/2026 but deeply negative 2022 (-19.5%) and 2023 (-24.7%) — no persistent edge across regimes.
Backtest Review
Severe cost drag on the 1H cadence: commission 12.21% of gross; impact_cost_pct 448% and capacity ~$5k (symptoms of the near-zero gross edge) confirm there is no fee headroom to recover.
Backtest Review
Low win rate (31%) breakout profile whose big wins do not cover the many small losses — a structurally thin payoff even before optimization.
Outcome Summary
This strategy bet on volatility clustering—arming only when BTC's realized volatility coiled to a rare low, then riding the volume-confirmed expansion long or short—and was deliberately built to sidestep prior factory failure modes (single venue, single instrument, BTC, 1H bars, few parameters). The code worked exactly as intended, producing 482 balanced trades at just ~19% exposure over 6.5 years, but the premise carried no directional edge: profit factor 0.963, Sharpe -0.195, -4.7% total return, and a 50% drawdown, with results scattered across regimes and commissions consuming 12.21% of gross. Because the base was net-losing rather than merely marginal, the backtest reviewer abandoned it before optimization, judging that a best-of-N sweep would only overfit an edgeless config. The takeaway logged for future work: the compression idea, if revisited, needs a materially different lower-frequency construction and an edge-positive base first—a premise reframe, not a parameter tune.
Outcome Summary
A faithfully-implemented, orthogonal premise still needs an edge-positive base before optimization; the volatility-compression breakout has no directional edge on BTC 1H, and its low-win-rate payoff plus heavy commission drag at that cadence cannot be tuned into profitability—it would need a lower-frequency reframe, not a parameter sweep.
Outcome Summary
It was abandoned at the pre-optimization BACKTEST_REVIEW gate—the reviewer verdict was 'abandon' before any optimization ran—because the base was fundamentally edgeless (profit factor <1.0, negative expectancy, regime-scattered with deeply negative 2022 -19.5% and 2023 -24.7%) with severe 1H cost drag and no fee headroom to recover.
Outcome Summary
A single-instrument, long-short intraday strategy on BTCUSDT.BINANCE 1H perps that exploited volatility clustering—staying dormant until realized volatility (ATR) coiled to a statistically-rare low, then trading the volume-confirmed directional break out of that compression with a chandelier-trailed stop.
Outcome Summary
Over 6.5 years / 56,856 1H bars it took 482 balanced long/short trades (259 long, 223 short) at only ~18.9% exposure, but had no edge: Sharpe -0.195 (CI [-1.50, +0.90]), profit factor 0.963, negative expectancy of -$22.6/trade, total return -4.7%, 31% win rate, and 50% max drawdown, with commissions eating 12.21% of gross.
Backtest and paper results are hypothetical. Trading involves risk of loss.