Learn / Risk & Position Sizing
Designing a daily loss limit
A daily loss limit is worth more than the losses it prevents, because the gain required to undo a drawdown grows faster than the drawdown itself. That is the whole argument, and it is arithmetic rather than temperament.
Choosing the number is the easy part. The design questions are the ones that decide whether the limit works when it is needed.
Why the limit is worth more than it costs
Recovering a drawdown d requires a gain of d ÷ (1 − d):
| Stopped at | Recovery required |
|---|---|
| −3% | +3.1% |
| −6% | +6.4% |
| −10% | +11.1% |
| −20% | +25.0% |
| −30% | +42.9% |
Stopping a bad day at 6% rather than 20% does not save 14 points. It saves the difference between needing 6.4% and needing 25% — roughly four times the work, for a bit over three times the loss. The drawdown recovery calculator shows the curve for your own numbers.
The value of the limit is not the loss it prevents. It is the recovery it prevents you from needing.
The design questions
What counts toward the limit
Realised losses only, or unrealised too? Realised-only is simpler and can be gamed without intending to: an open losing position is not counted, so the limit does not trip while the actual damage accumulates. Including unrealised marks means the limit responds to the account as it is, and also that a position moving against you intraday can trip it before you meant to close.
The defensible default is realised plus unrealised, because the limit exists to protect the account rather than the ledger.
Fees and funding? Yes. They come out of the same balance, and a high-turnover day can lose meaningfully to costs alone. See the trading fee calculator for the scale.
Measured against what? Balance at the start of the day is the usual choice and the easiest to reason about. Measuring against a high-water mark turns the daily limit into a drawdown limit, which is a different control with different behaviour.
When the day starts
Less trivial than it sounds for a 24-hour market. Options are exchange day, UTC midnight, or your local morning. The only wrong answer is one that is not written down — an ambiguous boundary is one you will resolve in your favour at the moment it matters.
Beware the double-day: a limit resetting at 00:00 UTC means a bad evening and a bad morning are two separate budgets a few hours apart.
What happens when it trips
Block new entries. The core behaviour.
Do not block exits. This is the one that has to be right.
A breaker that prevents you from closing a position is worse than no breaker. It converts a bad day into an uncontrolled one, and it fails in exactly the circumstance it was built for.
So closing orders — anything that reduces exposure — must be exempt. Test this explicitly rather than assuming the implementation got it right; it is an easy thing to get wrong and an expensive thing to discover live.
What about modifying stops? Moving a stop closer reduces risk and should be allowed. Moving it further away increases risk and should not be. If that distinction is hard to implement, allow only stop-tightening while the limit is tripped.
How long does it stay tripped? Until the next day boundary, in the simple version. A manual override defeats the purpose — the moment you want to override it is the moment it is working.
Where it is enforced
The limit has to be evaluated before the order goes out, as a function that can return false. Not as a reminder, not as a note in a prompt, not as something you are keeping in mind.
This matters most when a model is drafting the trades. A limit written into a prompt is a strong input to a probabilistic process — it holds most of the time, which is why you stop checking, and fails unpredictably in the unusual situations that motivated it. The longer version of that argument is in why MCP needs an approval layer.
Choosing the number
Work backwards from what you can recover from rather than forwards from what feels tolerable.
- Take your risk per trade.
- Take the expected longest losing streak for your win rate — see losing streak probability.
- Compute what that streak costs:
(1 − f)^k. - Ask whether the recovery required from that number is one you would actually attempt.
A limit that sits above the cost of a normal losing streak never fires, and is decoration. A limit that sits below the cost of two or three ordinary losses fires constantly and trains you to disable it. Somewhere between those is a number that binds only on genuinely bad days.
There is no universal answer, and anyone giving you one without knowing your strategy’s streak profile is guessing.
Failure modes
Trading larger before the limit to “make it back”. The limit is a budget, and budgets invite spending. Position caps enforced independently are the counterweight.
Switching instruments or accounts. A per-account limit that does not follow you is not a limit.
Treating it as a target. Losing to the limit most days is not the breaker working. It is a signal about everything upstream of it.
Never triggering it. Also information — the limit may be set so wide it cannot bind.
FAQ
What is a reasonable daily loss limit?
It depends on your risk per trade and how long your losing streaks run, so there is no general number. The useful construction is to compute what your expected longest streak costs at your risk percentage, check the recovery that implies, and set the limit below the point where recovery stops being realistic. A limit that never fires and one that fires daily are both misconfigured.
Should unrealised losses count toward the limit?
Generally yes. A realised-only limit does not respond to an open position moving against you, which is precisely when the account is being damaged. Including unrealised marks means the breaker tracks the account rather than the ledger, at the cost of occasionally tripping on a position you intended to hold through.
Can I still close positions when the limit trips?
You must be able to. A breaker that blocks exits turns a bad day into an uncontrolled one and fails in the exact situation it exists for. Exempt anything that reduces exposure, allow stops to be tightened but not widened, and test this behaviour deliberately rather than trusting that it was implemented correctly.
Why not just decide to stop when I have lost enough?
Because the point at which the limit matters is the point at which your judgement is least reliable — several losses in, convinced the next trade comes back. A limit evaluated as code behaves the same on the tenth trade of a bad day as on the first, and that property is exactly what an intention cannot provide.