| name | position-sizing |
| description | Use when deciding how large a position to take. Covers fixed-fractional risk, volatility-based sizing, the Kelly criterion and why to fractionalize it, and portfolio concentration limits. |
| metadata | {"category":"finance","version":"1.0.0","tags":["position-sizing","risk","kelly","volatility","portfolio"]} |
Position Sizing
Purpose
Determine how much to risk on a single position, so that a losing streak is survivable and no single idea can end the account. Position sizing determines survival; entry selection determines returns. Survival comes first.
When to Use
- Deciding how many shares or contracts to buy.
- Setting a risk-per-trade policy.
- Checking whether a position breaches concentration limits.
- Reviewing why a drawdown was deeper than expected.
Capabilities
- Fixed-fractional sizing from a stop distance.
- Volatility-adjusted sizing using ATR.
- Kelly criterion, and fractional Kelly in practice.
- Concentration limits: per position, per sector, per correlated group.
- Aggregate portfolio risk.
Inputs
- Account equity.
- Entry price and stop price (or an ATR and a multiplier).
- Risk per trade, as a percentage of equity.
- Existing exposure, including correlated positions.
Outputs
- A share or contract count.
- The dollar risk if the stop is hit, stated explicitly.
- Whether the position breaches any limit.
Workflow
- Fix the risk per trade first — Typically 0.5% to 2% of equity. This is a policy decision made when calm, not a per-trade judgment made when excited.
- Determine the stop — At a level where the thesis is wrong, not at a level that produces a comfortable size. This is the discipline that everything else depends on.
- Size from the stop distance — Shares = (equity × risk%) / (entry − stop). A wider stop means a smaller position, not more risk.
- Check the concentration limits — Position size as a percentage of equity, sector exposure, and correlated exposure. A limit breached is a size reduced.
- Check the aggregate — Ten positions each risking 1% is 10% at risk if they are correlated and all stop out together. In a market-wide selloff, they will be.
Best Practices
- Never widen a stop to justify a larger position. That inverts the entire logic: the stop defines the risk, and the size follows from it.
- Correlated positions are one position. Five semiconductor names is one bet on semiconductors, and it should be sized as one.
- Full Kelly is theoretically optimal and practically unusable: it produces enormous drawdowns, and it assumes you know your edge precisely. You do not. Half-Kelly or less is the practical range.
- A 50% drawdown requires a 100% gain to recover. Sizing that permits deep drawdowns is not aggressive; it is arithmetically self-defeating.
- Volatility-based sizing normalizes risk across instruments: a fixed dollar risk on a volatile stock and a quiet one produces very different position values, and that is correct.
- Recalculate the size on the current equity, not on the starting equity. Sizing off a high-water mark after a drawdown compounds the damage.
Examples
Fixed-fractional sizing — the calculation that matters:
def position_size(
equity: float,
entry: float,
stop: float,
risk_pct: float = 0.01,
max_position_pct: float = 0.20,
) -> PositionSize:
if stop >= entry:
raise ValueError("stop must be below entry for a long position")
risk_dollars = equity * risk_pct
risk_per_share = entry - stop
shares = int(risk_dollars / risk_per_share)
max_shares_by_concentration = int((equity * max_position_pct) / entry)
limited = shares > max_shares_by_concentration
final = min(shares, max_shares_by_concentration)
return PositionSize(
shares=final,
position_value=final * entry,
dollar_risk=final * risk_per_share,
pct_of_equity=(final * entry) / equity,
limited_by_concentration=limited,
)
Kelly, and why it is fractionalized:
def kelly_fraction(win_rate: float, avg_win: float, avg_loss: float) -> float:
"""f* = p - q/b, where b is the win/loss ratio."""
b = avg_win / abs(avg_loss)
f = win_rate - (1 - win_rate) / b
return max(0.0, f)
Notes
- Kelly maximizes the expected logarithmic growth rate given a known edge. The edge is never known; it is estimated from a sample, and the estimate is biased upward by the fact that you chose this strategy because it looked good. Fractionalize accordingly.
- Correlation rises toward 1 in a crisis. A portfolio that appears diversified in normal conditions can be a single position at the worst moment. Size for the correlated case.
- This is educational material about position-sizing methodology, not financial advice. Any real allocation decision depends on circumstances this skill cannot see.