In questa pagina
Fixed-dollar position sizing — always trade $10,000 of whatever asset — is what every beginner does. It's also what every professional desk replaces within their first quarter. The problem: different assets have wildly different volatilities, and the same dollar size produces wildly different dollar risk per trade. Vol-targeting fixes this by scaling position size to current volatility, so dollar risk stays in a tight band.
The problem with fixed size
Suppose your strategy puts $10,000 into each trade. On BTC during a calm 4h period, ATR might be $400 — the typical bar moves 4% in dollar terms. On the same $10,000 position, your daily volatility is roughly 8% (intra-day swings). In a parabolic move, ATR can hit $1,500 — same dollar position, but the dollar risk has 3.75× as the volatility expanded.
Now consider gold. Same $10,000 size. ATR is typically 0.6%. Your dollar volatility is one-tenth of BTC's. You have effectively no exposure to gold even though the position size is identical. The fixed-dollar sizing is silently giving you ten times more risk in BTC than in gold — which is the opposite of what you probably intended.
The fix: inverse-volatility scaling
Vol-targeting sizes positions so that each one contributes the same expected dollar volatility to the portfolio. The formula:
# Inputs
account_equity = 100_000 # USD
target_vol_per_trade = 0.005 # 0.5% of equity per trade (daily vol)
asset_vol_daily = 0.03 # asset's realised daily volatility (3%)
asset_price = 50_000
# Target dollar volatility per trade
target_dollar_vol = account_equity * target_vol_per_trade # $500
# Dollar position size such that 1-sigma daily move = target
notional = target_dollar_vol / asset_vol_daily # $16,667
# Convert to units (e.g. BTC)
units = notional / asset_price # 0.333 BTC
# Verification: 1-sigma move on 0.333 BTC at 3% daily vol
# = 0.333 × 50,000 × 0.03 = $500 ✓When the asset's volatility doubles, the position size halves. When it halves, the position size doubles. The dollar volatility stays at the target — that's the whole point.
Estimating volatility
Three reasonable choices, in increasing complexity:
- Realised volatility — standard deviation of recent log returns, scaled to the target horizon. Use a 30 to 60-bar window. Simple, fast, good enough for most strategies.
- ATR — average true range as a proxy for realised range. Less statistically clean than std but more robust to outlier bars. Use ATR(14) or ATR(20).
- GARCH or EWMA — exponentially-weighted variance, which captures volatility clustering. Use when realised vol jumps too erratically and you want a smoother target.
All three give roughly similar position sizes most of the time. The differences become important only in volatility regime transitions (a calm market becoming jumpy, or vice versa). For most retail strategies, realised vol on a 60-bar window is the right starting point.
Picking a target volatility budget
The target_vol_per_trade in the formula is your knob. Common ranges:
- 0.25-0.50% of equity per trade — conservative, suitable for high win-rate strategies or new strategies in production.
- 0.50-1.00% per trade — typical for proven strategies with documented out-of-sample performance.
- 1.00-2.00% per trade — aggressive, only for the most robust strategies with proven walk-forward performance.
- Above 2% per trade — outside the safe operating range; expect ruin if any input assumption is wrong.
Wiring it into the platform
strategy:
name: rsi_pullback_vol_targeted
indicators:
- { id: rsi, kind: RSI, period: 14 }
- { id: atr, kind: ATR, period: 20 }
rules:
entry:
type: AND
children:
- { type: lt, left: rsi, right: 30 }
- { type: gt, left: rsi.previous, right: rsi }
exit:
type: gt
left: rsi
right: 50
risk:
sizing:
method: vol_target
target_pct_equity: 0.75 # 0.75% per-trade vol budget
vol_estimator: atr # use ATR as the vol proxy
vol_lookback: 20
stop_loss_atr: 2.5
max_leverage: 3.0 # cap notional / equity regardless of vol estimate
note: in low-vol regimes the formula can over-size; the leverage cap protects against estimator failure.Where vol-targeting fails
Three failure modes. First, the vol estimator lags. If volatility doubles in a single fast move, your size was based on the previous (lower) vol and you're suddenly over-sized for the new regime. Mitigation: cap notional with a hard leverage limit and re-estimate vol after large bars.
Second, fat-tailed returns. Realised volatility computed off Gaussian assumptions undersizes the tails. The 1-sigma move you're sizing for is reality 0.5-sigma; the 5-sigma event happens far more often than the math predicts. Mitigation: pad the target by 20-30% as a safety factor.
Third, correlation between positions. If you vol-target two correlated strategies independently, the combined portfolio dollar volatility is higher than the sum of the parts during stress events when correlations spike. Mitigation: vol-target at the portfolio level when running multiple strategies on related assets.
Next steps
Vol-targeting is most natural when paired with ATR-based stop placement, which gives a vol-scaled stop alongside a vol-scaled size. For the broader sizing context, crypto position sizing walks through fixed-fractional vs ATR-based vs Kelly approaches and where each fits.
Provalo con i tuoi dati
Ogni concetto visto sopra è implementato nella piattaforma. Backtest, walk-forward, paper trading, poi passa al live — stesso set di regole in ogni fase.