Setup & troubleshooting
MT5 error 10016: stop levels, freeze levels and tick size
Invalid stops usually requires inspecting the whole request: order type, current quote, entry price and protective levels. A single distance input does not tell the complete story.
Start with the request and code
The trade-server code 10016 is TRADE_RETCODE_INVALID_STOPS. Capture the order type, Bid, Ask, requested entry, Stop Loss and Take Profit at the time of the request. Check whether you are placing a market order, placing a pending order or modifying an existing position; the relevant price relationships differ.
Check two different restrictions
SYMBOL_TRADE_STOPS_LEVEL describes the minimum stop distance in points. SYMBOL_TRADE_FREEZE_LEVEL describes a zone affecting permitted operations near market prices. Treat them as separate checks. A zero published stop level is not permission to ignore price direction, tick increments or other server-side conditions.
Recheck after price alignment
Align requested prices to the symbol’s tick size and then evaluate their distances again. For example, rounding a protective level towards the market can make a previously acceptable calculated distance too small. Work from fresh quotes; a market movement between calculation and submission can also change validity.
Use a targeted debugging sequence
- Reproduce on the same symbol and request type.
- Compare the requested prices with current symbol restrictions.
- Inspect OrderCheck and the trade-server result.
- Change the specific price calculation, then rerun the failing case and an ordinary valid case.
Make it yours with MQLume
MQLume gives technically capable traders the editable project needed to inspect execution rules. Start with Ultimate Breakout System MT5 and its parameter guide.