Stops only tighten
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).
Example
Section titled “Example”You hold a long BTC position, entry 60,000, stop 58,800.
| Request | Result |
|---|---|
| Move the stop to 59,400 | done: tighter (closer to the price) |
| Move it back to 58,800 | ignored: looser than 59,400 |
| Move it to 59,700 | done |
For a short, “tighter” means lower.
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.
Replacing a stop
Section titled “Replacing a stop”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.
What it does not cover
Section titled “What it does not cover”- 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.