What is slippage in trading, and how to measure yours

5 min readMetaKit

You click buy at 1.0850 and your fill comes back at 1.0852. Those two pips are slippage: the difference between the price you expected and the price you got. Every trader experiences it, most never measure it, and on a scalping strategy it can be the difference between an edge and a loss.

Slippage, defined

Slippage = fill price − expected price, signed so that it's against you when it costs you money:

  • Negative slippage: you got a worse price. A buy filled higher, or a sell filled lower, than expected.
  • Positive slippage: you got a better price. A buy filled lower than expected. This happens too, and a fair broker passes it on to you.

"Expected price" depends on the order. For a market order it's the quote when you sent it. For a stop loss it's the stop level. For a limit order it's the limit price, and a limit can't slip against you at all: it fills at your price or better, or not at all.

Which orders slip

OrderCan slip against you?Why
Market orderYesFills at the best available price when it reaches the broker
Buy stop / sell stopYesBecomes a market order when triggered
Stop lossYesAlso a market order when triggered
Limit order / take profitNo (only in your favour)Fills at the limit price or better

The stop loss is the one that hurts. A stop at 1.0820 on a long is a promise to sell at the market once the bid touches 1.0820, not a promise to sell at 1.0820. On a quiet Tuesday afternoon those are the same thing. When NFP comes out, or the market reopens after a weekend, they aren't. The order types post covers why limits and stops behave so differently.

Why slippage happens

Price moves between your decision and your fill. Three things make that gap bigger:

  • Speed of the market. In the seconds after a major data release, prices jump in steps rather than ticking smoothly. There may simply be no price between 1.0850 and 1.0862.
  • Liquidity. In thin hours, like the late New York session, the Sunday open or bank holidays, there's less volume at each price level, so fills walk further. The sessions post maps those hours.
  • Size. A large order can consume the liquidity at the best price and fill the rest at worse ones. For most retail sizes on major pairs this is negligible; on exotics and small-cap CFDs it isn't.

Gaps are the extreme case. If EURUSD closes Friday at 1.0850 and opens Sunday at 1.0790, a stop at 1.0820 fills at about 1.0790. There was never a price at 1.0820 to fill at.

The MT5 deviation setting, and when it doesn't apply

MT5's order window has a "Deviation" field, and APIs and EAs have the same parameter: the maximum slippage you'll accept, in points. It sounds like a slippage cap. It only is on some accounts.

MT5 symbols have an execution mode, shown in the symbol specification:

  • Instant execution and request execution: the broker fills at your price or, if price has moved further than your deviation, rejects the order with a requote. Deviation is your cap.
  • Market execution and exchange execution: the order fills at the best available price, full stop. Deviation is ignored by the server.

Most ECN and STP accounts use market execution. So on the accounts most active traders use, there's no slippage cap, only slippage you can measure and reduce. The broker execution post explains how execution mode relates to the broker's model.

How to measure your slippage

You need two numbers per fill: what you expected and what you got. MT5 gives you the second directly. The first you have to record yourself, or infer.

For market orders, record the quote at the moment you send. Through the MetaKit trading API, the order response gives you fill_price directly, so the comparison is one subtraction:

q = s.get(f"{BASE}/accounts/{ACCOUNT}/quote", params={"symbol": "EURUSD"}).json()
expected = q["ask"]                    # buying at the ask
fill = s.post(f"{BASE}/accounts/{ACCOUNT}/orders",
              json={"symbol": "EURUSD", "side": "buy", "type": "market", "volume": 0.1},
              headers={"Idempotency-Key": "slip-test-1"}).json()
 
point = 0.00001                         # 5-digit EURUSD
slip_points = (fill["fill_price"] - expected) / point   # positive = worse for a buy
print(f"slippage: {slip_points:+.1f} points")

For a sell, flip the sign: expected is the bid, and a lower fill is worse.

For stop losses, compare the closing deal's price with the stop level. The position.closed webhook carries both the position's last sl and the realised close_price, so a handler can log stop slippage for every trade that closes with reason: "sl". The trade grading post builds a handler for that event.

Measure in points, keep the sign, and look at the distribution rather than the average. A typical retail account on a major pair shows most fills within a point or two, either side, and a long tail of bad fills clustered around news. The tail is what matters for risk: a strategy with tight stops through news releases is effectively running wider stops than it thinks.

Slippage in copy trading

Copying adds a second source of slippage: the follower trades after the master, so even with zero execution slippage, price can move in the gap. A copier's job is to keep that gap small and measure it honestly. MetaKit reports it per copier, signed so positive always means worse for the follower, in the copier performance data; the copy trading internals post explains where the latency comes from.

How to reduce slippage

  • Avoid market orders in the minutes around high-impact news, or accept that you're paying for the volatility you're trying to catch.
  • Use limit orders for entries when you can wait for price to come to you.
  • Trade liquid hours for the pairs you trade.
  • Don't put stops exactly at round numbers or obvious highs and lows, where many stops cluster and get filled into the same thin liquidity.
  • Check your broker's execution statistics. Regulated brokers in many jurisdictions publish execution quality reports, including slippage.
  • Measure it. You can't manage a cost you've never put a number on.

Slippage is one part of your real trading cost. The other parts are the spread and the swap and commission, and together they decide how much edge a strategy needs before it makes money.