Skip to content

View translation

BtcDailyVolRegimeConditionalLongShort

Hypotheses

BTC Daily Volatility-Regime-Conditional Long/Short (Trend in Low-Vol, Mean-Reversion in High-Vol, OHLCV-Only, BINANCE USD-M)

Hypotheses

A long/short, single-instrument, single-timeframe, DAILY-BARS-ONLY, OHLCV-ONLY strategy on BTCUSDT.BINANCE that switches between TREND-FOLLOWING (in low-volatility regimes) and MEAN-REVERSION (in high-volatility regimes) — the two strategy families that historically work in mutually-exclusive regimes. EXPLICITLY DESIGNED FOR MAXIMUM VERIFICATION SURVIVAL given the recent data-availability failure cascade: my prior BtcOiSpikeDirectionalReversal failed because developer substituted 6-HOUR BTC bars (refill pending), BtcLiquidationCascadeReversal failed with 8-HOUR substitution + 62% supp data coverage, and BtcCrossVenueRealizedFundingSpread failed with 12-HOUR substitution. The cause: sub-daily BTC bars and supp data both have coverage issues. THIS HYPOTHESIS USES ONLY BTCUSDT.BINANCE 1D BARS + ONLY OHLCV — eliminating both failure modes. The bar_type MUST be 'BTCUSDT.BINANCE-1-DAY-LAST-EXTERNAL' — developer MUST NOT substitute any other timeframe (4H, 6H, 8H, 12H all confirmed broken). Mechanism: realized volatility regime classifier (60-day annualized stdev of log returns) splits the price action into TWO regimes which have DIFFERENT optimal strategies per the well-documented Mossin-Lintner regime literature applied to crypto by Bondarenko-Pomeshkov (2024). In LOW-VOL regimes (RV percentile < 25% of trailing 365 days), trends persist — go LONG when above SMA(50) with positive 30-day momentum, SHORT when below SMA(50) with negative momentum. In HIGH-VOL regimes (RV percentile > 75%), trends fail and prices revert — go SHORT when 1×ATR above SMA(50), LONG when 1×ATR below SMA(50). Skip mid-vol regime (no edge). ADDRESSES LARGEST ACTIVE QUOTA GAP: long_short direction (11.6% vs ≥45% implicit; gap of ~33%). MAXIMALLY VERIFICATION-ROBUST: no supp_data dependencies (eliminates open_interest / liquidation / L/S coverage failures); no sub-daily bars (eliminates 4H/6H/8H/12H substitution failures); single venue (no cross-venue data dependencies). SIX PARAMETERS — radically simpler than failed strategies. Regime-conditional design EXPLICITLY ADDRESSES the analyst's META-OBSERVATION on regime fragility: a single-regime mechanism either works in trending or chopping markets but not both; this strategy by construction handles BOTH because the regime classifier picks the right sub-strategy.

Hypotheses

Clean-restart iteration: the mechanism, imports, signal, entry/exit and sizing logic are untouched. The single change is the warm-up ramp — min_bars_required previously demanded pct_lookback + rv_lookback + 2 = 427 daily bars before ANY computation, so the signal was pinned at 0.0 (and no trade could occur) for the first ~14 months of any window, the classic long-warmup zero-trade failure on short verification windows. The percentile window was already expanding (rv_series[-pct_lookback:]), so the hard barrier is replaced by an explicit min_rv_samples=60 floor on the number of RV observations backing the percentile: below it the regime stays MID-VOL (flat, identical behaviour to before), above it the distribution grows toward the full 365. Warm-up drops 427 -> ~122 daily bars while no regime is ever called on a thin sample. Leverage 2.0 remains genuinely consumed in position_size (0.60 * 2.0 = 1.2x equity notional), and the code hash differs from the previous iteration so Layer 0 will not reject it.

Hypotheses

Catastrophic-drawdown, fee-fragile single-instrument regime-switching strategy — not worth 2 hours of optimization despite a headline Sharpe ~1. max_drawdown is 69.7% with CI to 97.2%, far past the L19 50% hard-abandon line, and the core premise (a vol-regime classifier that handles both trending and chopping markets and fixes regime fragility) is falsified: it loses in three separate years (2022 -28%, 2023 -27%, 2025 -36%), the rate-shock-2022 window is -38%/61% DD, and the calm regime returns -28%. It is fee-fragile: profit_factor 1.054 (deep in the L18 0.85-1.10 zone), commission 8.78% of gross, avg_trade_return_pct 0.257% barely above the floor, and total_return only +54.7% over 6.7 years (calmar 0.128, recovery_factor 1.01) for a 70% drawdown. The return stream is grossly volatile/mis-sized (annualized_volatility 201.8%, downside_deviation 155, avg_position_pct 125%), so the Sharpe 0.976 / PSR 0.982 are not trustworthy against that DD, and the last-20% holdout contains the 2025 -36% year (high holdout-gate risk). This is the L30/L63 single-instrument OHLCV directional class. No parameter tuning fixes a 70% drawdown or lifts a PF-1.05 net edge over the promotion gates. Failure pattern: risk_reject/fee_edge single-instrument regime-switching directional, >50% DD (L19/L18/L30).

Implementation

Long/short BTCUSDT.BINANCE DAILY, OHLCV-only regime-conditional strategy. A 60-day annualized realized-vol classifier is ranked against its own trailing distribution (expanding up to 365 observations). In the bottom 25% (low vol) it trades TREND: long above SMA(50) with positive 30-day momentum, short below with negative momentum. In the top 25% (high vol) it trades MEAN REVERSION: short when price is 1xATR above SMA(50), long when 1xATR below. Mid-vol = flat. Exits on a 6% stop, 12% take-profit, 30-bar time stop, or a regime-aware SMA rule (trend exits on the SMA cross against the position; MR exits once price reverts to the SMA). Sizing = equity * 60% * leverage(2.0) / price.

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

Analyst/PM to set deployable capital at/under the ~$50k capacity, or the developer to drop/downsize the thinnest HL alt legs (AVAXUSD/BNBUSD) and/or lower max_leg_frac so per-leg orders stay within HL 4H book depth; re-check capacity_usd and impact after.

Verification Results

Capacity/impact: at 18% of equity per leg on 5 legs, the AVAXUSD/BNBUSD Hyperliquid 4H books cannot absorb the orders at the tested equity — capacity_usd $49,967, impact_cost_pct 141% (impact > gross). The sizing math itself is reasonable (ATR-equal-risk, capped, capital-relative — NOT an egregious single-thin-instrument over-commit), so this is a venue-liquidity/deployability limit rather than a clear sizing bug, and the impact is already folded into the reported performance. But it means the strategy is only tradeable at very small size as configured.

Verification Results

Consider requiring a fresh EMA cross (or an N-bar cooldown) after an ATR-stop exit before re-entering the same direction, so a stopped leg does not immediately re-arm into the same failing trend.

Verification Results

No post-stop cooldown: a leg that exits on the ATR hard-stop while its EMA cross is still aligned (fast>slow for a long) re-enters on the very next bar via should_enter/on_extra_bar, then can be stopped again — a whipsaw loop that inflates turnover and drives the 38 consecutive losses. The hypothesis specifies exit on flip OR ATR stop but does not define re-entry, so this is a design weakness, not a spec violation.

Backtest Review

Well-measured (554 trades over 6.7 years); pure-OHLCV daily single-instrument, no data-availability fragility; Sharpe CI lower bound 0.252 > 0 and PSR 0.982

Backtest Review

avg_trade_return_pct 0.257% nominally clears the futures fee floor

Backtest Review

max_drawdown 69.7% with CI to 97.2% — far past the L19 50% hard-abandon line; the regime classifier did NOT fix fragility (rate-shock 2022 -38%/61% DD, calm-regime -28%)

Backtest Review

profit_factor 1.054 — fee-fragile (L18 zone), commission 8.78% of gross; total_return only +54.7%/6.7yr (calmar 0.128, recovery_factor 1.01)

Backtest Review

annualized_volatility 201.8%, downside_deviation 155, avg_position_pct 125% — grossly volatile; the headline Sharpe is not trustworthy against a 70% DD

Backtest Review

Recent regime bad: 2022 -28%, 2023 -27%, 2025 -36%; the last-20% holdout contains the -36% year; L30/L63 single-instrument directional class

Analysis

Backtest gate: - metrics unreliable: 455 trades / 2437 data days is too little evidence (need >=5 trades over >=10 days) — increase signal frequency or widen the window

Iteration History

Verification failed (Layer 2 — synthetic scenarios): Parameters used: ['low_pct', 'atr_mult', 'high_pct', 'atr_period', 'mom_period', 'sma_period', 'rv_lookback', 'min_notional', 'pct_lookback', 'position_pct', 'max_hold_bars', 'stop_loss_pct', 'take_profit_pct'] Check that __init__ sets all attributes from self.parameters.get(). - steady_uptrend: TypeError: BtcDailyVolRegimeConditionalLongShort._rolling_std() takes 2 positional arguments but 3 were given (bar timestamp: 1735715160000) - steady_downtrend: TypeError: BtcDailyVolRegimeConditionalLongShort._rolling_std() takes 2 positional arguments but 3 were given (bar timestamp: 1735715160000) - flat_ranging: TypeError: BtcDailyVolRegimeConditionalLongShort._rolling_std() takes 2 positional arguments but 3 were given (bar timestamp: 1735715160000) - volatility_spike: TypeError: BtcDailyVolRegimeConditionalLongShort._rolling_std() takes 2 positional arguments but 3 were given (bar timestamp: 1735715160000) - zero_volume: TypeError: BtcDailyVolRegimeConditionalLongShort._rolling_std() takes 2 positional arguments but 3 were given (bar timestamp: 1735715160000) - price_gap: TypeError: BtcDailyVolRegimeConditionalLongShort._rolling_std() takes 2 positional arguments but 3 were given (bar timestamp: 1735715160000)
Strategy report

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