Skip to content

View original

BtcVolatilityContractionSqueezeLong

Hypotheses

BTC 4H Volatility Contraction (Bollinger Squeeze) Long-Only Entry with Trend Filter on BTCUSDT.BINANCE

Hypotheses

A long-only, single-instrument timing strategy on BTCUSDT.BINANCE perpetual futures that uses VOLATILITY CONTRACTION (the 'Bollinger squeeze' — Bollinger 1992) as the entry gate, with 4H trend confirmation as the regime filter. Structurally distinct from every current portfolio strategy: the promoted ETH+SOL multi-timeframe breakout uses price-channel breaches; my pipelined MultiTimeframePullbackBNBAVAXLong uses price-to-SMA pullbacks; my pipelined BollingerBandMeanReversionWithTrendFilterBTCETH uses statistical price-band reversions; my pipelined BTCVolatilityTargetedLong uses vol for inverse SIZING (continuous). This strategy uses vol for ENTRY TIMING (discrete) — fundamentally different. The mechanism (Engle 1982 ARCH, Bollerslev 1986 GARCH, Bollinger 1992 squeeze, Liu-Tsyvinski-Wu 2022 crypto extension): volatility clusters and exhibits persistence. When realized vol contracts unusually (recent 7-day RV drops below 70% of trailing 30-day RV) WITHIN a confirmed uptrend, the market is in an accumulation/consolidation phase. Historically, this configuration precedes directional continuation as the coiled energy releases. The strategy goes LONG ONLY on this signal (not symmetric short — directional continuation in a confirmed uptrend is structurally asymmetric upward). Exit triggers: vol normalization, trend breakdown, time-based max hold, or fixed ATR stop. Uses ONLY BINANCE USD-M perp 4H + daily bars (proven clean data; no SPOT, no supplementary, no HL, no Deribit). Avoids ALL session failure modes. Fills FOUR critical gaps: (1) NEW MECHANISM CLASS (vol-regime timing, not present in portfolio), (2) MULTI-TIMEFRAME with vol-regime gate (distinct from price-pattern gates), (3) OHLCV-only data dependency (the only reliably-clean type), (4) directly distinct from the BTCVolatilityTargetedLong already in pipeline despite sharing 'volatility' as a theme. Position sizing: 25% of equity on entry; ATR-based trailing stop. Risk per trade: 1.5% of equity capped.

Hypotheses

Iteration 2 fixes the Layer-2 (synthetic) failure 'BtcVolatilityContractionSqueezeLong._rv() takes 2 positional arguments but 3 were given'. Root cause: _rv was declared @staticmethod but is invoked as self._rv(closes, window); the Layer-2 verification proxy rebinds strategy helpers as instance methods and passes self, so the 2-arg staticmethod received 3 args. The minimal fix converts _rv from a staticmethod to an instance method (drop @staticmethod, add self); it is the only self-called staticmethod in the signal path (_atr_abs and _position are already instance methods), and both _rv call sites already use self._rv(...), so no other change is needed. Every other line -- the realized-vol windows, squeeze ratio, trend SMA, ATR, long-only entry gate, and the four exit conditions -- is byte-identical to the previous iteration, preserving all Layer-1 checks and the passing signal logic. This is the same recurring synthetic-proxy gotcha where @staticmethod helpers invoked through self raise a spurious TypeError only under verification.

Hypotheses

BTC 4H Bollinger-squeeze long-only has essentially no edge: Sharpe 0.16 with sharpe_ci_low -1.28 (CI straddles 0), profit_factor 1.06, expectancy +$20/trade, ~1.8% CAGR over 6 years. The squeeze-continuation thesis is falsified outside the bull: the strategy is positive only in 2020 (+4.4%) and 2021 (+15.9%) and negative in EVERY year 2022-2025 (-2.2%, -2.4%, -5.9%, -5.1%) — volatility contractions resolved upward in the 2020-2021 bull and resolved randomly/down afterward. It generates no alpha (-0.0012, benchmark_correlation 0.42), i.e. it adds nothing over plain BTC exposure, and the thin per-trade edge ($20) shows in the cost structure (impact_cost_pct 27.9%, capacity only $1.29M) and a 14-trade losing streak at a 24% win rate. Not optimize: a Sharpe-0.16, 2020/2021-concentrated base would curve-fit the bull and fail the holdout, since the recent 4-year window (the holdout-relevant period) is uniformly negative. Not iterate: there is no bug and the 3 parameters cannot manufacture an edge where the signal has none outside a bull regime; the decay is regime-driven, not a tunable miss. FAILURE PATTERN: long-only volatility-contraction (Bollinger-squeeze) entry timing on BTC with a trend filter captures the 2020-2021 bull (squeezes resolve up in a strong uptrend) but has no edge in the 2022-2026 chop/bear regimes (squeezes resolve randomly), producing a near-zero risk-adjusted return (Sharpe ~0.16, CI through 0) with negative alpha and a 4-year negative run — the same bull-concentrated, regime-decaying signature as the abandoned breakout-family strategies, from the volatility-timing side. A clean OHLCV implementation and a correct trend-following payoff shape do not rescue a signal whose edge exists only in one historical bull market.

Implementation

Long-only single-instrument BTCUSDT.BINANCE 4H volatility-contraction (Bollinger-squeeze) timing strategy. Each 4H bar it computes a short-window (~7d) and long-window (~30d) realized vol from log returns and their ratio; when the ratio contracts at or below squeeze_threshold (recent vol < 70% of trailing vol) AND the close is above the trend SMA (confirmed uptrend), it enters long, betting on directional continuation as the coiled volatility releases. It exits on vol normalization (ratio >= 1.0), a trend break (close < SMA), an ATR trailing stop, or a ~10-day max hold. Vol is used for discrete entry timing (not sizing). Long-only, leverage 1.0, OHLCV-only. Three tunable parameters: squeeze_threshold, trend_sma_period, atr_stop_mult.

Verification Results

Verification failed (Layer 2 — synthetic scenarios): Parameters used: ['min_notional', 'atr_stop_mult', 'trend_sma_period', 'squeeze_threshold'] Check that __init__ sets all attributes from self.parameters.get(). - steady_uptrend: TypeError: BtcVolatilityContractionSqueezeLong._rv() takes 2 positional arguments but 3 were given (bar timestamp: 1735700460000) - steady_downtrend: TypeError: BtcVolatilityContractionSqueezeLong._rv() takes 2 positional arguments but 3 were given (bar timestamp: 1735700460000) - flat_ranging: TypeError: BtcVolatilityContractionSqueezeLong._rv() takes 2 positional arguments but 3 were given (bar timestamp: 1735700460000) - volatility_spike: TypeError: BtcVolatilityContractionSqueezeLong._rv() takes 2 positional arguments but 3 were given (bar timestamp: 1735700460000) - zero_volume: TypeError: BtcVolatilityContractionSqueezeLong._rv() takes 2 positional arguments but 3 were given (bar timestamp: 1735700460000) - price_gap: TypeError: BtcVolatilityContractionSqueezeLong._rv() takes 2 positional arguments but 3 were given (bar timestamp: 1735700460000)

Backtest Review

Clean OHLCV-only implementation with adequate sample (226 trades, 6 years); correct trend-following payoff shape (avg_win $1,572 vs avg_loss $479, ~3.3:1, positive skew)

Backtest Review

Genuinely distinct mechanism (vol-contraction entry timing) and no data-coverage issue (unlike the session's derivatives-state strategies)

Backtest Review

No real edge: Sharpe 0.16 with sharpe_ci_low -1.28 (CI straddles 0), PF 1.06, ~1.8% CAGR over 6 years; win_rate 0.24 with a 14-trade losing streak

Backtest Review

Bull-concentrated and decaying: positive only in 2020/2021, negative EVERY year 2022-2025 (-2.2%, -2.4%, -5.9%, -5.1%) — the squeeze-continuation thesis only worked in the bull

Backtest Review

No alpha: alpha -0.0012, benchmark_correlation 0.42 — adds nothing over BTC exposure

Backtest Review

Thin-edge symptoms: impact_cost_pct 27.9% (impact eats ~28% of gross), capacity_usd only $1.29M

Outcome Summary

BtcVolatilityContractionSqueezeLong introduced a genuinely distinct vol-regime-timing mechanism — buying Bollinger squeezes within confirmed uptrends on BTC 4H — deliberately built OHLCV-only to avoid the session's data-coverage failures, and it produced an adequate 226-trade sample with the right asymmetric payoff. But it had no real edge: Sharpe 0.16 with a CI through zero, profit factor 1.06, a 24% win rate with a 14-loss streak, and negative alpha. The thesis only worked in the 2020-2021 bull, with negative returns in every year from 2022 to 2025, because squeezes resolved up in a strong uptrend and randomly afterward. With a thin per-trade edge also showing in a 27.9% impact cost and $1.29M capacity, the analyst abandoned it on its second iteration at the backtest-review gate — concluding the decay was regime-driven, not a tunable miss, and that optimizing a bull-concentrated base would only curve-fit and fail the holdout.

Outcome Summary

A clean OHLCV implementation and a correct trend-following payoff shape cannot rescue a signal whose edge exists only in one historical bull market — long-only volatility-contraction timing on BTC captures the 2020-2021 bull but has no edge in 2022-2026 chop, the same bull-concentrated, regime-decaying signature as the abandoned breakout family, viewed from the volatility-timing side.

Outcome Summary

The analyst abandoned it at the backtest-review gate before optimization because the squeeze-continuation thesis was falsified outside the bull: volatility contractions resolved upward in the 2020-2021 uptrend but randomly/down afterward, leaving a Sharpe of 0.16 with a CI straddling zero, no alpha over plain BTC exposure, and a uniformly negative recent 4-year window that the holdout would catch.

Outcome Summary

A long-only, single-instrument, OHLCV-only volatility-timing strategy on BTCUSDT 4H futures — using a Bollinger-squeeze entry gate (7-day realized vol contracting below 70% of trailing 30-day RV) within a confirmed uptrend (close above a trend SMA) to buy consolidation phases expecting directional continuation, exiting on vol normalization, a trend break, an ATR trailing stop, or a time stop, with 3 tunables, framed as a new vol-regime-timing mechanism class.

Outcome Summary

Over an adequate 226 trades across 6 years with a correct trend-following payoff shape (avg win $1,572 vs avg loss $479, positive skew), it had essentially no edge: 12.4% total return (CAGR 0.72%), Sharpe 0.16 with a CI low of -1.28, profit factor 1.06, per-trade expectancy +$20, a 24.3% win rate with a 14-trade losing streak, negative alpha (-0.0012), 27.9% impact cost, and only $1.29M capacity — positive only in 2020/2021 and negative every year 2022-2025.
Strategy report

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