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)
Backtest and paper results are hypothetical. Trading involves risk of loss.