Skip to content
Join the waitlistWaitlist

Stops only tighten

Why a stop can move towards the price but never away from it, and how a stop is replaced without a moment unprotected.

A stop may move closer to the price. It may never move further away. A request to loosen a stop is ignored.

This is true today in Zunder’s Session (crates/zunder-exec/src/session.rs) and in the risk engine’s record of positions (RiskEngine::record_stop).

You hold a long BTC position, entry 60,000, stop 58,800.

RequestResult
Move the stop to 59,400done: tighter (closer to the price)
Move it back to 58,800ignored: looser than 59,400
Move it to 59,700done

For a short, “tighter” means lower.

Try it · a long from 60,000 illustration of the rule
entry 60,000 ignored stop 58,800
stop resting on the venue
58,800
last request
none yet
risk at the stop, 0.03 BTC
$36

The size of a trade was computed from its stop (Sizing from the stop). Moving the stop away after the fact makes the trade riskier than the budget allowed, without the risk engine ever seeing it. Tightening only reduces risk.

It also keeps the open-risk budget honest. Open risk is quantity × distance to the stop. If stops could widen, the budget would fill up silently.

A new stop is placed before the old one is cancelled, also when a restart finds several. A crash in between leaves two stops resting, never none. The looser one is then cancelled at the next reconciliation.

  • A stop that is not trailed stays where it was. Tightening is the strategy’s job; Guard only refuses the opposite.
  • Closing a position is always allowed. “Stops only tighten” never stands in the way of an exit.

Backtest and Watch cannot judge this rule: a public account can loosen its own stops, and the tools see only what happened.

This page as plain Markdown, for people and LLMs: /docs/concepts/stops-only-tighten.md