Every trader knows they need a stop-loss. Fewer think carefully about where that stop actually lives. Whether it sits on the exchange, runs in your browser, or lives on a dedicated server determines whether it will fire when you need it most. In crypto, where flash crashes happen at 4am on a Sunday, this is not academic. It is the difference between a controlled loss and a liquidation.

Three ways to place a stop-loss

There are three approaches, each with different properties around reliability, visibility, and execution.

First: place a stop-loss order directly on the exchange. The exchange holds it and executes when price reaches your level. Second: client-side. Your trading app (browser tab, desktop app, phone) monitors price and sends a market order when the stop is hit. Third: server-side. A dedicated server process watches every price tick and sends a market order when your stop triggers.

From the trader's perspective, all three look the same. Set a stop, price hits it, position closes. But the underlying mechanics are completely different, and those mechanics determine what happens when things go wrong – internet drops, browser crashes, exchange under stress, or you're asleep.

Exchange stop-losses

The most straightforward approach. Submit a stop order to the exchange, the matching engine holds it until the trigger price is reached, converts it to a market order, fills against available liquidity.

The advantage is uptime reliability. As long as the exchange is operational, your stop is active. Doesn't depend on your internet connection, your device, or any third-party server.

The disadvantage is visibility. When you place a stop on an exchange, that order exists in the exchange's systems. On some exchanges, stops are visible in aggregated order book data. Even when they're not directly visible, the exchange knows where your stop is. Other participants with depth-of-market data or level 2 order flow can see clusters at predictable levels.

This creates an incentive for stop hunting. A large number of stops clustered around support, a well-capitalized participant pushes through, triggers the cascade, absorbs the forced sells, lets price revert. The stops did exactly what they were supposed to do – they executed. But the execution happened because someone deliberately manufactured the trigger condition.

Exchange stops are also limited in what they can express. A standard stop is static: one price, triggered once. If you want a trailing stop that moves with the market, a break-even stop that adjusts at a profit threshold, or a multi-stage take-profit that scales out of a position, you can't do it with a single exchange order. Those behaviors need continuous monitoring and adjustment.

Client-side stop-losses (browser/app)

Client-side works differently. Instead of placing an order on the exchange, the trading app on your device monitors price. When it crosses your stop level, the app sends a market order to close. From the exchange's perspective, no stop order exists. Nothing to see until the moment it fires, and then it looks like any other market order.

This solves the visibility problem. Nobody can see your stop – not the exchange, not market makers, not anyone analyzing depth. It's stored in your local app's memory, invisible until it triggers. Nothing to hunt.

But client-side stops introduce a worse problem: they only work when the client is running.

Close the browser tab, stop disappears. Laptop goes to sleep, stop goes dormant. Lose wifi, the stop can't send the closing order even if it detects the price movement. A JavaScript error crashes the tab. A browser update restarts the browser. A system update restarts the device. Power outage takes everything offline. In every one of these scenarios, the stop simply does not exist.

For someone day-trading equities during market hours, sitting at their screen the entire time, client-side might be acceptable. But crypto is not equities. The always-on market makes client-side stops fundamentally unreliable.

Server-side stop-losses

Server-side combines the strengths of both approaches. A dedicated server receives every price tick from the exchange via a persistent WebSocket connection. It holds all active stop levels, take-profit levels, and trailing stop parameters in memory. On every tick, it checks whether any condition has been met. When triggered, it immediately sends a market order to close.

From the exchange's perspective, identical to a client-side stop. No stop order on the exchange. Invisible to the order book, to other participants, to anyone analyzing exchange data. When it fires, it looks like an ordinary market order. Nothing to hunt.

But unlike client-side, the server runs 24/7. Doesn't matter if the trader has a browser open. Doesn't matter if their laptop is charged, connected, or turned on. The server runs on dedicated infrastructure with reliable power, network redundancy, and automatic restart. The stop is active whether the trader is at their desk, at dinner, asleep, or on a plane.

The tradeoff is latency. An exchange-native stop fires at the microsecond level inside the matching engine. A server-side stop adds one network hop: price data travels from exchange to server, server evaluates the condition, server sends the order back. Round trip: 200 to 800 milliseconds depending on geographic proximity and API response time.

For the vast majority of crypto trading, this is negligible. Sub-second execution on a stop is more than adequate. The scenarios where microsecond latency matters – high-frequency market making, latency arbitrage – are not scenarios where stop-losses are used at all.

The 24/7 problem

This is the single most important factor in the comparison, and it is specific to crypto.

Traditional markets have defined hours. NYSE operates 9:30am to 4:00pm Eastern. CME futures have specific sessions. When the market is closed, prices don't move. Set your stops during market hours, turn off the computer when the bell rings. Risk is bounded by the schedule.

Crypto has no schedule. Bitcoin trades continuously, Monday through Sunday, holidays included. The most violent moves often happen outside Western business hours. Asian session volatility, weekend liquidation cascades, surprise regulatory announcements at midnight UTC – these don't wait for traders to be at their desks.

A concrete scenario. Trader opens a leveraged long at $65,000 during the US afternoon. Sets a client-side stop at $63,000, 3% adverse move. At 7pm, closes the laptop, goes to dinner. At 4:17am, a large sell triggers a liquidation cascade. Bitcoin drops from $64,200 to $58,000 in twelve minutes. By 4:30am, partial recovery to $61,500.

With the client-side stop: laptop is closed, browser not running, stop doesn't exist. Trader wakes up at 8am to find the position underwater by $3,500 per coin. At 10x leverage on a $50,000 position, that's a devastating loss. Depending on margin, they may have been fully liquidated by the exchange's own liquidation engine – at the worst possible price, during the cascade, not at their intended $63,000 level.

With a server-side stop: the server receives the $63,000 tick and immediately sends a market order to close. Fill comes at $62,950 or $62,900 due to slippage in a fast market, but the position is closed within risk parameters. By the time BTC hits $58,000 four minutes later, the trader's capital is safe. They wake up to a controlled loss, not a catastrophe.

This is not hypothetical. Overnight flash crashes in crypto happen regularly. Any risk management approach that requires the trader's device to be on will eventually fail at the worst possible time.

What about exchange conditional orders?

Some exchanges offer "conditional" or "trigger" orders that sit in a separate queue from the regular order book. Not visible in depth-of-market data. When the trigger price is reached, the exchange converts it to a market or limit order.

Better than a standard exchange stop for visibility. Other traders can't see it in order book data. But there are limitations.

The exchange still knows about it internally. Anyone with privileged access to exchange systems can see it. In a regulated market with strict separation between exchange operations and proprietary trading, maybe that's fine. In crypto, where many exchanges operate their own trading desks or have opaque relationships with affiliated market makers, the separation is less clear.

You're also trusting the exchange to execute your conditional order fairly during extreme volatility. During a liquidation cascade, when the matching engine is under maximum load, conditional order processing can be delayed. There are documented incidents of exchange infrastructure struggling during high-volatility events, with conditional orders delayed or triggered at unexpected prices.

And if the exchange has a technical outage – which happens, even on major exchanges – your conditional order isn't active during the outage. No fallback.

A server-side stop removes the exchange from the trigger logic. The server monitors price independently. The exchange is only involved at the final step: receiving a market order to close. The decision to close is made by your infrastructure, not delegated to the exchange.

Trailing stops, break-even, and multi-TP

Everything above focused on simple stops: static price, triggers a market order. But real risk management involves dynamic stop behavior that a single exchange order can't express.

A trailing stop follows price upward (for a long), maintaining a fixed distance below the highest price reached. BTC moves from $65,000 to $68,000, a trailing stop with a $2,000 trail moves from $63,000 to $66,000. Price reverses to $66,000, stop fires. Requires continuous monitoring and adjustment on every tick. No single exchange order does this.

A break-even stop moves the stop level to entry price once the position reaches a profit threshold. Position hits $1,000 profit, stop moves to entry, trade can no longer become a loss. Requires monitoring current price relative to entry and modifying the stop when the threshold is crossed.

Multi-stage take-profit means scaling out at different levels. Take 25% at the first target, move stop to break-even, take another 25% at the second, trail the remaining 50%. Each stage depends on the previous. Stateful, multi-step, needs continuous execution logic.

All of these need a running process. Can't be set as exchange orders and forgotten. The question is whether that process runs on the trader's device or on a dedicated server. A process on the trader's device stops running when the device is closed.

For prop firms, the server-side advantage is even more pronounced. A firm needs centralized visibility into all trailing stops, break-even levels, and TP stages across all traders. Client-side would require every trader's device to be online for the firm to have an accurate picture. Server-side means the firm sees complete state at all times – the server is the single source of truth.

Latency: the honest tradeoff

Server-side stops aren't strictly superior in every dimension. The tradeoff is execution latency.

An exchange-native stop triggers inside the matching engine. Microseconds between trigger and conversion to market order. No network transit.

A server-side stop adds a full round trip. Price data travels from exchange to server via WebSocket, server evaluates the condition (microseconds of CPU time), server sends a market order back via API. Total: 200 to 800 milliseconds depending on network conditions and server location.

Is this meaningful? Almost never. A stop-loss is a risk management tool, not a precision execution tool. The difference between exiting at $63,000 and $62,980 (a $20 difference from 500ms of latency) is insignificant next to the difference between exiting at $63,000 and not exiting at all because your laptop was asleep.

The scenarios where sub-millisecond stop execution matters – HFT, statistical arbitrage, market making – don't use stop-losses in the first place. Those strategies manage risk through position limits, inventory controls, and rapid hedging. If you're placing stops, you're on a timeframe where 500ms is noise.

The latency concern is real in one specific scenario: an extremely fast, extremely large gap where every millisecond of slippage compounds. But during such events, exchange-native stops also suffer significant slippage because liquidity evaporates. The fill quality difference between exchange and server-side stops during a genuine liquidity crisis is minimal – both are executing into the same thin order book.

Making the choice

Once you understand the properties of each approach, the decision is straightforward.

If you trade crypto and ever step away from your screen – which is everyone – server-side is the only reliable option. Client-side fails the moment you close your browser, and crypto doesn't wait for you to reopen it.

If you manage multiple traders (prop firm, fund, asset manager), server-side isn't just preferable, it's necessary. Centralized enforcement of risk limits, centralized visibility into stop levels, guarantee that stops are active regardless of whether each trader has their app running. Client-side architecture makes firm risk management dependent on each trader's browser uptime. Not tenable.

If stop hunting is a concern – and in crypto, it should be – you need stops invisible to the exchange. Both client-side and server-side achieve this, but client-side fails the reliability test. Server-side gives you both invisibility and 24/7 reliability.

Exchange-native stops are acceptable in a narrow case: you trade infrequently, don't use trailing or break-even stops, aren't concerned about visibility, and trust the exchange to execute fairly during high volatility. For set-and-forget traders with no privacy concerns, exchange stops are simple and always active. But they are the least sophisticated option and expose your risk management to anyone with order book access.

In a market that never sleeps, your stop can't sleep either. The only way to guarantee that is to run it on infrastructure that is always on, always connected, independent of any trader's device. That means server-side.

RiskGate runs all stop-losses, take-profits, and trailing stops server-side – 24/7, even when your browser is closed.

Learn More