Lab · ML Experiments

ML — Pattern Discovery

Inverted workflow: find conditional edges in BTC data first, build strategies second.
61 experiments

Vol-target sizing for donchian@1d — path-accurate, full-wallet basis

Inconclusive
2026-06-16 vol-targetsizingrisk-managementdonchiancross-assetbacktest
Hypothesis
On donchian@1d at the CURRENT full-wallet × lev3 basis (raw maxDD ~50% on BTC), vol-target sizing (size ∝ clip(target/trailing_RV, lo, hi)) materially cuts drawdown without losing risk-adjusted return — unlike the 2026-05 re-pricer runs which used the old ~12%-capped basis (baseline DD ~0.4%) and the linear approximation.
Verdict
**VOL-TARGET ADDS NOTHING ROBUST ON SINGLE-ASSET BTC.** Path-accurate re-sim (sanity: mult=1.0 reproduces runner +323.6%/maxDD 50.3% exactly). Across the whole target×clip sweep, vol-target Sharpe (1.04–1.10) is at or below the baseline 1.16 — the realised-vol signal adds no risk-adjusted value on top of the already-vol-adaptive ATR stop. Its only effect is de-facto deleveraging. Flat deleverage holds Sharpe flat at 1.16 at every exposure level, so it dominates on the robust metric. Vol-target does win on Calmar at matched maxDD (7.59 vs ~6.3) — it concentrates size cuts at the single worst-DD event — but that edge rests on ONE event at n=49 and is too fragile to bank. REAL LEVER = exposure level, not the vol signal. Vol-target's true value is CROSS-ASSET (normalising BTC 50% / ETH 68% / SOL 92% DD), out of scope here.
symbol
BTCUSDT
window
2020-01-01..2025-12-31
n_trades
49
rv_window_days
30
baseline_sharpe
+1.1600
exposure_dd_table
{'alloc_0.25': {'ret_pct': 91.7, 'maxdd_pct': 15.8}, 'alloc_0.35': {'ret_pct': 130.6, 'maxdd_pct': 21.7}, 'alloc_0.45': {'ret_pct': 169.5, 'maxdd_pct': 27.5}, 'alloc_0.55': {'ret_pct': 207.6, 'maxdd_pct': 33.0}, 'alloc_0.70': {'ret_pct': 261.5, 'maxdd_pct': 40.8}, 'alloc_0.90': {'ret_pct': 323.6, 'maxdd_pct': 50.3}}
flat_delever_sharpe
+1.1600
resim_sanity_ret_pct
323.60
voltarget_best_calmar
+7.5900
resim_sanity_maxdd_pct
+50.3000
voltarget_sharpe_range
[+1.0400, +1.1000]

Vol-target sizing for donchian@1d — path-accurate, full-wallet basis

2026-06-16 · status: inconclusive (vol-target neutral on BTC; lever is exposure level)

Hypothesis: On donchian@1d at the CURRENT full-wallet × lev3 basis (raw maxDD ~50% on BTC), vol-target sizing materially cuts drawdown without losing risk-adjusted return — unlike the 2026-05 re-pricer runs (old ~12%-capped basis, baseline DD ~0.4%, linear PnL approximation).

Verdict: Vol-target adds nothing robust on single-asset BTC. The real lever is the exposure level. Vol-target's value is cross-asset (out of scope).

Why a new run

The donchian cross-asset gate (2026-06-16) cleared donchian@1d (PF 1.30/1.37/1.39 on BTC/ETH/SOL, positive neighborhood plateau on both non-BTC assets) — the first Donchian to pass. But raw drawdowns at full-wallet × lev3 are brutal: BTC 50%, ETH 68%, SOL 92%. Sizing is the whole game.

Prior vol-target experiments (vol_target_sizing, vol_target_strategies) ran on the old ~12%-capped sizing era (baseline DD ~0.4% — nothing to compress) and used a linear re-pricer (sum of scaled per-trade PnL) that cannot model the drawdown path. This run fixes both.

Method (exact for a sizing overlay)

Vol-targeting changes only position size, not signals or stop prices, so each trade's net return-on-notional r_i = pnl_usd / (size·entry_price) is size-invariant. We walk the balance trade-by-trade with real compounding:

notional_i = balance · 0.90 · mult_i           mult_i = clip(target / trailing_RV_i, lo, hi)
balance   += notional_i · r_i                   baseline = same walk, mult_i ≡ 1

trailing_RV = 30-day realised vol (annualised), causal — no model, no leakage.

Sanity gate passed: the mult≡1.0 re-sim reproduces the runner exactly — +323.6% / maxDD 50.3% on BTC. The path model is correct.

Result 1 — vol-target never beats baseline Sharpe

clip target ret % maxDD % Sharpe Calmar
— (baseline) 323.6 50.3 1.16 6.43
0.5–2.0 0.4 299.0 42.2 1.07 7.09
0.3–1.5 0.5 332.0 49.2 1.05 6.74
0.25–1.0 0.4 269.1 35.4 1.07 7.59
0.2–1.2 0.5 311.4 43.1 1.08 7.22

Every vol-target Sharpe (1.04–1.10) sits at or below the baseline 1.16. The realised-vol signal adds no risk-adjusted value — the ATR stop already vol-adapts the risk per trade.

Result 2 — flat deleverage dominates on the robust metric

alloc ret % maxDD % Sharpe Calmar
0.90 323.6 50.3 1.16 6.43
0.70 261.5 40.8 1.16 6.41
0.55 207.6 33.0 1.16 6.29
0.45 169.5 27.5 1.16 6.17
0.35 130.6 21.7 1.16 6.01
0.25 91.7 15.8 1.16 5.82

Pure scaling holds Sharpe flat at 1.16 at every exposure level. So flat deleverage matches any DD target the vol-target rule hits, at equal-or-better Sharpe.

Vol-target does edge flat on Calmar at matched maxDD (7.59 vs ~6.3) — it concentrates its size cuts on the single worst-drawdown window. But that advantage rests on one event at n=49 and is too fragile to bank without a Monte-Carlo reorder confirming it survives bad-luck sequencing.

Takeaways

  1. For single-asset BTC: don't vol-target — pick an exposure level. The exposure→DD table above is the decision tool. Target maxDD ⇒ pick alloc. E.g. ~20% DD ⇒ alloc ≈ 0.35 (≈ +15%/yr); ~30% DD ⇒ alloc ≈ 0.55 (≈ +21%/yr).
  2. Full-wallet × lev3 is reckless for this edge (50% DD on the friendliest asset). The deployed DONCHIAN_20 only tames this via partial_tp + the ATR trail.
  3. Vol-target earns its keep cross-asset, not within BTC: the same alloc gives 50/68/92% DD on BTC/ETH/SOL — there a target-vol rule auto-shrinks the high-vol assets. If donchian@1d ever goes multi-asset, revisit vol-target as the cross-asset normaliser, not as a BTC timing signal.

Caveats

  • Single path, n=49 trades, BTC only. maxDD is one event — Sharpe is the trustworthy metric here, and it says vol-target ≈ neutral.
  • 30-day realised vol as the proxy (causal). The GBM/HAR forecast (predict_vol_1d) might time vol better, but Result 1's Sharpe ceiling suggests limited upside.
  • Returns are 6-year totals (2020–2025); ~27%/yr at alloc 0.90 down to ~11%/yr at 0.25.