TL;DR
A hard stop-loss is a resting order the broker's server holds independently of your terminal; a virtual stop is logic inside your EA or platform that watches price and sends a close order when it's hit. Firms that mandate hard stops can flag or void a strategy running virtual exits, because a dropped connection means the virtual stop simply never fires. You check for this by pulling the order back from the broker after you submit it and confirming the stop field is populated server-side — not by trusting your EA's own log.
If an account has ever died on a candle where you were certain a stop-loss was set, you may have had a stop-loss — just not the kind the firm was checking for. There's a real, mechanical difference between a stop your platform knows about and a stop your broker's server knows about. On accounts that require the latter, only one of those counts, and the gap between them is where a lot of otherwise-fine strategies get disqualified.
What 'hard stop-loss required' actually means
A hard stop is an order attached to your position at the broker level, submitted with or immediately after the entry. It sits on the server whether or not your terminal is open. A virtual stop is different: it's a price level your EA or platform tracks in memory, and when price crosses it, your software sends a close order in response. Nothing is resting anywhere until that moment. The trade is unprotected right up until your own code notices and reacts.
Why firms care: the disconnection problem
The failure mode a hard-stop rule is written to prevent isn't a bad entry — it's an entry that was fine until the terminal stopped talking to the market. VPS reboot, ISP drop, broker-side outage, a platform crash mid-session: any of these can leave a virtual stop simply not existing anywhere except in code that isn't running. A firm underwriting your account has no way to distinguish 'disciplined trader whose connection dropped' from 'trader who never had a real stop.' Requiring the order to live on the server removes that ambiguity, and removes it from your side of the trade too — the stop doesn't need your machine to still be awake.
How to tell if your platform is actually sending a hard stop
The confusing part is that a lot of setups look identical from the trader's chair — you set a price, you see a line on the chart — and behave completely differently underneath. The chart doesn't tell you where the order lives.
| Setup | Where the stop actually lives | What happens if the connection drops |
|---|---|---|
| Server-side SL/TP attached to the order | On the broker's server, from the moment the order fills | Stop still executes; the broker fills it independent of your terminal |
| EA-managed 'virtual' stop (price-watching logic) | In the EA's memory, on your terminal or VPS | Nothing fires until the EA reconnects and re-evaluates price |
| Bracket order via a platform API (TradeLocker/DXtrade REST) | Depends on whether the call created a resting order or a client-side watcher | Check the returned order type — a 200 response isn't proof of a resting order |
| Copied trade via a signal or copier tool | Wherever the master account's stop lives, not necessarily replicated as a server order on the follower | Follower account can sit with no protection until the copier's next tick |
Automating the check before you submit an order
- Pull the order object back from the broker after placing a trade — not just the response your own code logged when it sent the order.
- Confirm the stop-loss field is populated on the broker's copy of the order, not only on your local order ticket.
- Simulate a dropped connection deliberately — kill the terminal or VPS session — and watch whether the position closes on its own or just sits open.
- Cross-reference the firm's contract language for the exact wording it uses: 'guaranteed stop-loss,' 'server-side stop,' or 'virtual stop' mean different things and the term is not standardized firm to firm.
- Re-run the check after any platform, broker, or bridge migration. A hard stop confirmed on MT5 direct doesn't carry over automatically through a copier or a new API integration.
Where this shows up in the rulebook
This isn't usually a headline rule — it's a clause inside execution or EA-usage terms, phrased in language that assumes you already know the distinction between a resting order and a watching script. That's the trap: a trader reads 'stop-loss required' and assumes any stop qualifies. Read the specific account's terms directly rather than going by what a forum thread said about a different firm's rules, since the wording and enforcement differ by product line even within the same company.
Citations
FAQ
- What's the actual difference between a hard stop-loss and a virtual stop-loss?
- A hard stop is an order resting on the broker's server, attached to the position, that executes independently of your terminal. A virtual stop is logic inside your EA or platform that watches price and sends a close order only when triggered — nothing is resting anywhere until your own software acts.
- Why would a prop firm reject or flag a virtual stop-loss?
- Because a virtual stop depends on your terminal, VPS, or connection staying live. If any of those drop, the stop never fires, and the firm has no way to distinguish that from an account that never had real risk control in place.
- How do I know if my own EA is using a hard stop or a virtual one?
- Pull the order object back from the broker after it fills and check whether the stop-loss field is populated on the broker's side, not just in your EA's internal log. If the field is empty on the broker's copy, the stop is virtual regardless of what your EA displays.
- Does MT4 or MT5 send a hard stop by default?
- It depends on how the order is placed. A stop-loss set as part of the order request is generally server-side. A stop managed by an EA's OnTick logic that closes the position manually when price is reached is virtual, even on the same platform.
- Can a copy-trading or signal-copier setup break a hard stop-loss requirement?
- Yes. The master account's stop may be server-side, but the follower account's copy of that trade isn't automatically protected the same way — it depends on whether the copier replicates the stop as a resting order or just watches and reacts on its own schedule.
- What happens to an open position if the connection drops while it's protected by a virtual stop?
- The position stays open with no protection until the connection is restored and the EA re-evaluates price. If price moves through the intended stop level during that gap, nothing closes the trade.
- Is checking for a hard stop enough to guarantee compliance with a firm's rules?
- No. It confirms the mechanism, not the contract. You still need to read the specific account's terms to know whether a hard stop is actually required, and whether other restrictions — like EA bans or sizing limits — apply on top of it.
How we maintain accuracy
Reviewed by Ryan Tran, Strategy Lead, Glitch Executor. Every quantitative claim cites a primary source; firm-rule values come from the firm-rule registry audited quarterly in this repo. No paid placements, no fabricated reviews.
Post last reviewed . Tier 1 surface last reviewed .

Written by Ryan Tran
Strategy Lead · Glitch ExecutorWrites on prop-firm rule modelling, backtest correctness, and why most "passed challenge" stories don't reproduce.
More from Ryan
