Invalid Stops in MetaTrader: What It Means and How to Fix It
The short version: your stop loss or take profit is somewhere the broker will not accept. Usually it is too close to the current price, occasionally it is on the wrong side of it, and sometimes it is a rounding problem on a symbol with an unusual tick size. All three are visible in the symbol specification and the Journal.
What MetaTrader is actually telling you
In the Journal tab the line looks like this:
failed market buy 0.10 EURUSD sl: 1.08420 tp: 1.08480 [Invalid stops]
Read the two numbers against the price at that moment. The broker compared them with its own rules and refused. The order never reached the market, so nothing opened and nothing was lost — but the EA has been silently prevented from trading, which is why this often looks like a broken EA rather than a rejected order.
Cause 1: inside the stops level
This is the common one. Every symbol carries a Stops level, in points, which is the minimum distance a stop loss or take profit may sit from the current price.
Find it: Market Watch, right click, Symbols, pick the pair, read the specification. If it says 30, then on a 5-digit EURUSD your stop must be at least 3.0 pips away.
Now compare it with what the EA is trying to place. A take profit of 30 pips clears a stops level of 30 points easily. A take profit of 2 pips does not, and on a symbol where the stops level is 100 points, even a 5 pip target is impossible.
The fix is to widen the EA's stop loss or take profit past the broker's minimum, or to trade a symbol whose minimum is smaller.
Cause 2: the wrong side of the price
Less common, and usually a sign of a badly written EA or a stale price.
For a buy, the stop loss must be below the price and the take profit above it. For a sell, the reverse. If the EA calculated its levels from a price that has since moved — a fast market, a slow VPS — what was below the price may now be above it.
There is also the classic off-by-one: on a buy the entry uses Ask, and the stop distance should be measured from that, not from Bid. On a wide-spread symbol the difference is enough to push a tight stop onto the wrong side.
Cause 3: tick size and rounding
Every symbol has a tick size, the smallest price increment it accepts. Many indices and some crypto CFDs use a tick size larger than a single point.
If an EA calculates a stop price of 38412.37 on a symbol whose tick size is 0.5, the broker cannot accept it. The level has to be rounded to a multiple of the tick size first.
You cannot fix this in the settings. It is a job for the EA, and a well written one normalises every price it sends. If you see this on one exotic symbol only, that is the likely cause.
Cause 4: the freeze level
Separate from stops level, and less known. Freeze level is the distance from price within which an existing order may not be modified or closed.
It produces the same complaint in a different situation: the EA is not opening a trade but trying to move a stop, and the broker refuses because price is too close to it. The specification lists it right below stops level.
Working through it
- Open the Journal and copy the exact rejected line, including the sl and tp values.
- Open the symbol specification: stops level, freeze level, tick size, digits.
- Convert the EA's stop and take profit settings into points for that symbol and compare with the stops level.
- If they clear it, check the side: is the stop below price for a buy?
- If that is fine too, check whether the price is a valid multiple of the tick size.
In practice, step three explains most of them, and the answer is to widen the level rather than to change broker.
Why demo accounts hide this
Demo servers are frequently configured with a stops level of 0, so an EA with tight targets works perfectly there and is refused the moment it meets a live account with a real minimum.
It is one of the most common reasons a strategy that tested beautifully does nothing when funded, which is covered more broadly in demo works, live does not. If the EA is not placing orders at all and you see no rejection lines, work through EA not opening trades instead.