Slippage in trading: separate the spread, the trigger and the price you got
Author · Editor
- Author
- Mykola Zavarov
- Editor
- Andriy Bondarenko
Reviewed

A price on the screen is not an execution receipt. Follow a hypothetical forex order through several price levels, calculate its average fill and see which part of the difference is spread, slippage or a change of benchmark.
The essentials
Spread compares Bid and Ask at one moment. Slippage compares an execution with a specified earlier price.
A larger order can fill at several prices. Calculate the average using executed quantities, not a simple average of price levels.
A stop is a trigger, a limit is a price restriction, and neither is proof that the whole position has closed.
What is slippage in trading?
Slippage is the difference between an execution price and the price used as the reference when an order was submitted or assessed. The reference matters: a quoted Ask, a quoted Bid, a stop trigger and a chart's last price are different numbers. State which one you are comparing before calling the difference a cost.
For a purchase, paying more than the reference is adverse; paying less is an improvement. For a sale, receiving less is adverse and receiving more is an improvement. The terminology applies to opening and closing trades: closing a short position is a purchase, not a sale.
The SEC's order-type overview distinguishes market execution from the last displayed trade price. Its examples concern securities. This guide uses hypothetical EUR/USD prices to explain the arithmetic, without claiming that stock-market routing rules or a particular broker's execution policy apply to every forex account.
Slippage vs spread: two different comparisons
Bid is the quoted selling side and Ask the buying side; their difference is the spread. OANDA's explanation of Bid and Ask sets out that distinction. A quote also needs a time and an available quantity: a displayed price is not an unlimited commitment to execute any order size.
Measure | What it compares | Example in this guide |
|---|---|---|
Quoted spread | Ask − Bid at the reference time | (1.1002 − 1.1000) ÷ 0.0001 = 2 pips |
Adverse buy slippage | Average buy fill − reference Ask | (1.10036 − 1.1002) ÷ 0.0001 = 1.6 pips |
Buy shortfall versus midpoint | Average buy fill − reference midpoint | (1.10036 − 1.1001) ÷ 0.0001 = 2.6 pips |
Scroll sideways to compare all columns ↔
Our reference quote is Bid 1.1000 and Ask 1.1002, with midpoint 1.1001. A purchase exactly at 1.1002 has zero slippage against that Ask, while still sitting 1 pip above the midpoint. Calling the whole midpoint difference “slippage” would hide the spread component.
For one execution, midpoint shortfall = half the reference spread + adverse slippage against the reference side. Adding the full spread to that slippage would double-count half the spread under this benchmark. This is not a round-trip trading-cost formula.
How to calculate slippage for a buy or a sell
We use EUR/USD, a USD account and a pip size of 0.0001. Quantity means units of EUR. These assumptions make the currency arithmetic explicit; a different pair, account currency or contract specification requires its own conversion.
- Buy adverse slippage in pips = (average fill − reference Ask) ÷ 0.0001.
- Sell adverse slippage in pips = (reference Bid − average fill) ÷ 0.0001.
- Dollar slippage = adverse slippage in pips × 0.0001 × executed EUR units.
A 100,000 EUR purchase at an average 1.10036 versus Ask 1.1002 has 1.6 pips of adverse slippage, or $16. In the mirrored sale, an average 1.09984 versus Bid 1.1000 produces the same 1.6 pips and $16. Using the buy formula for that sale would reverse the meaning of the sign.
Our calculation uses positive numbers for adverse cost and negative numbers for improvement. That sign convention is different from the everyday phrase “positive slippage”, which usually means a better fill. Keep the formula and label together when comparing reports.
Why order size changes the average execution price
Suppose the execution snapshot offers 20,000 EUR at 1.1002, 40,000 at 1.1003 and 90,000 at 1.1005. A hypothetical market purchase of 100,000 EUR consumes the first two levels and 40,000 EUR from the third. The best displayed price alone cannot describe this receipt.
Executed EUR units | Execution price | USD paid |
|---|---|---|
20,000 | 1.1002 | $22,004 |
40,000 | 1.1003 | $44,012 |
40,000 | 1.1005 | $44,020 |
100,000 total | 1.10036 weighted average | $110,036 |
Scroll sideways to compare all columns ↔
The average fill is the sum of price × executed quantity divided by total executed quantity. Here, $110,036 ÷ 100,000 EUR = 1.10036 USD per EUR. Giving each price level equal weight would be wrong because the quantities differ. This is a volume-weighted average of this order's fills, not a market-wide daily VWAP indicator.
MetaTrader 5's depth-of-market documentation illustrates orders filled from multiple offers and distinguishes exchange depth from broker-provided OTC depth. The ladder here is synthetic, not a live order book or a promise that the quantities shown in a terminal remain available until an order arrives.
Inspect the execution receipt, not just the headline quote
Choose “Buy EUR”, “Several price levels” and 100,000 EUR to reproduce the $16 slippage example. The reference half-spread contributes another $10 against midpoint, for a $26 shortfall on that single execution. Switch to “Sell EUR” to see why the formula reverses, then compare the improvement and gap scenarios.
The reference quote comes before the hypothetical execution snapshot. The two are not simultaneous quotes. Prices and quantities are fixed within each snapshot; the model consumes available levels in price order and stops when either the requested quantity or the displayed depth is exhausted. It does not simulate latency, queue priority, cancellations, hidden liquidity or a broker's fill policy. Commissions, financing, currency conversion and a later exit are excluded.
Try 200,000 units: only 150,000 are available in each snapshot, so 50,000 remain unfilled. Average price and dollar comparisons describe the filled part only. The remainder has no execution price in this model; it is not a free or completed trade.
Execution receipt
Where did the execution cost come from?
Choose a side and size. Follow the available price levels into a volume-weighted fill, then separate half-spread from signed slippage.
The quote before execution
- Initial Bid
- 1.1000
- Initial Ask
- 1.1002
- Initial mid
- 1.1001
Full quoted spread2.00 pips
EUR/USD · USD account · 1 pip = 0.0001. The earlier quote and the execution snapshot are different observations.
The modelled fill
Fully filled in this snapshot
- Requested · EUR
- 100,000
- Filled · EUR
- 100,000
- Unfilled · EUR
- 0
- Volume-weighted fill price
- 1.10036
- Slippage benchmark · Initial Ask
- 1.1002
- 20,000 EURPrice · USD/EUR:1.1002
- 40,000 EURPrice · USD/EUR:1.1003
- 40,000 EURPrice · USD/EUR:1.1005
A buy is compared with the initial Ask. A higher fill is worse; a lower fill is better.
Inspect the execution levels
| Price · USD/EUR | Available · EUR | Filled · EUR | Share of total fill |
|---|---|---|---|
| 1.1002 | 20,000 | 20,000 | 20% |
| 1.1003 | 40,000 | 40,000 | 40% |
| 1.1005 | 90,000 | 40,000 | 40% |
Cost relative to the initial mid
- Half of the quoted spread
- +10.00 USD1.00 pips
- Signed adverse slippage
- +16.00 USD1.60 pips
- Total deviation from mid
- +26.00 USD2.60 pips
Half-spread + signed slippage = deviation from mid. One execution, calculated on filled units only.
Positive = worse price relative to the stated benchmark. Negative = better price. These amounts are not a trading profit or loss.
The slippage component captures the fill beyond the initial side quote. It can include both a changed snapshot and walking through deeper levels.
Buy EUR. Filled · EUR: 100,000. Unfilled · EUR: 0. Volume-weighted fill price: 1.10036. Total deviation from mid: +26.00 USD.
Assumptions and calculation
BUY: (VWAP − initial Ask) / 0.0001. SELL: (initial Bid − VWAP) / 0.0001.
Synthetic EUR/USD prices and EUR quantities; USD account. No fees, commission, financing, currency conversion or closing trade. The initial quote is a benchmark before execution, not a promise that its size or price remains available.
The selected side consumes listed levels in price order. Each preset has 150,000 EUR of available depth. A request for 200,000 EUR therefore leaves 50,000 EUR unfilled. The model does not predict when, whether or at what price that remainder could execute.
VWAP = sum of fill price × filled units / total filled units. Buy slippage compares VWAP with the initial Ask; sell slippage compares the initial Bid with VWAP. Half-spread is measured from the initial mid, so one execution does not incur the full quoted spread in this decomposition.
USD amounts use filled units and unrounded fill calculations; displayed VWAP is rounded. Prices are snapshots, not a live order book. Queue position, latency, rejections, changing liquidity and order-type rules are omitted. This is not a broker execution simulator or a recommendation of order size.
Positive slippage means an improvement, not a guaranteed profit
IG's forex lesson describes both better and worse fills relative to an expected price. In our improvement scenario, a purchase of 50,000 EUR fills at 1.1001 after the earlier Ask of 1.1002. That is 1 pip better, a $5 improvement, and −1 pip under our adverse-cost convention.
Because 1.1001 is also the original midpoint, this example's midpoint shortfall is zero: the $5 improvement offsets the $5 reference half-spread contribution. It does not establish a profitable position. A later exit, commissions, financing and subsequent market movement remain outside this calculation.
A single favourable or adverse execution is also insufficient to rank a broker. Comparisons need a consistent reference, timing, instrument, order type and size, including the orders that did not execute.
Why a stop can trigger at one level and fill elsewhere
A conventional stop-market order activates market execution when its trigger condition is met. The FINRA explanation of stop-order risks warns that the resulting fill can differ substantially from the stop. A stop level is not a reserved price or a guaranteed maximum loss.
Imagine a sell stop at 1.0995, following an earlier Bid of 1.1000. The next execution snapshot begins at Bid 1.0994. Assume that this quote satisfies the platform's trigger rule. In our 100,000-unit gap sale, the average fill is 1.09908. The difference is 4.2 pips below the stop, but 9.2 pips below the earlier Bid.
Those are two comparisons of the same fill, not two costs to add together. The calculator measures against the earlier quote; it does not simulate a stop order. Check the actual trigger reference separately, since a chart's last price and a broker's trigger input may differ. Our trailing stop-loss vs trailing stop-limit guide explores that distinction in more detail.
Does a limit order remove slippage?
A buy limit restricts purchases to the limit price or lower; a sell limit restricts sales to that price or higher. It does not require an exact price match. The SEC's stop and stop-limit bulletin explains the corresponding trade-off: a price restriction can prevent execution.
A limit therefore bounds the acceptable execution price under its order terms, while leaving uncertainty about whether and how much will fill. A better fill is still possible. A rejection, expiry or unfilled remainder cannot be recorded as zero slippage and then treated as a successfully completed exit.
In the depth scenario, requesting 200,000 EUR fills 150,000 and leaves 50,000 unfilled. The filled part has $31 of adverse slippage against the reference Ask and a $46 shortfall against midpoint. Multiplying those per-unit differences by the requested 200,000 would invent an execution for the remainder. A real order's remaining quantity follows its fill and time-in-force rules; our snapshot simply stops.
Add execution differences to the right cost and risk calculation
Choose the benchmark before combining numbers. A single execution against midpoint, an immediate buy-and-sell comparison, and realised profit after an eventual exit answer different questions. A spread already included in a tool's model should not be added a second time under another label.
Use the forex spread calculator to inspect the cost associated with entered spread and size assumptions. Use the position-size calculator to explore a chosen monetary risk amount and stop distance. Neither makes future execution certain; read which costs and conversions each calculation includes.
A stop-based risk estimate can differ from the realised loss when the fill differs from the assumed exit. Account-level constraints are another layer: the trailing drawdown guide explains why a loss threshold is not the same as an order that will close a position at that level.
How to compare execution policies without a “zero slippage” shortcut
Start with the exact account entity, instrument and platform. Ask how market and stop orders are priced, how price improvement is handled, what a displayed depth figure represents and what happens when the requested size cannot fill. A spread advertisement alone does not answer those questions.
The review routes below are starting points for checking platforms and costs. Their inclusion is not a ranking of execution quality, and it does not establish lower slippage or support for a particular order. Read current documentation for your own account instead of treating a general broker score as a fill guarantee.
Compare MT5 brokers
Compare platforms and account conditions, then verify the exact trailing and execution rules.

AvaTrade review
Review platform choices and costs. Confirm order behaviour for the specific account and instrument.

FP Markets review
Check platforms, account conditions and costs before asking about the required order type.

IC Markets review
Review platform choices and costs. Confirm order behaviour for the specific account and instrument.
What to record when an execution looks wrong
- The instrument, account currency and quantity units, including the requested and executed amounts.
- The reference Bid and Ask with their timestamp; record whether the chart shows Bid, Ask, midpoint or last trade.
- The order type, side, submission time and any stop, limit, fill-policy or expiry settings.
- Every fill's price, quantity and timestamp, plus the final order status and remaining position.
- Commissions and other charges separately from price differences; use the same benchmark throughout the comparison.
Then calculate the quantity-weighted fill and ask the broker to explain any remaining discrepancy using those records. A screenshot without a timestamp or executable side may miss the relevant event. A demo exercise can test whether you understand the interface; it does not establish how a live order will execute.
Frequently asked questions
Is slippage the same as spread?
No. Spread is the difference between Bid and Ask at a particular time. Slippage compares a fill with a specified reference price. A trade can have zero slippage against its reference Ask or Bid while still crossing the spread.
Can slippage be positive?
Yes. A lower purchase price or a higher sale price than the chosen reference is an improvement. This is commonly called positive slippage. Our signed adverse-cost calculation represents that improvement with a negative number; it does not mean a negative trading outcome.
How much is one pip of slippage worth?
In this EUR/USD model with a USD account, one pip is 0.0001 USD per EUR. Multiply it by executed EUR units: at 100,000 units, one pip is $10. Other instruments, contract sizes and account currencies require their own calculation.
Why was my stop filled beyond its level?
The stop level activates an order; it does not reserve liquidity at that price. Available quotes, volume and the order's execution rules determine the fill. First check the trigger reference and the execution record rather than assuming the chart's visible price proves an error.
Can I avoid all slippage with limit orders?
A limit sets an acceptable price boundary, but execution and a full fill are not guaranteed. Favourable price improvement remains possible, and an unfilled exit leaves exposure open. Compare the consequences of not executing as well as the price restriction.
Does the calculator predict my broker's next fill?
No. It consumes fixed hypothetical price levels and quantities after a separate reference quote. It excludes real routing, timing, competing orders, fees and later executions. It explains the fill prices and costs for the executed portion and shows any unfilled quantity separately.