Skip to content

MetaTrader 5

Stops Level in MT5: Minimum Stop Distance and Freeze Level

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.

Illustrative cover for MT5 stops level and freeze level: a price line inside a shaded no-stop channel, with one marker outside it and a locked marker near price, with the official PineConnector logo.
The stops level sets how close a new stop may sit; the freeze level decides when an existing one can no longer change.

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.

Illustrative price ladder for a five-digit EURUSD buy with Bid 1.10000, Ask 1.10010 and a 30-point stops level: stops from sl_pips=2 and sl_pips=3 fall inside the channel, sl_pips=4 sits on the boundary and sl_pips=5 passes.
Illustrative values, not recommended stop distances. The example assumes the stop is measured from the Ask; PineConnector's docs do not state which quote the EA 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]

Illustrative three-card summary of MT5 broker checks: opening a market order checks the stops level against the Bid or Ask, placing a pending order checks the entry and its stops, and modifying checks the freeze level and then the stops level.
Illustrative summary of the checks MetaQuotes documents. The broker applies them when it receives the EA's request, after TradingView, the webhook and PineConnector have done their parts.

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(), using SYMBOL_TRADE_STOPS_LEVEL and SYMBOL_TRADE_FREEZE_LEVEL. It reads the point with SymbolInfoDouble() and SYMBOL_POINT.[1] MQL5 separates the requests these rules apply to. TRADE_ACTION_SLTP changes an open position's stops, and TRADE_ACTION_MODIFY changes 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=3 met 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

Sources

  1. MetaQuotes – MQL5 Reference: Symbol properties, accessed 25 September 2026.
  2. MetaQuotes – MetaTrader 5 Help: Market Watch, viewing symbol specification, accessed 25 September 2026.
  3. MetaQuotes – MQL5 Reference: Trade server return codes, accessed 25 September 2026.
  4. PineConnector – Syntax: look up broker values, accessed 25 September 2026.
  5. MetaQuotes – The checks a trading robot must pass before publication in the Market, accessed 25 September 2026.
  6. PineConnector – Syntax: PineConnector pip, accessed 25 September 2026.
  7. PineConnector – EA errors: check stops and prices, accessed 25 September 2026.
  8. PineConnector – Syntax: sl_pips, accessed 25 September 2026.
  9. PineConnector – Syntax: pending reference price, accessed 25 September 2026.
  10. MetaQuotes – MetaTrader 5 Help: Executing trades, accessed 25 September 2026.
  11. PineConnector – Syntax: manual breakeven, accessed 25 September 2026.
  12. PineConnector – Syntax: breakeven and trailing stops, accessed 25 September 2026.
  13. MetaQuotes – MQL5 Reference: Trade operation types, accessed 25 September 2026.
  14. PineConnector – EA errors: match the message beside 4756, accessed 25 September 2026.
  15. TradingView – Pine Script v6 User Manual: Strategies, accessed 25 September 2026.
  16. 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.


Leave a comment

Back To PiCo Blog

Ready when your strategy is

You bring the strategy.We bring the infrastructure.

Connect TradingView to MetaTrader, choose where MT5 runs and put the full PineConnector workflow through its paces from your first month.

Strategy and trading decisions remain yours. The MT5 environment can be ours.

PineConnector Edge

Run the full PineConnector workflow.

$59/mo at launch

Core plan · 1 connection · 1 hosted MT5 environment

Try Core for $7

7 days of Core for $7, then $59/month at the launch price unless you cancel.