Buy limit vs buy stop: MT5 pending orders explained

6 min readMetaKit

Every MT5 platform offers four pending orders, and almost everyone mixes up two of them on their first week. The confusion is understandable: "buy stop" sounds like it should stop you buying, and "limit" sounds like a cap on something. Neither name tells you where the order sits. Here's the version that does.

The one-line rule

  • A limit order waits for a better price than now.
  • A stop order waits for a worse price than now, because you want to trade with a move that has already started.

"Better" depends on which way you're trading. A buyer wants a lower price, a seller wants a higher one. So:

OrderSitsFills whenYou're betting on
Buy limitBelow the current askPrice falls to itA dip, then a bounce
Buy stopAbove the current askPrice rises to itA breakout continuing up
Sell limitAbove the current bidPrice rises to itA rally, then a rejection
Sell stopBelow the current bidPrice falls to itA breakdown continuing down

Limits are mean-reversion orders: you expect price to come to you and turn around. Stops are momentum orders: you expect price to break a level and keep going, and you'd rather pay a little more to be sure the move is real.

A worked example on EURUSD

EURUSD is trading at 1.0850 / 1.0852 (bid / ask). You've marked support at 1.0800 and resistance at 1.0900.

  • You think support will hold. Place a buy limit at 1.0805, a few pips above support so you're not relying on an exact touch. If price dips there, you buy cheaper than now.
  • You think resistance will break. Place a buy stop at 1.0910, just above resistance, so you only enter if it actually breaks.
  • You think resistance will reject price. Place a sell limit at 1.0895.
  • You think support will break. Place a sell stop at 1.0790.

Notice that all four can be "right" setups on the same chart. The order type is just the mechanical expression of what you expect price to do at a level.

Why the platform refuses the wrong one

Try to place a buy limit above the current ask and MT5 rejects it with "Invalid price". That isn't a bug: a buy limit above the market would fill instantly, which makes it a market order, and the platform won't pretend otherwise. The same goes for a buy stop below the market, a sell limit below the bid, or a sell stop above it.

There's a second rule that catches people even with the right type: the stops level. Each symbol has a minimum distance, in points, between the current price and any pending order, stop loss or take profit. It's in the symbol specification (right-click the symbol in Market Watch, then Specification) as "Stops level". On a symbol with a stops level of 30 points and 5 digits, a pending order 2 pips from price is too close and is refused. On gold quoted to 2 digits, 30 points is $0.30.

Which price triggers which order

Buy orders trigger on the ask, sell orders on the bid. Charts in MT5 draw the bid by default, so a buy stop can fill when the line on your chart never quite touches it: the ask, a spread higher, got there first. If your buy orders "fill early" around news, this is why, and the spread post covers when the gap gets wide enough to matter. Turn on the ask line in chart properties if you place a lot of buy stops.

Slippage: limits protect your price, stops don't

A limit order fills at your price or better. If the market gaps through your buy limit, you get the better price.

A stop order becomes a market order the moment it triggers, and fills at whatever price is available. In a fast market, a buy stop at 1.0910 can fill at 1.0914. That's not your broker being unfair; it's the trade-off you made for entering only on confirmation. The slippage post shows how to measure how much it costs you in practice.

This is also why your stop loss is a stop: when it triggers it's a market order, and on a weekend gap it fills at the first available price, not your level.

The two MT5-only types: buy stop limit and sell stop limit

MT5 adds two hybrid orders MT4 never had:

  • Buy stop limit: when price rises to the stop price, MT5 places a buy limit at a lower limit price. You wait for a breakout, then buy the retest.
  • Sell stop limit: when price falls to the stop price, MT5 places a sell limit at a higher price. You wait for a breakdown, then sell the pullback.

They're useful for "break and retest" setups without babysitting the chart. The catch: if price breaks out and never comes back, nothing fills.

Expiry: good-till-cancelled is the default

A pending order stays live until it fills or you delete it, unless you set an expiry. MT5 offers "Good till cancelled", "Today", "Specified" (a time) and "Specified day". Expiry is evaluated on the broker's server clock, which is usually not your timezone and often not UTC either; the server time post explains why an order you set to expire "at the London close" can die an hour early.

A stale order is a quiet risk. A buy limit you placed three weeks ago, for a setup you've forgotten about, will still fill when price gets there. Review open pending orders the way you review open positions.

Placing pending orders over an API

If you're placing orders from code, the four types are the same idea with two fields: side and type. Through the MetaKit trading API, a buy limit is:

curl -s -X POST https://api.metakit.cloud/v1/accounts/2/orders \
  -H "Authorization: Bearer $METAKIT_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: eurusd-support-1" \
  -d '{ "symbol": "EURUSD", "side": "buy", "type": "limit", "volume": 0.10, "price": 1.0805, "sl": 1.0780, "tp": 1.0880, "expiration": "2026-10-17T16:00:00Z" }'

Swap "type": "limit" for "stop" and move the price above the market for a buy stop; flip side to "sell" for the other two. The API applies the same rules MT5 does: a price on the wrong side of the market or inside stops_level is refused with 422 invalid_stops before anything reaches the broker, and a successful placement returns "status": "placed" with the order_ticket you'd DELETE to cancel it. Stop-limit orders aren't available through the API, only market, limit and stop.

To see what's waiting, GET /v1/accounts/2/orders lists pending orders with their type (buy_limit, sell_stop, …), price and current price, which makes a "show me stale orders" script about ten lines long.

Quick reference

  • Buying cheaper than now? Buy limit, below price.
  • Buying only if it breaks higher? Buy stop, above price.
  • Selling higher than now? Sell limit, above price.
  • Selling only if it breaks lower? Sell stop, below price.
  • Limits can't slip against you; stops can.
  • Buys trigger on the ask, sells on the bid.
  • Respect the stops level, and know which clock your expiry uses.

Once orders are second nature, the next question is how big to make them. That's the lot size and pip value explainer.