Skip to content

View original

SolWeekendVolatilityRegimeBreakoutLS1H

Hypotheses

SOL Weekend Volatility Regime Breakout

Hypotheses

Exploit Solana's distinct weekend volatility regime on Binance USD-M Futures. During weekends, TradFi closure reduces institutional flow and market-maker activity, thinning liquidity and amplifying SOL price moves. The strategy detects the weekend regime shift (Friday ~20:00 UTC onwards) and trades volatility expansion breakouts when price breaches a range defined by late-Friday consolidation (high/low of 18:00-23:59 UTC Friday). Supplementary signals — funding rate divergence (>0.01%), declining open interest, and long/short ratio extremes — confirm reduced liquidity conditions ripe for exaggerated moves. Enter in breakout direction with ATR-based trailing stop, hard TP at 2-3x ATR, stop-loss at 1x ATR, and time stop at Monday 00:00 UTC. Weekend SOL moves of 3-5% are common; capturing 30-40% yields 1-2% per trade, well above the 0.15% fee threshold. Primary instrument: SOLUSDT Binance USD-M Futures (MARGIN account). Bar intervals: 1h primary, 4h regime confirmation. Risk factors: Sunday flash crashes, exchange maintenance windows, holiday anomalies, potential regime decay as weekend participation grows.

Hypotheses

Iteration-2 minimal fix for the Layer-2 TypeError (_dt() takes 1 positional argument but 2 were given). Root cause: the UTC-conversion helper was a @staticmethod, but the Layer-2 _StrategyProxy rebinds class callables onto a stand-in instance, which discards the staticmethod descriptor and passes the proxy instance as an injected first positional argument, so a 1-param staticmethod is called with 2 args and raises on every scenario. The fix moves the helper to a module-level function `_ts_to_dt` (module functions are never bound to an instance, so no self can be injected) and renames it to avoid shadowing the `import datetime as _dt` alias; the two call sites in calculate_signal and should_exit now call `_ts_to_dt(...)`. Nothing else changed: imports stay clean (Layer 1 green), and the Friday-range/weekend-window/ATR-stop signal and entry/exit/sizing logic the harness exercised are byte-identical, so no earlier-layer regression. Venue remains BINANCE USD-M futures (long-short needs margin), leverage 1.0 (not used for amplification, so the leverage_set_but_unused gate does not trigger).

Hypotheses

The SOL weekend volatility-breakout premise is empirically refuted: the strategy is a catastrophic, consistent loser with profit_factor 0.761, Sharpe -1.69 (CI entirely negative), total_return -79.8%, max_drawdown 84.4% (CI to 95%), expectancy -$81/trade, win_rate 32.5%, PSR 0.0041 — losing money in 6 of 7 years (2020 -19.3% through 2025 -19.5%, only 2026 positive) with rolling Sharpe -5 to -12 for long stretches. The code is correctly implemented and trades as specified (994 entries, 0 dropped), so this is a sign-wrong premise, not a bug: breakouts of the late-Friday consolidation range over the weekend whipsaw and revert (false breakouts in thin weekend liquidity) rather than continue, the opposite of the thesis, and the 1H frequency over-churns (994 trades, $21k commission + $18.9k impact, 8.27% of gross) compounding the loss. The hypothesis's funding/OI/long-short-ratio confirmation was never implemented (the code is pure OHLCV). Not optimize: no ATR/threshold tuning flips a Sharpe -1.69, PF 0.76, 84%-drawdown strategy that loses in 6 of 7 years into a winner. Not iterate: the code correctly implements the premise; the only 'fix' is to invert into a weekend-range-fade (mean-reversion), which is a different hypothesis. Not worth 2 hours. FAILURE PATTERN: weekend Friday-range volatility breakouts on a high-beta alt (SOL) at 1H produce a catastrophic, fee-bled loss (PF 0.76, Sharpe -1.69, -79.8% total, 84% DD, 6 of 7 years negative) because thin-liquidity weekend breakouts are false signals that whipsaw rather than continue, and the high trade frequency lets commissions/impact (8%+ of gross) dominate — calendar-gated breakout fading would be the inverse, but directional weekend breakouts have no fee-surviving edge on a volatile alt.

Implementation

Long-short weekend volatility-regime breakout on SOLUSDT.BINANCE USD-M futures, 1H bars, pure OHLCV. Builds the late-Friday consolidation range (high/low of 18:00-23:00 UTC Friday) and, during the weekend window (Fri >= 23:00, Sat, Sun), goes LONG on a close above the Friday high and SHORT on a close below the Friday low. Manages with an ATR(14) stop (1x), take-profit (2.5x), and trailing stop (2x off the best close since entry), plus a hard Monday 00:00 UTC time stop. The signal is the continuous distance of close from the Friday-range mid in ATR units; the discrete breakout is the entry gate. leverage 1.0.

Verification Results

Verification failed (Layer 2 — synthetic scenarios): Parameters used: ['sl_atr', 'tp_atr', 'trail_atr', 'atr_period', 'min_notional', 'position_pct', 'consol_end_hour', 'consol_start_hour', 'breakout_buffer_pct'] Check that __init__ sets all attributes from self.parameters.get(). - steady_uptrend: TypeError: SolWeekendVolatilityRegimeBreakoutLS1H._dt() takes 1 positional argument but 2 were given (bar timestamp: 1735690500000) - steady_downtrend: TypeError: SolWeekendVolatilityRegimeBreakoutLS1H._dt() takes 1 positional argument but 2 were given (bar timestamp: 1735690500000) - flat_ranging: TypeError: SolWeekendVolatilityRegimeBreakoutLS1H._dt() takes 1 positional argument but 2 were given (bar timestamp: 1735690500000) - volatility_spike: TypeError: SolWeekendVolatilityRegimeBreakoutLS1H._dt() takes 1 positional argument but 2 were given (bar timestamp: 1735690500000) - zero_volume: TypeError: SolWeekendVolatilityRegimeBreakoutLS1H._dt() takes 1 positional argument but 2 were given (bar timestamp: 1735690500000) - price_gap: TypeError: SolWeekendVolatilityRegimeBreakoutLS1H._dt() takes 1 positional argument but 2 were given (bar timestamp: 1735690500000)

Backtest Review

Implemented correctly and trades as specified: 994 weekend-breakout entries (565 long / 429 short), 0 dropped — no code bug; ample raw sample

Backtest Review

Catastrophic, consistent loss: profit_factor 0.761, Sharpe -1.69 (CI entirely negative), total_return -79.8%, max_drawdown 84.4% (CI to 95%), expectancy -$81/trade, win_rate 32.5%, PSR 0.0041

Backtest Review

Negative in 6 of 7 years (2020 -19.3% through 2025 -19.5%; only 2026 positive), rolling Sharpe -5 to -12 for long stretches, max_consecutive_losses 17

Backtest Review

Premise refuted: late-Friday-range breakouts over the weekend whipsaw/revert (false breakouts in thin liquidity), they do not continue — opposite to the hypothesis

Backtest Review

Over-churned and fee-bled: 994 trades on 1H bars generate $21k commission + $18.9k impact (commission 8.27% of gross); the supplementary funding/OI/L-S confirmation in the hypothesis was never implemented (pure OHLCV)

Outcome Summary

This strategy bet that thin weekend liquidity amplifies SOL moves, trading breakouts of the late-Friday consolidation range across the weekend. A prior iteration crashed in Layer-2 on a staticmethod descriptor issue; the iter-2 fix (moving the UTC helper to module level) let it run cleanly — 994 entries, none dropped. But the premise was backwards: weekend breakouts whipsawed and reverted, producing profit factor 0.76, Sharpe -1.69, -79.8% total, an 84% drawdown, and losses in 6 of 7 years, with heavy fee bleed from the 1H churn. The analyst abandoned it before optimization, concluding no ATR/threshold tuning flips a sign-wrong directional breakout into a winner and that the planned supplementary confirmation was never even implemented.

Outcome Summary

Thin-liquidity weekend breakouts on a high-beta alt are false signals that whipsaw rather than continue, so directional Friday-range breakouts have no fee-surviving edge — and high 1H trade frequency lets commissions/impact (8%+ of gross) dominate; the only 'fix' would be to invert it into a weekend-range fade, a different hypothesis.

Outcome Summary

The analyst abandoned it at backtest review as an empirically refuted, sign-wrong premise rather than a bug — after the iter-2 staticmethod fix the code traded exactly as specified, but late-Friday-range breakouts whipsaw and revert in thin weekend liquidity rather than continue, and the 1H frequency over-churned (994 trades, $21k commission + $18.9k impact, 8.27% of gross) compounding the loss; the hypothesized funding/OI/long-short confirmation was never implemented (pure OHLCV).

Outcome Summary

A long-short weekend volatility-breakout on SOLUSDT 1H perpetual futures (pure OHLCV), building a late-Friday consolidation range (18:00–23:00 UTC high/low) and trading breakouts of it through the weekend — long above the Friday high, short below the Friday low — managed with ATR stop/take-profit/trailing stop and a hard Monday 00:00 UTC time stop.

Outcome Summary

Over a 994-trade sample (565 long, 429 short, none dropped) it was a catastrophic, consistent loser: profit factor 0.761, Sharpe -1.69 (CI entirely negative), total return -79.8%, max drawdown 84.4% (CI to 95%), expectancy -$81/trade, win rate 32.5%, PSR 0.0041, max consecutive losses 17, losing in 6 of 7 years with rolling Sharpe -5 to -12 for long stretches.
Strategy report

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