BtcSpotVolatilityTargetedLongAccumulation
Hypotheses
BTC Spot Volatility-Targeted Long-Only Accumulation (Daily, Weekly Rebalance)
Hypotheses
A LONG-ONLY BTC SPOT strategy with DYNAMIC POSITION SIZING based on inverse-volatility targeting. The position size is rebalanced weekly to target a constant ANNUALIZED VOLATILITY of 30%, scaling position UP in quiet markets and DOWN during high-volatility periods. RATIONALE driven by the now-DEFINITIVE session finding (24+ strategies failed across 6+ mechanism classes): the analyst's final calibration note explicitly identifies 'Volatility-targeting overlays' as one of the only remaining genuinely-untested categories. This proposal packages volatility-targeting as a COMPLETE STRATEGY (not just a sizing layer) by combining it with a simple LONG-BTC-SPOT directional thesis. KEY STRUCTURAL DIFFERENCES from all 24 failed strategies: (a) NOT OHLCV trend-following / breakout / oscillator — no signal-based entries (always long when vol allows); (b) NOT cross-asset pair MR — single instrument (BTC spot); (c) NOT cross-sectional momentum — no rank-based long/short; (d) NOT intraday MR — daily horizon; (e) NOT cross-venue arb — single venue; (f) NOVEL mechanism class — VOLATILITY-RISK-MANAGED LONG-ONLY accumulation. EDGE THESIS: BTC has documented positive long-run drift (~50%/year CAGR since 2015, even after 2025-2026 regime change). Naked long-BTC carries large drawdowns during volatile crashes (BTC 2022 -65%). Volatility-targeting REDUCES exposure during crashes (vol spikes → position shrinks) and INCREASES exposure during quiet bull markets (vol drops → position grows). This empirically improves Sharpe vs naked long: Asvanunt-Richardson (2017) document Sharpe improvements of 0.3-0.5 from constant-vol targeting on equity indices, and the effect should be even larger on BTC due to higher unconditional vol. DESIGN CHOICES: (i) BINANCE_SPOT venue — spot avoids funding-rate costs and is the cleanest BTC long exposure; (ii) Daily bars — captures BTC's medium-term volatility cycles without being noisy; (iii) Weekly rebalancing — low trade frequency (~52 rebalances/year, no fee drag at 0.20% spot taker); (iv) MAXIMALLY SIMPLE — 2 parameters (vol lookback days=20, target_vol_annual=0.30); (v) ZERO supplementary data dependency.
Hypotheses
Addresses both QA blockers with targeted edits to the previous code. (1) VENUE: back to BINANCE_SPOT with leverage 1.0, as the hypothesis's design choice (i) and the venue routing rule require — long-only, no leverage, no funding-based edge, so no funding drag. (2) THE CAP NOW BINDS — root cause fixed rather than routed around: on a CASH account the accumulated BTC is a currency BALANCE, and base_template.resolve_account_equity() deliberately reads ONLY the USD-stable balance, so `get_account_equity()` under-reports equity by exactly the invested amount and the `target_notional <= MAX_FRAC*equity` clamp bounded nothing; worse, the held quantity was invisible, so each weekly rebalance re-bought a full target on top of coins it could not see, stacking to the impossible 714%/1126% exposures. `_account_state()` now rebuilds equity from the account balances (stable cash + BTC balance x price) and derives the held quantity from the BTC balance itself (max'd with any tracked Position as a belt-and-braces cross-check), so target notional is capped against real capital at every rebalance and the vol-targeting risk cap — the entire edge — actually functions. Buys are additionally clamped to free settled cash x 0.995 so a CASH account is never asked to overspend, and sizes are floored to the instrument's size_precision. (3) Two supporting fixes: the weekly grid is now CALENDAR-anchored on the bar's epoch day index (restart-safe, replay-identical) instead of an uptime bar counter; and a 90-day recycle flattens and rebuilds the position, because a vol-targeted long never sizes to zero and so would otherwise be ONE netting position for the whole run — which is exactly why the previous report had profit_factor 0.0, no realized PnL in the exposure denominator, and a peak_qty x avg_px_open measured against un-grown starting capital. The recycle costs ~0.8%/yr in spot fees and makes the trade record and exposure metric physical. The vol estimator, fraction clamp, no-churn band and the continuous signal (the invested fraction, which varies every bar) are unchanged, so Layers 1-3 stay green. QA's edge question — does the overlay beat naked buy-and-hold net of costs — is now answerable on a run where the cap actually binds.
Hypotheses
Long-crypto-beta with negative alpha and a >50% drawdown — the vol-targeting thesis is falsified, so it is not worth 2 hours of optimization. The strategy is 0.907-correlated to buy-and-hold BTC (beta 0.53) and delivers NEGATIVE alpha (-0.027) and a negative information_ratio (-0.786) versus that benchmark: the constant-vol overlay does not improve risk-adjusted return over naked long BTC, which is the strategy's entire reason to exist. It also carries the full-cycle crash: max_drawdown 59.3% (CI to 82%), above the 50% hard-abandon bar (L19), with -48% in 2022 and -20% to -29% through the luna/FTX/rate-shock windows — the vol-target did not meaningfully cut the drawdown. Sharpe 0.688 with CI [0.03, 1.33] essentially straddles zero, the 37 trades are recycle-driven artifacts rather than signal trades, and the recent regime is negative (2025 -13%, 2026 -15.6%). This is the L49/L19 long-only crypto-beta family carried by beta with negative alpha; benchmark_meaningful is true and it loses to that benchmark. No parameter change turns a beta stream with negative alpha into an edge. Failure pattern: risk_reject/no_edge long-only vol-targeted BTC beta, negative alpha, >50% drawdown (L49/L19).
Implementation
Long-only BTC SPOT (BINANCE_SPOT, CASH, leverage 1.0) accumulation with inverse-volatility position targeting on daily bars. Realized annualized volatility = stdev of the last 20 daily log returns x sqrt(365); the invested fraction = clamp(target_vol_annual / realized_vol, 0, 1.0), so exposure scales up in quiet markets and down when volatility spikes. On a calendar-anchored weekly grid (epoch day index divisible by 7) the held BTC quantity is reconciled toward fraction x TRUE equity / price, buying or selling only the difference, with a 2%-of-equity / $100 no-churn band. True equity is computed in-strategy from the venue account balances as stable cash + BTC balance x price (the base helper reads only the stable balance on a CASH account), the held quantity is read from that BTC balance, buys are limited to free settled cash, and the notional is hard-capped at 1.0x true equity — never short, never levered. Every 90 days the position is flattened and rebuilt on the next bar so PnL realizes and a real trade record exists. OHLCV only, no supplementary data.
Verification Results
Verification failed (Layer 4 — QA review) [class=code_defect]:
- [edge_concern] Even setting the sizing bug aside, the venue was switched from the hypothesis's BINANCE_SPOT to BINANCE USD-M futures, importing the funding-rate drag design choice (i) explicitly sought to avoid. If the sizing defect is fixed, the analyst should confirm the vol-targeted long actually beats naked buy-and-hold net of funding — sandbox correlation to buy-hold is 0.92 with alpha ~0, so the overlay may add little once it binds.
- The exposure cap does not bind: sandbox avg_position_pct = 714.67% (~7x current equity), physically impossible if MAX_FRAC=1.0 were capping notional against true equity (a genuine 1.2x strategy reads ~126% on this metric). target_notional = get_account_equity()*frac (frac<=1), clamped to equity*1.0 — a ~7x result means get_account_equity() returns inflated buying power, not true equity, so the vol-targeting risk cap (the entire edge) does not function. Same non-physical signature as iteration 3 (1126%->714%): the venue swap made Sharpe computable but did NOT fix the root cause. Corroborated by max_drawdown 55.7% despite a 30% vol target, metrics_reliable=false, profit_factor 0.0.
- Venue changed from the hypothesis's BINANCE_SPOT to BINANCE USD-M futures. A long-only, no-leverage, non-funding-edge strategy belongs on spot per the routing rule. The justification (spot-CASH equity limitation) is the same unresolved root cause as the sizing defect, so the futures move did not deliver the 'true equity' intended and imports funding costs the hypothesis wanted to avoid.
Verification Results
Acceptable as-is; if the analyst wants the cleanest read, compare a no-recycle variant's mtm equity curve.
Verification Results
The 90-day recycle (flatten, rebuild next bar) is an engine-accounting workaround not in the hypothesis: on a netting account a vol-targeted long that never sizes to zero is one position for the whole run, so PnL never realizes and per-trade metrics degenerate (prior profit_factor 0.0). Disclosed and defensible (~0.8%/yr cost, ~1 bar flat/quarter), doesn't change economic exposure materially, but it's a metrics device on top of the stated mechanism and adds small timing noise. Not a correctness defect.
Verification Results
Consider standing aside when _account_state() returns None rather than falling back to stable-only equity, so the cap can never silently stop binding.
Verification Results
Defensive fallback risk: if _account_state() cannot read venue balances it falls back to get_account_equity() (stable-only) with cur_qty=pos_qty — exactly the shape that produced the prior non-binding-cap/exposure-stacking bug. It does not trigger in this engine (exposure bounded at 100.34%), so belt-and-braces, but it would silently reintroduce the old failure mode if balance reads ever fail.
Verification Results
None — guards present.
Verification Results
Static-analyzer division flags (price, ann_vol, quantum, c0) are all guarded. No action required.
Backtest Review
Clean single-instrument spot construction with the iter-5 true-equity/exposure-cap fix working (exposure 100%, no blow-up); low fee drag (commission 1.99% of gross)
Backtest Review
Pure long-crypto beta: benchmark_correlation 0.907, beta 0.53, with NEGATIVE alpha (-0.027) and negative information_ratio (-0.786) — the vol-targeting overlay does NOT beat naked long BTC risk-adjusted, which falsifies the entire edge thesis
Backtest Review
Catastrophic drawdown: max_drawdown 59.3% (CI to 82%) — above the 50% hard-abandon bar (L19); the vol-target did not meaningfully cut the crash drawdown (2022 -48%, luna/FTX windows -20% to -29%)
Backtest Review
Not significant as a skill strategy: Sharpe 0.688 with CI [0.03, 1.33] essentially straddling zero; the 37 'trades' are recycle-driven, not signal trades
Backtest Review
Recent regime negative (2025 -13%, 2026 -15.6%); normal-vol tercile Sharpe 0.26
Backtest Review
L49/L19 long-only crypto-beta basket signature — carried by beta, negative alpha, full-cycle drawdown
Backtest and paper results are hypothetical. Trading involves risk of loss.