By Scalpel Team. , updated . 9 min read.

In short
A client-side stop loss is a stop your trading app holds instead of your broker: the app watches the price, and when price trades through your level it sends a real exit order. Scalpel's stops work this way because Scalpel is built for the pre-market, when US exchanges take limit orders only, so a plain stop cannot fire and a stop-limit can be jumped. The cost is real: a client-side stop only works while Scalpel is running, connected to IBKR and streaming that symbol, and no exit price is ever guaranteed.
Every Scalpel position carries a working stop, a wider catastrophe net and a take-profit, and none of them is an order at Interactive Brokers. That is a design decision worth questioning: a client side stop loss moves a safety job from the broker's servers to the trader's computer. This post is why we made that trade, how the stop works inside the app, and every way we know it can fail, with what we do about each. Scalpel is independent and not affiliated with or endorsed by Interactive Brokers.
A stop is a rule, "if price trades here, get me out", and something has to watch the price to apply it. There are two places that watcher can sit for an IBKR trader.
| Broker stop (held by IBKR) | Client-side stop (held by the app) | |
|---|---|---|
| Who watches the price | IBKR's systems | Your trading app, on your computer |
| What it sends when hit | A market order (stop) or a limit at your price (stop-limit) | Whatever the app is built to send |
| Works with your computer off | Yes | No |
| Works before 09:30 ET | A plain stop does not; a stop-limit can be set to | Yes, if the app sends a limit order |
| Can move itself (trail a candle low, breakeven by key) | Only the order types the broker offers | Whatever the app implements |
| Visible as an order at the broker | Yes | No |
The SEC's investor site defines the ordinary version plainly: when the stop price is reached, your stop order becomes a market order, and its advantage is that "you don't have to monitor how a stock is performing". A client-side stop gives up exactly that advantage. Something must be running and watching. We decided that was worth it for one reason: the hours we built Scalpel for.
Scalpel is built for long-only scalping of US small caps, pre-market first, when gappers make many of their biggest moves on thin books. Three facts about those hours shaped the stop.
Outside 09:30 to 16:00 ET, orders need a price. The SEC's bulletin on extended-hours trading says many brokerage firms accept only limit orders in those sessions, and warns about thin liquidity. A stop that turns into a market order has nothing it is allowed to send. On IBKR Campus's lesson on trading outside regular hours, the comments are full of traders asking how to protect a pre-market position for exactly this reason. IBKR's short video on the same lesson shows the outside-RTH setting and what it allows.

There are no price bands before the open. FINRA notes that the Limit Up-Limit Down plan, which keeps trades inside a band around the recent price (10% for most stocks above $3.00, 20% from $0.75 to $3.00), applies during regular trading hours from 9:30 a.m. to 4:00 p.m. ET. Before 09:30 nothing stops a small cap from printing far below its last trade, which is when a stop-limit's fixed floor gets jumped and left behind (how a stop-limit gets jumped).
A market order in a collapse takes any price. On May 6, 2010, the joint SEC and CFTC staff report found that over 20,000 trades across more than 300 securities were executed at prices 60% or more away from their prices minutes earlier, and listed retail stop-loss orders among the selling pressure. That was in regular hours, with market orders allowed. It is why Scalpel's exit is always a limit order, priced to fill, never a market order.
Put together, a plain stop at the broker cannot protect a pre-market trade, a stop-limit can be skipped, and a market order is the wrong tool in a thin book. That left the app.
Every entry arms three levels (how stops work): the working stop you trade with, a catastrophe net under it (3 x ATR by default, or twice the stop distance on a risk-sized entry), and a take-profit at 2R. The execution thread checks them on every price update for the symbol: the take-profit first, then the catastrophe net, then the working stop, so a gap through both stops goes out as a catastrophe stop.
When one is hit in LIVE:
Every sell is clamped to the shares you hold, so re-pricing can never put you short. The levels are saved to disk on every change, so after a restart they come back where you left them, dragged, trailed or at breakeven.
You hold 600 WXYZ from 3.20 at 07:20 ET with a 10-cent working stop at 3.10. Your planned risk, 1R, is $60. The prints go 3.12, 3.11, then 3.06.
Average exit: (200 x 3.05 + 100 x 3.03 + 300 x 2.95) / 600 = 1,798 / 600, about 2.997. The loss is $122 before fees, about 2R instead of the 1R you planned. That is the honest shape of a pre-market stop: it got you out, at a worse price than the line on your chart. A stop-limit at 3.10 with a 3.08 limit would have filled nothing and still be resting above the market.

This is the part a client-side stop has to be honest about. Each row is something that can happen, what Scalpel does, and what you should do.
| What happens | What Scalpel does | What you do |
|---|---|---|
| Scalpel is closed, crashed, or the computer sleeps | Nothing watches the position. LIVE stops are saved; on the next start Scalpel reconciles with your IBKR positions, and the first price that arrives fires the exit if the stop was crossed in the meantime | Close positions before you close Scalpel |
| The link to TWS or IB Gateway drops | No prices arrive, so nothing can fire. You hear "Connection lost." and see an amber toast; each connection reconnects on its own. An order that waited more than 2 seconds through the gap is refused, not sent at an old price | Fix the connection first (fix a disconnect), or manage the position in TWS |
| You hold a symbol that is on no desk | It has no price feed, so its stop is not watched. Scalpel warns: "position held but on no desk, so its stop is not watched. Load it on a desk." and repeats it every few minutes | Keep every held symbol on a desk |
| The book empties under you | The exit fills below your stop, or not at once. Scalpel re-prices up to 5 times, then tells you to check it in TWS | Press Esc: Flatten All replaces the exit with one sell about 1% under the bid (scale out and flatten) |
| A wick between quote updates | The stop checks the last price on IBKR's streaming quote, which IBKR's API documentation says is a snapshot taken every 250 ms for stocks. A print through your stop and back inside one snapshot may never be seen | Nothing to do: it cuts both ways, and a single stray print rarely fires your stop |
| A bad tick | A price more than 25% away from the last good one is treated as a feed glitch and ignored for up to two updates, then accepted. A real 25% collapse in one print reaches your stop a couple of updates late | Size so a late, worse fill is survivable |
| A halt | Nothing trades, so the exit waits like every other order (LULD halts) | Decide in TWS when it reopens |
| You press Ctrl+Q on a working exit | Cancel stops Scalpel working the exit. The stop is already used up, so you hold the shares with no stop | Use Esc to get out, not Ctrl+Q |
Our first architecture notes planned a native protective stop at IBKR under every LIVE position, as a crash net beneath the app's stop. The app that ships places only limit orders, and the catastrophe net lives in the app beside the working stop. As we see the trade-off: a plain broker stop could not fire before 09:30 anyway, which is when the net matters most to us, and a second resting sell for the same shares would sit beside every exit and scale-out the app sends. One owner for the exit is easier to reason about when the market is moving.
We could be wrong for your style. If you hold positions while away from the screen, trade only in regular hours on liquid stocks, or swing trade, a resting stop at IBKR protects you with your computer off, and that beats anything an app can do. The pre-market stop loss post shows how to set one up in TWS alone. If you place your own stop in TWS on a position Scalpel also manages, Scalpel does not manage that order, so test how the two interact in your paper account before you rely on both.
Scalpel is a keyboard-first cockpit for your own IBKR account, and app-held stops are one consequence of building it for the pre-market. The working stop and take-profit are lines you drag on the chart (drag stops and targets), every level is tuned in Settings > Stops (settings: stops), and the voice says "Stopped out." or "Catastrophe stop." the moment one fires, so you hear it without looking (tape reading by ear). When an exit is being worked, the Orders tab shows each re-price as a cancelled sell and a new working one.
This video walks through the three levels, dragging them, and breakeven and trailing.

The rest of the design, from the threads to the order path, is in building a trading app in Rust, and the API limits behind it are in our pillar post on scalping through the IBKR API. Rules and figures from the SEC, FINRA and IBKR were checked on October 22, 2026.
Trading carries a significant risk of loss. Nothing here is financial advice.