Skip to content

View original

BtcVolatilityExpansionConvexDirectionalLS

Hypotheses

BTC Volatility-Expansion Convex Directional — Long-Short, Engage When Realized Vol EXPANDS Sharply From a Low Base WITH a Directional Move, Flat in Calm/Contracting Vol, Chandelier Ride (Single-Bar 12H, 3-Parameter)

Hypotheses

A LONG-SHORT, single-instrument, pure-price CONVEX directional strategy on BTCUSDT.BINANCE (USD-M perpetual), 12H bars, in the surviving 'flat-most-of-the-time, engage-only-on-big-moves, decorrelated' profile of the factory's ONE validated edge (BTC Tail-Regime Convex, PF 2.03, beta 0.009, 2.23% avg above fees). Per L56 (change the mechanism, not the ticker), the TRIGGER is genuinely different from every queued convex sibling: the magnitude tail-regime engages on a completed large TRAILING RETURN; this engages on a sharp EXPANSION of REALIZED VOLATILITY (the 1st derivative of vol) from a low base, ACCOMPANIED by a directional move — i.e. it fires as a volatile regime SHIFT is beginning, capturing the leg EARLIER and (because vol-expansions are more frequent than completed 4-week magnitude extremes) with materially better cadence, the sole flaw that blocked the tail-regime's validation. It is NOT a squeeze/compression breakout (L54 — a squeeze needs vol COMPRESSION then a small post-squeeze pop; this needs vol EXPANSION with a LARGE concurrent directional move that clears fees, the opposite regime), NOT the magnitude tail-regime (different trigger), NOT a mean-reversion fade (L53 — engages WITH the move), NOT an OHLCV momentum/confluence clone (L56 — the signal is vol dynamics, not price moving averages), NOT a NON-PRICE-feed gate (L46 — realized vol is 100% price), NOT calendar/session/carry/basis/options (all dead). On BTC (deepest liquidity, cleanest regime shifts, the only promoted directional asset). Fills the long-short gap (13.5% vs 86% long-only) with a decorrelated convex sleeve. 3 parameters (vol-expansion ratio threshold, directional-confirmation window, chandelier multiple). Risk profile: vol-scaled sizing (~2% equity risk anchored to the chandelier, downsizing as vol rises so no single bar dominates), capped at 20% of equity*leverage; 2x leverage cap (reads self.config.leverage). Symmetric (engages both up-shifts and down-shifts) so trades fire across the full sample.

Hypotheses

Implements the hypothesis's distinct trigger literally: the decision variable is the RATE OF CHANGE of realized vol plus a concurrent directional move, not a completed trailing magnitude (the tail-regime sibling) and not a compression-then-pop (a squeeze breakout, which this is the regime-opposite of). Offline dry-run on the real BTCUSDT 12H catalog (2019-12 to 2026-06, 4,738 bars, net of 0.05%/side) at the submitted defaults: 99 engagements over 6.5y = 15.3/yr, avg +1.27% NET per trade (8.5x the 0.15% fee floor), win rate 41% with a convex right tail, profit factor 1.54, avg hold ~10 bars (5 days), max drawdown 6.2% at the submitted sizing, per-trade Sharpe proxy ~0.54 -- and 15 engagements inside the trailing 365-day sandbox window, so measurability is materially better than the ~11/yr tail-regime version it descends from. The parameter box is cliff-free and positive at every corner swept: vol_expansion_ratio 1.05/1.15/1.25/1.35/1.45 gives +0.92/+1.52/+1.27/+1.70/+1.06% per trade (22.4 down to 9.1 trades/yr); dir_window 6/8/10/12 gives +0.84/+1.27/+2.17/+1.88%; chandelier_atr 3/5/7 leaves per-trade capture unchanged (+1.19/+1.27/+1.27%) and only trades drawdown against return through sizing. Defaults sit in the middle of that plateau rather than at its maximum (dir_window 10 scores best but I kept 8 for cadence). One honest observation the analyst should weigh: the directional-confirmation window is the load-bearing parameter -- at dir_window 2 (outside the declared bounds) the same rule is strongly NEGATIVE (-0.40 to -1.13% per trade), so the edge lives in multi-day legs, not in the vol expansion alone; the declared lower bound of 6 keeps the optimizer out of that dead corner. Per-year attribution is positive or flat throughout (2020 +11%, 2021 +1%, 2022 +11%, 2023 +6%, 2024 +13%, 2025 0%, 2026 +6% of equity at the submitted sizing) -- 2021 and 2025 are the weak years. Leverage is wired into position_size on both the risk-anchored quantity and the notional cap: mean engagement notional is 25% of equity and the cap binds on 9% of entries, so at leverage 1.0 this strategy would carry half the exposure and clip twice as often (note the gross notional stays below 1x equity, so no margin is actually borrowed -- leverage acts as the exposure multiplier the hypothesis specifies).

Hypotheses

Outlier-driven, low-cadence convex directional on BTC (fat-tail outlier class, L10/L41). The strategy's core justification — better cadence than the tail-regime version via a vol-expansion trigger — is falsified by its own backtest: only 95 trades over ~6.5y (~14.6/yr), barely above the ~11/yr it was meant to fix and below the ~100-trade floor. The +58% return depends on a handful of extreme days (return_kurtosis 105.5, skew 5.39: 2020-03-16 +9.5%, 2024-03-08 +8.3%, 2022-06-20 +6.7%, 2024-11-17 +6.3%), and two full years (2021 +0.05%, 2025 -0.05%) produced nothing — no persistence. Sharpe is only 0.670 with a CI [0.040, 1.223] whose lower bound sits on zero, and information_ratio -0.597 against a meaningful buy-hold means it underperforms holding BTC risk-adjusted despite the low beta. Optimization would best-of-N overfit this fat-tailed noise and collapse in walk-forward OOS and the 15-day holdout. No iteration path: qualifying vol-expansion regimes cannot be manufactured beyond what the data contains, and the cadence thesis is already disproven. Abandon at BACKTEST_REVIEW rather than spend the optimization budget.

Implementation

Long-short single-instrument convex directional strategy on BTCUSDT.BINANCE (USD-M perpetual), 12-HOUR bars, flat most of the time. Every bar it measures the FIRST DERIVATIVE of realized volatility -- expansion = stdev(log returns, 10 bars) / stdev(log returns, 60 bars) -- together with the concurrent directional move dz = log(C[t]/C[t-dir_window]) / (base_vol * sqrt(dir_window)), and returns expansion * dz as a continuous signal (sign = direction of the move driving the expansion, magnitude = how violent the regime shift is relative to its own base). It engages only when expansion >= vol_expansion_ratio AND |dz| >= 1.0, taking the side of dz -- i.e. as a volatile regime is beginning, not after a completed magnitude extreme and not after a compression squeeze. Exit when dz flips sign (the leg is over) or on a wide chandelier stop of chandelier_atr x ATR(14) from the best close since engagement. Sizing is risk-anchored to that chandelier distance (equity * risk_pct * leverage / stop distance), so the position shrinks exactly as volatility expands, capped at max_notional_frac * equity * leverage. Three tunables: vol_expansion_ratio, dir_window, chandelier_atr.

Verification Results

Risk officer/analyst: evaluate and size on the ACTUAL ~4% per-trade risk (risk_pct*leverage), not the stated 2%. If 2% is intended, either drop the leverage factor from the risk-first term (leaving it only in the cap, per the sibling convention) or set risk_pct=0.01; the backtest metrics already reflect the 4% sizing.

Verification Results

Per-trade risk is ~2x the hypothesis's stated figure — the risk officer must size on the real number. The hypothesis specifies '~2% equity risk anchored to the chandelier', but position_size computes qty = equity * risk_pct * self.config.leverage / stop_distance, i.e. it multiplies the risk-first term by leverage (the DOGE/tail-regime/basket siblings put leverage ONLY in the notional cap, keeping the risk-first term leverage-free). At leverage 2.0 a full chandelier stop therefore costs risk_pct*leverage = ~4% of equity, double the stated 2%. This is disclosed in the docstring, reflected in the (modest) backtest drawdown (full-sample 6.2%), and bounded (mean notional ~0.33x equity, below 1x, so no margin is actually borrowed) -- so it is not a safety violation or a correctness bug, but the effective risk/exposure is 2x the hypothesis's risk profile. It does mean leverage is genuinely consumed (not leverage_set_but_unused), since it scales the risk-first exposure directly.

Verification Results

Backtest_review/analyst: evaluate on the pooled full-sample and walk-forward OOS windows, not the 8-trade sandbox; waive/pool the near-empty 15-day holdout as for the DOGE and tail-regime siblings; confirm the modest full-sample PF ~1.54 clears the deflated-Sharpe gate.

Verification Results

Sandbox is extreme noise, not evidence of edge — judge on the pooled full-sample. The sandbox is only 8 trades with profit_factor 8.19, return_skew 3.16, return_kurtosis 50, and Sharpe 1.22 whose CI [-0.57, 2.68] straddles zero (a couple of outlier wins dominate: largest_win 5218 vs avg_win 2220). The real measure is the full-sample dry-run the developer reports (99 engagements ~15/yr, PF 1.54, +1.27%/trade, positive every year, weak 2021/2025). Measurability is adequate (~99 total, same cadence tier as the DOGE tail-regime I passed, above the BTC tail-regime iter-3), but at ~15/yr the 15-day holdout expects ~0.6 trades and will likely be empty.

Verification Results

Research Lead/analyst: confirm the vol-expansion trigger is sufficiently distinct from the magnitude tail-regime to count as a new mechanism rather than a re-parameterisation, given the shared 'large move + expanding vol' engagement structure.

Verification Results

Mechanism-novelty is an analyst/Research-Lead call, not a QA defect. The vol-expansion trigger is a close cousin of the magnitude tail-regime sibling: both engage on a large concurrent directional move PLUS expanding volatility (the tail-regime used a binary 'expanding' flag and a 4-5 bar move; this uses a continuous fast/slow vol-expansion-ratio threshold and a 6-12 bar directional window, and 12H rather than daily bars). It is genuinely NOT a squeeze/compression breakout (it requires vol EXPANSION with a large move already in progress, the regime-opposite of a squeeze), and the code faithfully implements the stated vol-derivative trigger, so there is no code-vs-hypothesis mismatch -- but whether this is a 'genuinely different mechanism' per L56 or a re-parameterisation of the tail-regime is a novelty judgement the Research Lead should make.

Verification Results

For live deployment, reconstruct _side/_extreme/_entry_atr from cache.positions_open() rather than the dz sign.

Verification Results

should_exit() infers _side from the live dz sign on restart (_side==0) and re-seeds _extreme/_entry_atr from current values. Unreachable in backtest; only a live mid-position crash-restart risk.

Backtest Review

avg_trade_return_pct 1.48% clears fees

Backtest Review

profit_factor 1.94, low max_drawdown 9.7%

Backtest Review

Genuinely low beta (0.011) / benchmark_correlation 0.073 — decorrelated

Backtest Review

Cadence premise FALSIFIED: 95 trades / ~6.5y = ~14.6/yr, barely above the tail-regime's ~11/yr it aimed to fix, and below the ~100-trade measurability floor (L10)

Backtest Review

Outlier-driven: return_kurtosis 105.5, skew 5.39; a few days (2020-03-16 +9.5%, 2024-03-08 +8.3%, 2022-06-20 +6.7%) carry the return

Backtest Review

Not persistent: 2021 (+0.05%) and 2025 (-0.05%) are dead years — edge only shows when the sample contains a big vol leg

Backtest Review

sharpe_ratio 0.670 with sharpe_ci_low 0.040 — CI lower bound on zero, not distinguishable from no-skill

Backtest Review

information_ratio -0.597 vs a meaningful buy-hold benchmark — underperforms holding BTC risk-adjusted

Backtest Review

Optimizing 95 trades with kurtosis 105 will best-of-N overfit to a handful of outlier legs and collapse in walk-forward OOS/holdout

Outcome Summary

BtcVolatilityExpansionConvexDirectionalLS kept the surviving flat-most-of-the-time convex profile but changed the trigger to a sharp expansion of realized volatility with a concurrent directional move, aiming to fire earlier and more often than the tail-regime version whose sole flaw was cadence. The per-trade economics were again strong (PF 1.94, 1.48% per trade, 9.7% drawdown, beta 0.011), but the cadence premise failed on its own backtest: 95 trades (~14.6/yr), Sharpe 0.67 with a CI lower bound on zero, kurtosis 105.5 with a few days carrying +58%, two dead years, and a -0.597 information ratio underperforming buy-and-hold BTC. The analyst abandoned it at backtest review as an outlier-driven, low-cadence convex bet whose central claim was disproven, with no way to manufacture more qualifying regimes; it never reached optimization, analysis, or risk review.

Outcome Summary

Changing the convex trigger (vol expansion instead of trailing magnitude) does not raise cadence when qualifying regimes are inherently rare — 95 trades over 6.5 years with kurtosis 105 and a Sharpe CI on zero means the edge is still outlier-carried and unmeasurable, and no trigger reshaping can manufacture more big-move regimes than the data contains.

Outcome Summary

The analyst abandoned it at backtest review: the core justification — better cadence via a vol-expansion trigger — was falsified by its own 95-trade (~14.6/yr) result, below the measurability floor and barely above the version it aimed to fix. The +58% depends on a handful of extreme days (kurtosis 105.5) with no persistence, the Sharpe CI sits on zero, and it underperforms holding BTC risk-adjusted, so optimizing over so few fat-tailed events would best-of-N overfit and collapse out of sample with no iteration path.

Outcome Summary

A long-short, single-instrument convex directional strategy on BTCUSDT.BINANCE USD-M 12H bars (3 parameters) that stayed flat by default and engaged only when realized volatility expanded sharply from a low base (fast/slow vol ratio) accompanied by a ≥1-sigma directional move — riding the regime shift early with a wide chandelier stop — a different trigger (vol's first derivative) meant to fix the low cadence of the validated tail-regime edge.

Outcome Summary

The backtest (BTCUSDT.BINANCE 12H, 2368 data days) returned +58% with strong per-trade economics (profit factor 1.94, avg_trade_return_pct 1.48%, max drawdown 9.7%) and genuine decorrelation (beta 0.011). But the cadence fix failed — only 95 trades (~14.6/yr, barely above the tail-regime's ~11/yr), Sharpe 0.670 with a CI lower bound on zero (0.040), catastrophic kurtosis 105.5 (a few days carry the return), information ratio -0.597 versus holding BTC, and two dead years (2021 +0.05%, 2025 -0.05%).
Strategy report

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