The stops level in MT5 is the broker's minimum distance, in points, between the current price and a new Stop Loss, Take Profit or pending order. A level inside that distance is refused as "Invalid stops", trade server return code 10016 (TRADE_RETCODE_INVALID_STOPS). The freeze level is a separate distance within which an existing order or position cannot be modified. The broker sets both for each symbol, so read them for the exact symbol you trade.
For a TradingView alert routed to MetaTrader 5, this check happens at the end of the chain, when the broker receives the EA's order request. Stops level and freeze level sit alongside lots, pips, spreads and margin in the trading mechanics library.

Stops level and freeze level at a glance
Scroll horizontally to read every column.
| Term | What it means | Where to read it |
|---|---|---|
| Stops level | Minimum distance, in points, from the current price for a new Stop Loss, Take Profit or pending order. | Specification: Stops level. MQL5: SYMBOL_TRADE_STOPS_LEVEL
|
| Freeze level | Distance, in points, within which a pending order or an open position's stops cannot be modified. | MQL5: SYMBOL_TRADE_FREEZE_LEVEL. Not in MetaQuotes' list of Specification fields. |
| Point | The price value of one point, such as 0.00001 on a five-digit quote. | MQL5: SYMBOL_POINT. Ask the broker if your terminal view lacks it. |
| Price checked | Buy position: the Bid. Sell position: the Ask. Stops on a pending order: its open price. | MetaQuotes' checklist for Market products |
| Stop too close | 10016, TRADE_RETCODE_INVALID_STOPS: "Invalid stops in the request". |
Experts and Journal tabs. MQL5 return codes. |
| Order or position frozen | 10029, TRADE_RETCODE_FROZEN: "Order or position frozen". |
MQL5 return codes |
| PineConnector pip | 10 points of the symbol's quote, so points ÷ 10 = PineConnector pips. | PineConnector Syntax: PineConnector pip |
MetaQuotes' MQL5 reference defines the stops level as the "Minimal indention in points from the current close price to place Stop orders". It defines the freeze level as the "Distance to freeze trade operations in points".[1] Both are whole numbers of points. MetaTrader 5 Help describes the terminal's Stops level field in the same way, as of 25 September 2026.[2] The return codes come from MetaQuotes' list of trade server return codes.[3]
How do you calculate the minimum stop distance in MT5?
Minimum stop distance = Stops level (points) × Point
Point is the price of one quoting point: 0.00001 on a five-digit EURUSD quote and 0.001 on a three-digit JPY quote. PineConnector's lookup guide uses the same formula, with the example "20 × 0.00001 = 0.00020".[4] Tick size is a different value. The guide notes that tick size governs valid price increments, not the stop distance.
Buy: Bid − Stop Loss ≥ minimum distance, and Take Profit − Bid ≥ minimum distance. Sell: Stop Loss − Ask ≥ minimum distance, and Ask − Take Profit ≥ minimum distance.
The price that matters is the one that would close the position. MetaQuotes' checklist for Market products says a buy "is done at the Ask price", so its levels "should be compared to the Bid price". A sell mirrors this against the Ask.[5] On a pending order, the Stop Loss and Take Profit are measured from the order's own opening price instead.[5] The pending entry itself must also sit outside the stops level from the current price.[2] The market, limit and stop order guide covers the pending order types.
Two edge cases need care. MetaQuotes' article states the rule as "at least" the stops level, and its test log accepts a stop loss on a buy position exactly 30 points below the Bid. Its sample check code, however, requires strictly more than the stops level, so the two disagree at the boundary itself. The same article says a zero stops level means no minimum distance is set for that symbol.[5]
Stops level in PineConnector pips = Stops level (points) ÷ 10
PineConnector defines one pip as "10 symbol quoting points", whatever the symbol's number of digits.[6] A 30-point stops level is therefore 3 PineConnector pips on EURUSD, on a JPY pair or on a two-decimal metal. PineConnector's error guide warns not to treat "a displayed point count as the same number of pips".[7] The guide to pips, points and pip value covers the units in more depth.
Worked example: why sl_pips=3 still fails a 30-point stops level
Illustrative example, not a recommendation. Assume a five-digit EURUSD symbol with Point 0.00001, Stops level 30 and Freeze level 20. The broker quotes Bid 1.10000 and Ask 1.10010, a spread of 10 points. The minimum stop distance is 30 × 0.00001 = 0.00030, which is 3 PineConnector pips.
The TradingView alert's Message field carries LicenseID,buy,EURUSD,vol_lots=0.01,sl_pips=3. PineConnector's reference sets a buy stop at entry − sl_pips × pip.[8] Its examples leave out the bid/ask spread and say to check "actual quote side" on the receiving account.[9] This example assumes the entry reference is the 1.10010 Ask. Which quote the EA uses is not documented; test on demo.
| Message value | Requested long-position Stop Loss and distance from the 1.10000 Bid |
|---|---|
sl_pips=2 |
1.10010 − 0.00020 = 1.09990. Distance 0.00010 = 10 points: inside the stops level, invalid stops. |
sl_pips=3 |
1.10010 − 0.00030 = 1.09980. Distance 0.00020 = 20 points: still inside. |
sl_pips=4 |
1.10010 − 0.00040 = 1.09970. Distance 0.00030 = 30 points: exactly on the boundary. |
sl_pips=5 |
1.10010 − 0.00050 = 1.09960. Distance 0.00040 = 40 points: outside, so it passes this check. |
Illustrative values. Your broker's stops level, spread and quote side decide the real numbers.
The spread explains the surprise at sl_pips=3. The stop is measured from the Ask, but the broker checks it against the Bid, so the 10-point spread is used up first. Under this assumption, a stop loss on the buy position needs the stops level plus the current spread: 30 + 10 = 40 points from the Ask, or 4 PineConnector pips. MetaQuotes' own test log labels an accepted long-position Stop Loss distance as the spread plus SYMBOL_TRADE_STOPS_LEVEL.[5]
The take profit works the other way for a buy. A target measured from the Ask already sits one spread further from the Bid, so tp_pips=2 gives 1.10030, which is 30 points from the Bid. A sell mirrors everything, with its stop and target checked against the Ask. MQL5 flags a floating spread with SYMBOL_SPREAD_FLOAT.[1] On such a symbol, the stop distance needed changes with the spread at the moment the request arrives. The bid-ask spread guide explains which side of the quote each order uses.

When the stop travels inside the opening request, the whole request fails. MetaQuotes' test EA shows buy requests with an attached stop failing with "[invalid stops]" until the stop moved far enough away. Its check script logs the same failure as "OrderSend error 4756" with "retcode= 10016 deal= 0".[5] An EA that opens first and adds the stop in a second request could instead leave a position without that stop. PineConnector's docs do not say which method its EA uses. After a demo test, check the position's S/L in the Trade tab. MetaTrader 5 shows a zero there when the stop "has not been placed".[10]
What does the freeze level block?
The freeze level stops changes, not new orders. MetaQuotes explains that a broker may route trades to an external trading system, so an order near its activation price could already be executing when a change request arrives. Within the freeze distance, pending orders and open positions "cannot be modified".[5]
| Order or position | A change is allowed only when |
|---|---|
| Buy Limit order | Ask − open price ≥ freeze level |
| Buy Stop order | Open price − Ask ≥ freeze level |
| Sell Limit order | Open price − Bid ≥ freeze level |
| Sell Stop order | Bid − open price ≥ freeze level |
| Buy position | Take Profit − Bid and Bid − Stop Loss are both ≥ freeze level |
| Sell position | Ask − Take Profit and Stop Loss − Ask are both ≥ freeze level |
Checks as MetaQuotes lists them, with the freeze level converted to price as points × Point.
Illustrative example. Keep the buy from the worked example, entered at 1.10010 with its stop at 1.09960 and a take profit at 1.10110. The Bid then rises to 1.10095. The take profit is now 1.10110 − 1.10095 = 0.00015, or 15 points, from the Bid. That is inside the 20-point freeze level, so a newsltplong request to move the target further away fails the freeze check.
MetaQuotes' return code list includes 10029, TRADE_RETCODE_FROZEN.[3] Its checklist article does not say which code a freeze-level refusal returns, so read the code and message in the log.
Changed levels must also clear the stops level. MetaTrader 5 Help says the terms of stop levels "are determined by the broker and are specified in symbol properties".[10] With a 30-point stops level, moving the buy's stop to its 1.10010 entry needs a Bid of at least 1.10040, because 1.10040 − 1.10010 = 0.00030. PineConnector's breakeven reference states the same condition: the position must be "far enough from entry for the broker to permit the new stop".[11]
Automatic breakeven and pip trailing are stop changes too. PineConnector notes that "Broker rules can reject the modification".[12] A rejected change "can leave the old stop unchanged".[11] A request that changes nothing is also refused: MetaQuotes gives 10025, TRADE_RETCODE_NO_CHANGES, for that case.[5]

Where do you find the stops level in MT5, TradingView and PineConnector?
- MetaTrader 5 terminal: right-click the exact symbol in Market Watch and choose Specification. MetaQuotes describes Stops level as a "channel of prices (in points) from the current price". An order placed inside it makes the server return "Invalid Stops".[2] The help's field list does not include a freeze level. PineConnector's lookup guide says to ask the broker for any field missing from your terminal view.[4]
-
MQL5: an Expert Advisor reads both values with
SymbolInfoInteger(), usingSYMBOL_TRADE_STOPS_LEVELandSYMBOL_TRADE_FREEZE_LEVEL. It reads the point withSymbolInfoDouble()andSYMBOL_POINT.[1] MQL5 separates the requests these rules apply to.TRADE_ACTION_SLTPchanges an open position's stops, andTRADE_ACTION_MODIFYchanges a pending order.[13] - Logs: PineConnector's error guide starts with "the Experts and Journal entries around the failed MT5 request". Its EA can report a failure as 4756 with a detail such as "Invalid stops" beside it. The guide maps that detail to target units, the correct side and the minimum distance.[14] MetaTrader 4 reports the same class of problem as error 130.[7] The MT5 error 4756 guide covers another detail that shares that number.
- TradingView: the Strategy Tester's broker emulator fills orders "using only the available chart data by default".[15] A broker's stops level is not chart data, so a backtest can hold stops that the receiving MT5 symbol would refuse. The TradingView vs MT5 backtest comparison covers other reasons the results differ.
- PineConnector: the syntax reference treats stops and targets as requested levels: "the broker must accept price and volume increments and minimum distances".[8] On PineConnector Edge, the Symbols tab (Portal → Edge → Symbols) shows each broker symbol's specification, including digits and stops level, and lets you copy the exact symbol name into the alert (Edge Symbols guide). For any field it does not list, request the broker's MT5 symbol specification "through the broker or support".[4]
Keep the execution stages separate when a stop goes missing. The alert triggers, its webhook delivers the message, PineConnector processes it and the EA sends an order request. Acceptance is not a confirmed fill or proof that the requested Stop Loss was attached. Check the resulting deals, position volume and actual S/L.[16][10] The stage-by-stage diagnosis for a webhook with no MT5 trade covers each checkpoint.
Why do tight automated stops fail, and what else goes wrong?
- Reading points as pips. A 30-point stops level is 3 PineConnector pips, not 30. Divide the point count by 10.
-
Ignoring the spread. In the example,
sl_pips=3met the stops level on paper and still failed, because the broker measured it from the Bid. - Putting the stop on the wrong side. PineConnector's checklist says a buy stop loss must not be above the relevant market or entry price, and a sell stop loss must not be below it.[7]
- Copying a chart price. A price level copied from TradingView "may be too close to, or on the wrong side of, your broker’s current quote".[7] The guide to why TradingView prices differ from your broker's explains the gap.
- Trusting a zero. PineConnector's lookup guide says "A displayed zero stop level does not prove every stop will be accepted."[4]
- Reading the wrong symbol. MetaQuotes lists Specification parameters as "set by a broker".[2] Read them for the exact symbol, including any suffix, on the receiving account. The broker symbol suffix guide explains why names differ.
These limits describe what a broker accepts. They say nothing about where a stop belongs in a strategy, and automation only sends the distance you define.
Frequently asked questions
What is the freeze level in MT5?
The freeze level in MetaTrader 5 is a per-symbol distance, in points, within which a pending order or an open position's stops cannot be modified. MQL5 exposes it as SYMBOL_TRADE_FREEZE_LEVEL. For a buy position, MetaQuotes checks the Take Profit and Stop Loss against the Bid; for a sell, against the Ask. A change requested inside that distance is refused.
What does error 10016 invalid stops mean in MT5?
Error 10016 is the MetaTrader 5 trade server return code TRADE_RETCODE_INVALID_STOPS, described as "Invalid stops in the request". The broker found a Stop Loss, Take Profit or pending price invalid, for example inside the symbol's stops level or on the wrong side of the price. An Expert Advisor may log it beside error 4756. Check the units, the side and the distance from the Bid for buys or the Ask for sells.
How do I calculate the minimum stop distance in MT5?
Multiply the symbol's Stops level, shown in points in the MetaTrader 5 Specification window, by its Point. With a Stops level of 30 and a Point of 0.00001, the minimum distance is 0.00030. A buy's stops are measured from the Bid and a sell's from the Ask. In PineConnector pips, which equal 10 points, 30 points is 3 pips.
Why is my stop rejected when it is wider than the stops level?
One cause is the spread. MetaTrader 5 checks a buy position's stop against the Bid, but a stop measured from the Ask entry loses the spread first. With a 30-point stops level and a 10-point spread, a stop 30 points below the Ask is only 20 points below the Bid, so the broker refuses it. The price side, units and a floating spread are the other checks.
Does a stops level of 0 mean any stop is accepted?
No. MetaQuotes' checklist article says a zero SYMBOL_TRADE_STOPS_LEVEL means no minimum distance has been set for that symbol. The stop must still sit on the correct side of the Bid or Ask. PineConnector's syntax reference adds that a displayed zero stop level does not prove every stop will be accepted, so confirm the actual stop after a demo test.
Reviewed 25 September 2026. Facts were checked against the linked sources on that date. Nothing in this article was tested on a trading account and no code was compiled.
Related reading
- Trading mechanics: orders, lots, margin and costs
- Common MetaTrader errors in automated trading
- Pips, points and pip value
- The bid-ask spread explained
- Market, limit and stop orders
Sources
- MetaQuotes – MQL5 Reference: Symbol properties, accessed 25 September 2026.
- MetaQuotes – MetaTrader 5 Help: Market Watch, viewing symbol specification, accessed 25 September 2026.
- MetaQuotes – MQL5 Reference: Trade server return codes, accessed 25 September 2026.
- PineConnector – Syntax: look up broker values, accessed 25 September 2026.
- MetaQuotes – The checks a trading robot must pass before publication in the Market, accessed 25 September 2026.
- PineConnector – Syntax: PineConnector pip, accessed 25 September 2026.
- PineConnector – EA errors: check stops and prices, accessed 25 September 2026.
- PineConnector – Syntax: sl_pips, accessed 25 September 2026.
- PineConnector – Syntax: pending reference price, accessed 25 September 2026.
- MetaQuotes – MetaTrader 5 Help: Executing trades, accessed 25 September 2026.
- PineConnector – Syntax: manual breakeven, accessed 25 September 2026.
- PineConnector – Syntax: breakeven and trailing stops, accessed 25 September 2026.
- MetaQuotes – MQL5 Reference: Trade operation types, accessed 25 September 2026.
- PineConnector – EA errors: match the message beside 4756, accessed 25 September 2026.
- TradingView – Pine Script v6 User Manual: Strategies, accessed 25 September 2026.
- MetaQuotes – Basic Principles: processing and Stop Loss activation, accessed 25 September 2026.
PineConnector executes the instructions you send it. It does not select trades, manage money, or hold funds. Trading carries risk, and past performance of any strategy does not indicate future results.