← Back to Blog
RISK MANAGEMENT

Volatility Targeting: Sizing Positions to a Constant Risk Budget

June 26, 2026 · 7 min read · LMEX.AI

Equal dollar sizing across trades treats a 1% BTC move and a 5% SOL move as identical risk. They aren't. A \$1,000 position in SOL is roughly 5× the dollar risk of a \$1,000 position in BTC. Volatility targeting fixes the math.


This article walks through why volatility-adjusted sizing matters, the formula behind it, and how to apply it across a portfolio of crypto perpetuals.


What equal sizing gets wrong


A retail trader puts \$2,000 in BTC-PERP and \$2,000 in SOL-PERP and thinks both positions are sized equally. The dollar amounts are equal. The risk isn't.


BTC's daily realised volatility is typically 2-3%. SOL's runs 5-7%. A \$2,000 SOL position carries about 2.5× the dollar risk per day. When SOL goes through a 10% drawdown, that's \$200; the equivalent move in BTC is \$80.


Across a portfolio, equal-dollar sizing means the highest-volatility positions dominate the equity curve. A bad week in SOL can wipe out a quarter of small wins across BTC, ETH, AVAX. The "diversification" is illusory because one position drives all the risk.


The math


Volatility targeting fixes this by sizing positions inversely to volatility. Define a target volatility for the position (say, 1% of account per day), then size to hit that target:


position_size = (target_vol × account_value) / (asset_vol × asset_price)

For a \$10,000 account targeting 1% daily portfolio vol per position:

  • BTC at \$95,000, daily vol 2.5%: position_size = (0.01 × 10000) / (0.025 × 95000) = 0.0421 BTC ≈ \$4,000
  • SOL at \$200, daily vol 6%: position_size = (0.01 × 10000) / (0.06 × 200) = 8.33 SOL ≈ \$1,667

  • The SOL position is smaller in dollar terms, but contributes the same expected daily risk as the BTC position. Now the portfolio is actually balanced.


    Calculating asset volatility


    Use the rolling standard deviation of daily returns, typically over 20-30 days:


    import ccxt
    import pandas as pd
    import numpy as np
    
    exchange = ccxt.lmex()
    
    def get_daily_vol(symbol, lookback=30):
        candles = exchange.fetch_ohlcv(symbol, '1d', limit=lookback)
        df = pd.DataFrame(candles, columns=['ts', 'o', 'h', 'l', 'c', 'v'])
        returns = df['c'].pct_change().dropna()
        return returns.std()
    
    def volatility_targeted_size(symbol, account_value, target_vol_pct=0.01):
        ticker = exchange.fetch_ticker(symbol)
        price = ticker['last']
        asset_vol = get_daily_vol(symbol)
        
        if asset_vol == 0:
            return 0
        
        notional = (target_vol_pct * account_value) / asset_vol
        qty = notional / price
        return float(exchange.amount_to_precision(symbol, qty))

    For a portfolio:


    positions_to_target = {
        'BTC-PERP': 0.01,
        'ETH-PERP': 0.01,
        'SOL-PERP': 0.01,
        'AVAX-PERP': 0.005,  # weight half — speculative
    }
    
    account_value = 10000
    
    for symbol, target in positions_to_target.items():
        qty = volatility_targeted_size(symbol, account_value, target)
        print(f"{symbol}: target qty {qty}")

    Total portfolio vol budget


    Sizing each position to 1% daily vol doesn't mean the portfolio has 1% vol — it depends on correlation. Crypto pairs correlate around 0.6-0.8 on most days, spiking to 0.9+ during stress.


    A rough rule: if you target 1% per position across N positively-correlated positions, your portfolio vol is roughly:


    portfolio_vol ≈ position_vol × sqrt(N × (1 + (N-1) × avg_correlation) / N)

    For 4 positions at 1% each with average correlation 0.7:

    portfolio_vol ≈ 0.01 × sqrt(4 × (1 + 3 × 0.7) / 4) ≈ 0.01 × 1.76 ≈ 1.76%

    So 4 positions sized to 1% vol each gives ~1.76% portfolio vol, not 4%. To target 3% total portfolio vol with 4 correlated positions, size each one to roughly 1.7%.


    The math gets messier with non-zero short positions and varying correlations, but the principle holds: correlation matters as much as individual sizing.


    Adjusting for regime


    Volatility isn't constant. A 30-day rolling window captures the recent regime but lags meaningful shifts. Three practical adjustments:


    **Shorter lookback during regime changes.** When realised vol over the past 5 days diverges from the 30-day baseline by more than 50%, shift to a 10-day window. Captures regime shifts faster, at the cost of more noise.


    **Capped sizing during low-vol periods.** When measured vol drops to extreme lows (5th percentile of recent year), the formula produces oversized positions. Cap at 5% of account regardless of what the math says.


    **Floor sizing during high-vol periods.** Conversely, when vol spikes to 95th percentile, the formula produces tiny positions that aren't worth the transaction cost. Either close the position entirely or accept a slightly elevated vol target.


    What goes wrong


    Three predictable failure modes:


    **Vol underestimation right before a crash.** Trailing vol measures past noise. Volatility at the 30-day low usually means the calm before a regime shift. The formula sizes up just in time to get caught by the move. Mitigation: combine trailing vol with implied vol from options markets where available.


    **Correlation breakdowns during stress.** Correlation between crypto pairs jumps from 0.7 to 0.95 in liquidation cascades. A portfolio sized assuming 0.7 correlation suddenly has 30% more risk than expected. Stress-test your sizing assuming correlation = 1.


    **Slow adjustments lag fast moves.** Updating sizing once a day means yesterday's vol drives today's positions. Fine for slow strategies; problematic for fast ones. For high-frequency strategies, update vol estimates more often (every few hours) or use shorter lookback windows.


    Frequently Asked Questions


    Q: What's a reasonable target vol for retail?

    1-2% portfolio daily vol is conservative. 2-4% is moderate. Above 4% requires high conviction in the underlying strategies. Most retail traders unknowingly run 5-10% portfolio vol via equal-dollar sizing and high leverage; they discover this during their first big drawdown.


    Q: Should I use realised or implied vol?

    Realised for most retail use — it's free and accurate enough. Implied vol (from options markets) is forward-looking and better for short-term sizing decisions, but requires options data and a parser. For perpetual-only strategies, realised is fine.


    Q: How often should I update position sizes?

    Daily for swing strategies, every 4 hours for intraday strategies. Realising the position only matters when the new target differs meaningfully (>20%) from current size — otherwise transaction costs eat the benefit.


    Q: Does vol targeting work with directional bets?

    Yes, and arguably more importantly. A vol-targeted directional bet limits downside more predictably than equal-dollar sizing. The position is smaller during volatile periods (when it's more likely to be wrong) and larger during calm periods (when conviction is rewarded).


    Related Articles


    → Kelly Criterion: Mathematically Optimal Position Sizing for LMEX Traders
    → Portfolio Risk Management for Algorithmic Traders on LMEX
    → The Math of Drawdown Recovery (And Why It Should Terrify You)
    ← All ArticlesBuild a Bot →