JAN18
SUN2026

Canto II: Volatility Targeting & Position Sizing

From Kelly's f=μ/σ2f^* = \mu/\sigma^2 to adaptive positions: wt=σtarget/σtw_t = \sigma_{\text{target}}/\sigma_t.
algorithmic tradingcantomomentumposition sizingkelly criterionvolatility targeting

Preamble

The second installment in the Cantos of market inefficiencies. Where Canto I established momentum signals, this Canto addresses the harder question: how much to bet.

Not in the signal alone does fortune dwell, but in the measure of each wager cast. The gambler who bets all on every tell shall see his kingdom crumble, fading fast. Yet he who wagers nothing, hoarding coin, shall never taste the fruits of prescience true. Between these poles, the prudent paths conjoin— where Kelly's wisdom lights the way anew. Size your stake as volatility commands: when tempests rage, pull back your eager hands; when calm descends, let larger bets expand. Thus flows the adaptive, volatility-planned.


The Position Sizing Problem

In Canto I, we built momentum signals that forecast returns. But a signal is not a strategy until you decide how much capital to deploy. This is the position sizing problem—and it turns out to be as important as the signal itself.

Consider two traders with identical alpha:

  • Trader A bets 100% of capital on every signal
  • Trader B bets 10% of capital on every signal

Over 100 trades, Trader A experiences wild swings and occasional ruin. Trader B compounds steadily. Same signal, vastly different outcomes.

The mathematics of position sizing connects to:

  • Information theory: Kelly criterion maximizes long-run growth rate
  • Bond duration: position sizing is risk management, like duration-matching a portfolio
  • Black-Scholes volatility: σ\sigma appears in both option pricing and optimal bet sizing
  • Risk-free rates: the opportunity cost of capital shapes how aggressively to bet

Position Sizing Engine

Annualized excess return from momentum signal

Annualized realized volatility

Treasury yield anchor

Kelly Fraction

1/4
1/2
Full

Desired portfolio volatility

Position size cap

Vol Regimes
Sharpe: 0.55
Full Kelly: 2.75x
Fractional Kelly: 1.37x
Vol-Target Position: 0.75x
Expected Growth: 15.3%

The Kelly Criterion

In 1956, John Kelly at Bell Labs derived the optimal betting strategy for a gambler with an edge. The insight: maximize expected logarithmic growth, not expected wealth.

The formula is elegant:

f=μrfσ2f^* = \frac{\mu - r_f}{\sigma^2}

where:

  • ff^* is the optimal fraction of capital to bet
  • μ\mu is the expected return of the position
  • rfr_f is the risk-free rate
  • σ2\sigma^2 is the variance of returns

Why log growth? Because wealth compounds multiplicatively. A 50% gain followed by a 50% loss doesn't return you to even—it leaves you at 75%. Log transforms multiplicative processes into additive ones, where the law of large numbers applies.

The Growth Rate Curve

The expected log growth rate as a function of position size ff is:

g(f)=rf+f(μrf)12f2σ2g(f) = r_f + f \cdot (\mu - r_f) - \frac{1}{2} f^2 \sigma^2

This is a concave parabola. At f=0f = 0, you earn the risk-free rate. As ff increases, growth rises due to your edge—then falls as variance drags you down. The peak is at ff^*.

−0.500.511.522.5305101520
Expected Growth RateFull Kelly (2.75x)50% Kelly (1.37x)Kelly Criterion: Expected Growth vs LeverageLeverage (Position Size / Capital)Expected Log Growth Rate (%)f* = 2.75

The Kelly curve teaches three lessons:

  1. There's an optimal size. Too little leaves money on the table. Too much and variance destroys you.
  2. Volatility matters quadratically. Double the vol, and optimal position size falls by 4x.
  3. The peak is fragile. The curve is steep near the optimum—slight mismeasurement of μ\mu or σ\sigma can put you on the wrong side.

Fractional Kelly

In practice, most practitioners use half-Kelly or less:

fpractical=λf,λ[0.25,0.5]f_{\text{practical}} = \lambda \cdot f^*, \quad \lambda \in [0.25, 0.5]

Why? Because:

  • We don't know μ\mu and σ\sigma exactly—estimation error is real
  • The growth curve is asymmetric: overbetting hurts more than underbetting
  • Drawdowns at full Kelly can be psychologically unbearable (50%+ is common)
  • Fractional Kelly sacrifices some growth for much smoother paths

This connects to shrinkage estimators in Bayesian statistics—you're pulling your bet toward zero to hedge against parameter uncertainty. The same logic appears in posterior multiples and hierarchical Bayes models.


Volatility Targeting

Kelly sizing has a problem: it requires knowing μ\mu, the expected return. In momentum strategies, μ\mu is noisy and time-varying. Volatility targeting sidesteps this by focusing only on controlling risk.

The idea is simple: scale your position so that your portfolio volatility stays constant:

wt=σtargetσtw_t = \frac{\sigma_{\text{target}}}{\sigma_t}

where:

  • wtw_t is your position size at time tt
  • σtarget\sigma_{\text{target}} is your desired portfolio volatility (e.g., 15%)
  • σt\sigma_t is the current realized volatility of the asset

When volatility spikes, you shrink your position. When it's calm, you lever up.

This is the same logic behind:

  • Risk parity funds: weight assets by inverse volatility
  • VIX-based hedging: reduce exposure when implied vol rises
  • Managed futures: the "volatility scaling" that made trend-following strategies famous
0501001502002500510152000.511.522.5
Realized VolatilityTarget Vol (15%)Position SizeMax Leverage (2x)Volatility Targeting: Dynamic Position SizingTrading DaysVolatility (%)Position Size (x Capital)When vol rises, position shrinks

The plot above shows how position size moves inversely with volatility. When markets calm down (low vol), you take larger positions. When crisis hits (high vol), you de-risk automatically.

Why Vol-Targeting Works

  1. Volatility clusters. High vol today predicts high vol tomorrow. By scaling down during storms, you avoid the worst of the drawdown.

  2. Constant risk exposure. Each day, your portfolio has roughly the same risk profile. This makes risk budgeting easier.

  3. No alpha estimation required. You need only estimate σ\sigma, which is much more stable and predictable than μ\mu.

  4. Mechanical de-risking. Removes human discretion during panics, when judgment is worst.

The connection to Black-Scholes is direct: in option pricing, σ\sigma is the key parameter, and practitioners spend enormous effort estimating realized vs. implied volatility. The same σ\sigma drives position sizing.


Position Sizing Across Volatility Regimes

Let's compare Kelly and vol-targeting across different market environments:

Low VolNormalHigh Vol (Crisis)00.511.5201020304050
50% Kelly PositionVol-Target Position (15% target)Volatility (%)Position Sizing Across Volatility RegimesPosition Size (x Capital)Volatility (%)Max Leverage: 2x

Notice the contrast:

  • Kelly changes position based on expected return and volatility. If your momentum signal is strong, you bet more.
  • Vol-targeting ignores the signal strength entirely—it only cares about keeping risk constant.

In low-vol regimes (calm markets):

  • Vol-targeting tells you to lever up, potentially past 2x
  • Kelly depends on whether your signal is stronger in calm or volatile markets

In high-vol regimes (crisis):

  • Both methods tell you to shrink positions
  • Vol-targeting is more aggressive about cutting exposure
  • Kelly might still want a decent position if the signal is strong enough

The key insight: volatility regimes change the game. A strategy that looks great in backtests dominated by calm periods may blow up in the next crisis. By explicitly modeling how position sizes change across regimes, you stress-test your approach.


Monte Carlo: Constant vs. Vol-Targeted Sizing

Theory is nice, but does vol-targeting actually improve outcomes? Let's simulate.

We run thousands of paths with:

  • Stochastic volatility that mean-reverts (mimicking real markets)
  • Same expected return process
  • One strategy holds constant position, the other vol-targets
0.60.811.21.41.61.82050100150200
Constant SizingVol-TargetedMonte Carlo: Final Wealth Distribution (252 days, 2000 trials)Final Wealth (starting from 1.0)FrequencyConstant SizingMedian: 1.11Mean: 1.12Sharpe: 9.74Max DD: 42.0%Vol-TargetedMedian: 1.09Mean: 1.10Sharpe: 9.80Max DD: 36.0%

The results typically show:

  • Similar or higher median wealth for vol-targeting
  • Lower maximum drawdown for vol-targeting
  • Higher Sharpe ratio for vol-targeting
  • Tighter distribution (less extreme outcomes) for vol-targeting

The intuition: by reducing position during high-vol periods, you avoid the worst drawdowns. This protects your capital base, allowing better compounding in the recovery.

This is related to the volatility drag concept in geometric Brownian motion: high variance erodes geometric returns even when arithmetic returns are positive. Vol-targeting reduces this drag.


Implementation Notes

Estimating Realized Volatility

The simplest estimator is rolling standard deviation:

import pandas as pd
import numpy as np

def realized_vol(returns: pd.Series, window: int = 21) -> pd.Series:
    """
    Rolling realized volatility (annualized).

    Args:
        returns: Daily log returns
        window: Lookback period (21 = ~1 month)

    Returns:
        Annualized volatility series
    """
    return returns.rolling(window).std() * np.sqrt(252)

More sophisticated approaches:

  • EWMA (exponentially weighted): gives more weight to recent observations
  • GARCH models: capture volatility clustering dynamics
  • High-frequency estimators: use intraday data for more precise daily vol

Position Sizing Function

def vol_target_position(
    current_vol: float,
    target_vol: float = 0.15,
    max_leverage: float = 2.0
) -> float:
    """
    Calculate position size for volatility targeting.

    Args:
        current_vol: Current annualized realized volatility
        target_vol: Desired portfolio volatility
        max_leverage: Maximum allowed position size

    Returns:
        Position size as fraction of capital
    """
    if current_vol <= 0:
        return max_leverage

    raw_position = target_vol / current_vol
    return min(raw_position, max_leverage)


def kelly_position(
    expected_return: float,
    volatility: float,
    risk_free: float = 0.04,
    kelly_fraction: float = 0.5,
    max_leverage: float = 2.0
) -> float:
    """
    Calculate Kelly-optimal position size.

    Args:
        expected_return: Annualized expected excess return
        volatility: Annualized volatility
        risk_free: Risk-free rate
        kelly_fraction: Fraction of full Kelly to use (0.5 = half Kelly)
        max_leverage: Maximum allowed position size

    Returns:
        Position size as fraction of capital
    """
    if volatility <= 0:
        return 0

    excess_return = expected_return - risk_free
    full_kelly = excess_return / (volatility ** 2)
    fractional = full_kelly * kelly_fraction

    return max(-max_leverage, min(max_leverage, fractional))

Combining Kelly and Vol-Targeting

In practice, you might blend both approaches:

def hybrid_position(
    signal_strength: float,  # Your momentum signal, standardized
    current_vol: float,
    target_vol: float = 0.15,
    max_leverage: float = 2.0
) -> float:
    """
    Hybrid sizing: use signal for direction/conviction, vol for scaling.

    The idea:
    - Signal determines the 'base' position (long/short/neutral)
    - Vol-targeting scales it to maintain constant risk

    Args:
        signal_strength: Standardized momentum signal (-1 to 1 scale)
        current_vol: Current annualized volatility
        target_vol: Desired portfolio volatility
        max_leverage: Maximum allowed position size

    Returns:
        Signed position size
    """
    # Base position from signal
    base_position = signal_strength  # Could be more sophisticated

    # Vol-targeting multiplier
    vol_scalar = target_vol / current_vol if current_vol > 0 else 1.0

    # Combined position
    position = base_position * vol_scalar

    return max(-max_leverage, min(max_leverage, position))

Connections to Other Fields

Bond Math and Duration

In fixed income, duration measures sensitivity to rate changes. Duration-matching is a form of risk targeting: you adjust positions so that your portfolio's duration (rate sensitivity) matches your target.

Vol-targeting is the equity analogue: adjust positions so that portfolio volatility (market sensitivity) matches your target. Both are about constant risk exposure.

Options and the Greeks

In options, delta tells you how much the option price moves per $1 of underlying. Delta-hedging maintains a delta-neutral portfolio—another form of risk targeting.

The Black-Scholes PDE shows that σ\sigma is the key parameter. Vol-targeting uses the same σ\sigma, but for position sizing rather than option pricing.

Information Theory

Kelly's original paper was about information theory, not finance. He showed that a gambler with a noisy channel (partial information about outcomes) should bet proportionally to the edge-to-odds ratio—the same μ/σ2\mu/\sigma^2 formula.

This connects to maximum entropy principles: Kelly betting maximizes the growth rate, which is equivalent to minimizing relative entropy between your wealth trajectory and the optimal one.

Bayesian Decision Theory

The fractional Kelly approach is essentially Bayesian: you're incorporating uncertainty about your parameters into your betting strategy. If you knew μ\mu and σ\sigma perfectly, you'd bet full Kelly. With uncertainty, you shade toward conservative.

This is the same logic in shrinkage estimators: pull estimates toward a prior (zero, in Kelly's case) when evidence is weak.


Summary

Position sizing is half the game. A brilliant signal with reckless sizing will underperform a mediocre signal with thoughtful sizing.

Two key frameworks:

  1. Kelly criterion: maximize long-run growth by betting f=μ/σ2f^* = \mu/\sigma^2
  2. Volatility targeting: maintain constant risk with wt=σtarget/σtw_t = \sigma_{\text{target}}/\sigma_t

Practical wisdom:

  • Use fractional Kelly (25-50%) to hedge parameter uncertainty
  • Vol-targeting is robust because σ\sigma is more predictable than μ\mu
  • Explicitly model position changes across volatility regimes
  • Combine signal strength with vol-scaling for a hybrid approach

The same mathematics appears across finance:

  • Duration and convexity in bonds
  • Delta and vega in options
  • Information ratios and tracking error in portfolio management
  • Shrinkage and regularization in statistics

Position sizing is where probability theory meets real money. It's worth getting right.


What's Next

Canto III will explore multi-asset momentum: diversifying across markets, dealing with correlation, and the challenges of cross-sectional momentum. How do you size positions when you're trading 50 assets, not 1?


Further Reading

  • Kelly, J.L. (1956). "A New Interpretation of Information Rate"
  • Thorp, E.O. (2006). "The Kelly Criterion in Blackjack, Sports Betting, and the Stock Market"
  • Moskowitz, T., Ooi, Y.H., Pedersen, L.H. (2012). "Time Series Momentum"
  • Barroso, P., Santa-Clara, P. (2015). "Momentum has its Moments"
  • Risk-Free Rates in PE — how rfr_f flows through valuation
  • Black-Scholes-Merton — the role of σ\sigma in option pricing
  • Geometric Brownian Motion — why volatility matters for compounding