Skip to main content

Risk Rescale

Stats, returns, curve and export accept an optional risk_pct (per-trade risk fraction). The published series are computed at each strategy's base risk (base_risk_pct); risk_pct linearly rescales them to a different risk level. This is a deterministic transform of the base-risk backtest — not a new backtest.

The exact transform

Let k = effective_risk / base_risk. Then, point-by-point on the daily return series:

ret'(t) = ret(t) × k

The equity curve is recompounded from the rescaled returns (not the base curve scaled by k — that would be wrong under compounding):

equity'(0) = 1.0
equity'(t) = equity'(t-1) × (1 + ret'(t))

CAGR and max drawdown are then recomputed from this rescaled curve, so they stay internally consistent:

CAGR' = equity'(T)^(1 / years) − 1 # years from the curve's first→last date
maxDD' = min_t (equity'(t) − peak'(t)) / peak'(t)

Sharpe, Sortino and correlation are scale-invariant — multiplying every return by a positive constant k leaves them unchanged — so they are returned identical to the base figures.

:::note Worked example At k = 2 (e.g. base 2.5% → risk_pct=0.05): every daily return doubles, the curve is recompounded, and CAGR and max drawdown change (non-linearly, because of compounding), while Sharpe and Sortino are byte-for-byte the same. You can verify this directly: GET /v1/strategies/{id}/stats vs …/stats?risk_pct=0.05. :::

What the response tells you

When risk_pct is supplied, the response meta carries the full provenance of the transform:

"meta": {
"modelled": true,
"base_risk_pct": 0.025,
"requested_risk_pct": 0.05,
"effective_risk_pct": 0.05,
"risk_pct_clamped": false
}

The rescaled curve is returned recompounded from a 1.0 base (so equity is a growth multiple, not BTC units).

The clamp

risk_pct is clamped to a conservative ceiling MAX_MODELLED_RISK_PCT = 0.10 (10% per trade). A request above the ceiling is capped and flagged:

effective_risk = min(requested_risk, 0.10)
risk_pct_clamped = requested_risk > 0.10

Why this is "modelled" — and the honest caveat

:::warning This is modelled from base, not re-backtested at the new risk The rescale is a linear model applied to the base-risk backtest. It assumes returns scale exactly proportionally with risk. A genuine re-backtest at higher risk would not be a clean linear scaling, because larger positions change fills, slippage, market impact, margin and liquidation dynamics, and the path of stop placement — none of which this transform captures.

Treat rescaled figures as an illustrative "what the same return stream looks like at a different risk dial", useful for comparing strategies on a common risk basis — not as a prediction of live results at that risk, and not a substitute for a full re-run. The base figures (no risk_pct) are the primary, directly-backtested numbers. :::