Knowledge · Terms · Position Sizing

Position Sizing

Indicator concept
Position sizing
How much capital to risk per trade? Decides long-term survivability more than any entry logic.

Why position sizing is the most important parameter

A mediocre strategy with good sizing survives. A brilliant strategy with bad sizing gets liquidated. Ed Seykota, Van Tharp, Ralph Vince — they all agree: sizing matters more than the signal.

Classic approaches

1. Fixed fractional (risk %)

risk_usd = account_equity * risk_pct
position_size = risk_usd / (entry - stop)

With 1% risk and a 1000 USDC account with a 20 USDC stop distance: - risk_usd = 10 USDC - position = 10 / 20 = 0.5 units

No matter how far the stop is — a stop hit always costs exactly 1% of the account. This is by far the most common method.

2. ATR-based sizing (volatility position sizing)

risk_usd = account_equity * risk_pct
position_size = risk_usd / (ATR * stop_mult)

The stop distance is not chosen as a fixed value but derived from current volatility (ATR). That way every trade carries the same effective risk — regardless of whether the market is currently quiet or turbulent.

3. Kelly criterion

f* = edge / odds = (W*p - L*(1-p)) / L

Mathematically optimal, but only sensible with stable expected values. In practice usually half or quarter Kelly, because full Kelly draws down too brutally under parameter estimation errors.

Rules of thumb

  • 0.5 – 1% per trade: conservative, sustainable long-term.
  • 1 – 2% per trade: aggressive, but still survivable.
  • > 2% per trade: the classic route to insolvency. After 10 consecutive losses (statistically not unusual) you are 20%+ in drawdown.

How Botty implements it

execution/config.py — the live values (updated with every registry sync):

Parameter Live value
POSITION_SIZE_PCT 1.0
Position cap 100% der Equity (MAX_POSITION_PCT = 1.0, MAX_POSITION_USD = 12.0)
LEVERAGE 3x
Vol-target sizing advisory mode (off)
Equity throttle (Turtle brake) active: −30% size per −10% drawdown from the equity high

MAX_POSITION_PCT (percentage cap) replaces the absolute MAX_POSITION_USD cap once set — an absolute cap chokes compounding, because the exposure ratio falls toward zero as capital grows.

The actual position size is derived by execution/trader.py from this percentage, the leverage, and the ATR stop. Every position is therefore both percentage-capped and volatility-adaptive.

Common mistakes

  • Sizing up after losses (martingale) → quick death.
  • Sizing down after wins (anti-martingale misinterpreted) → gives away compounding.
  • All positions the same size without accounting for stop distance → some trades carry 5x more risk than others.