Forex Slippage Explained: How to Measure Fills and Audit Execution
Documentation checked: 13 October 2026. Prices, volumes and journal samples below are hypothetical. Execution rules and available records depend on the broker, instrument and account.
A stop at one price and a closing fill at another can change a trade's result. A fair review starts by identifying exactly which two prices are being compared. A candle, a submitted order price and a stop trigger are different benchmarks, even when they happen to show the same number.
This guide provides a consistent way to measure forex slippage, preserve evidence from MT4 and review an execution sample. The purpose is to understand the difference between an intended transaction and its actual fill, then decide whether the evidence supports a practical change.

Define slippage before calculating it
Slippage describes a difference between a reference or expected execution price and the actual fill. The difference can be favourable or adverse. OANDA's execution-risk explanation describes buying higher or selling lower than expected as adverse outcomes, and the opposite movements as price improvements.
For a manual market order, a useful reference is the relevant quote observed immediately before submission: Ask for a buy, Bid for a sell. MetaQuotes documents those price sides for market-order requests. Record when and where you observed the quote. A screenshot taken several seconds before clicking provides weaker evidence than a timestamped quote captured at submission.
A displayed quote is a measurement reference, not necessarily a guaranteed fill. MT4 supports different execution modes; the broker determines the mode for the instrument. Preserve an explicit requested price when available, but do not invent one from the eventual opening price.
Keep benchmark types separate. A stop-loss review can compare the closing fill with the stop trigger. A market-order review can compare the fill with a submission-time quote. An institutional study might use an arrival midpoint. These answer different questions. The BIS report on FX execution algorithms explains why transaction-cost analysis depends on benchmark selection and reliable, granular data.
Use one sign convention for every order action
For this worksheet, positive cost means a worse fill; negative cost means price improvement. This deliberately uses a cost sign: market commentary often calls an improvement “positive slippage”. Label the column execution cost in pips to avoid interpreting the same plus sign in opposite ways.
Let R be the reference price, F the actual fill and p the declared pip size:
- Buy action: cost in pips = (F − R) ÷ p.
- Sell action: cost in pips = (R − F) ÷ p.
Use the action being executed. Opening a long is a buy; closing it is a sell. Closing a short is a buy, even though the original position was short. Applying the original position direction to both legs reverses the exit calculation.
| Action and benchmark | Reference | Fill | Cost |
|---|---|---|---|
| Buy, submission Ask | 1.10020 | 1.10028 | +0.8 pips |
| Sell, submission Bid | 1.10000 | 1.09994 | +0.6 pips |
| Buy, submission Ask | 1.10020 | 1.10017 | −0.3 pips |
| Sell to close a long, stop trigger | 1.09800 | 1.09770 | +3.0 pips, trigger-referenced |
Normalize the units before comparing results. For a five-decimal EUR/USD quote, a point of 0.00001 is one tenth of the 0.00010 pip used here. With a three-decimal USD/JPY quote, a 0.001 point is one tenth of a conventionally defined 0.01 pip. Check the symbol rather than extending those conventions to metals or every CFD.
MQL4 symbol properties distinguish point size, digits, tick size and tick value. Store the actual conversion used. A result reported as “8” without a unit cannot distinguish eight points from eight pips.
Measure entry and exit without charging the cost twice
Consider a hypothetical EUR/USD long. Its submission-time entry Ask is 1.10020 and its eventual exit-reference Bid is 1.10200. The entry fills at 1.10028 and the exit at 1.10194. Both references use the executable side appropriate to the action.
| Measure | Calculation | Result |
|---|---|---|
| Reference gross result | (1.10200 − 1.10020) ÷ 0.00010 | 18.0 pips |
| Actual gross result | (1.10194 − 1.10028) ÷ 0.00010 | 16.6 pips |
| Combined execution cost | 0.8 entry + 0.6 exit | 1.4 pips |
Assume a contract of 100,000 base-currency units per lot and a volume of 0.20 lot. That is 20,000 EUR, so one 0.00010 price movement equals USD 2. The 1.4-pip difference is USD 2.80. This example is quoted in USD; another account currency needs the appropriate conversion.
The actual fill prices already contain that difference. Do not subtract USD 2.80 again from actual trading profit as though it were an additional statement fee. Likewise, using an entry Ask and exit Bid already incorporates those price sides; do not deduct an extra assumed spread from the same comparison. Record commission and swap separately. The strategy profitability after costs guide explains how to keep gross results and cost assumptions consistent.
Build an MT4 execution worksheet from available evidence
MT4 Account History provides ticket, volume, opening and closing times and prices, and financial fields such as commission and swap. An exported statement does not universally preserve the original request quote and its timestamp. If that benchmark was never captured, classify it as unavailable instead of treating the opening fill as both reference and outcome.
The same documentation identifies “Market Price” in the pending-order part of a report as the current market price when the report is generated. It is not a retrospective quote at original submission. Use the MT4 history export workflow to preserve the report, then add independently captured evidence in a separate worksheet.
| Field | What to record | Reason |
|---|---|---|
| Identity | Account/server label, ticket, symbol and action | Matches the measurement to the correct transaction. |
| Order and size | Order type, execution mode, requested and filled volume | A market entry and a triggered stop are different observations. |
| Reference | Price, Bid/Ask side, benchmark type and evidence source | Prevents mixing a quote, midpoint and trigger. |
| Timing | Original request/reference and fill timestamps, timezones and precision | Shows whether the events can actually be aligned. |
| Outcome | Fill price, quantity, rejected or unfilled status | Retains outcomes that a fills-only file can miss. |
| Calculation | Pip or tick size, formula and signed result | Makes the number reproducible. |
| Context | Session, news condition, observed spread and connection notes | Supports comparisons between similar conditions. |
| Evidence quality | Complete, approximate or missing benchmark; source filename | Keeps uncertainty visible. |
The MT4 Journal records platform events and can open the log directory from its context menu. Inspect the relevant entries; do not assume every log includes a complete Bid/Ask request history or high-resolution execution timestamps. Preserve original files and avoid filling missing fields from memory.
Time alignment deserves its own check. A computer timestamp and a server timestamp may use different offsets. The sessions and MT4 server-time guide shows how to verify them. A measured delay can include client processing, network transit and server handling; a ping reading alone is not the duration of a particular order's execution.
Why stops, limits and deviation settings behave differently
Prices can move while an order travels or when available liquidity changes. News, gaps and limited liquidity are execution-risk factors described in OANDA's explanation. A candle alone cannot show the full order-processing sequence, available quantity or both quote sides.
For MT4, MetaQuotes specifies Bid checks for a long position's stop loss and take profit, and Ask checks for a short position's levels. A Bid chart can therefore miss an Ask-side trigger. Compare the appropriate quote evidence before concluding that the market never reached a short position's stop.
A stop trigger does not guarantee an identical execution price during a gap. MetaQuotes' order examples illustrate price-gap execution beyond an activation level. In the table above, the long's 1.09800 trigger and 1.09770 closing fill produce a three-pip trigger-to-fill cost. That number alone cannot isolate how much movement occurred before versus after the closing request reached the server.
A limit constraint has a different tradeoff: the desired price may not be available, leaving an order unfilled. Standard MT4 lists Buy Limit, Sell Limit, Buy Stop and Sell Stop as its four pending types; it does not list native Buy Stop Limit or Sell Stop Limit orders. Do not follow another platform's stop-limit instructions as an MT4 feature.
A stop-limit arrangement, where supported by a particular product or platform, activates a limit order after its trigger. The SEC's explanation for stock orders illustrates the general price-control versus non-execution tradeoff. Its equity rules do not establish your forex contract's trigger or execution policy. An unfilled exit can leave exposure open. Read the stop-loss and position-sizing guide alongside the execution record when reviewing how that exposure fits the account plan.
Nor is MT4's maximum-deviation setting a universal stop-loss guarantee. MetaQuotes explicitly limits price deviation at order placement to instant execution mode. Check the current symbol, account policy and actual control units before relying on it.
Review all attempts and disclose the measured subset
Select the review period and inclusion rules before sorting the worst fills. For a simple hypothetical sample, assume one possible fill per order attempt: 30 attempts produce 24 fills, four rejections and two cancellations without a fill. Only 20 of the 24 fills have a usable benchmark. Measurement coverage is therefore 20 ÷ 24, or 83.3% of fills.
Suppose those 20 measured costs, in pips, are: 0.1, 0.2, 0.2, 0.3, 0.3, 0.4, 0.4, 0.5, 0.6, 0.7, 1.0, 2.5, 0, 0, 0, 0, −0.1, −0.2, −0.3, −0.6.
- Twelve are adverse: 60% of the measured subset.
- Four are unchanged and four improve: 20% each.
- The sum is 6.0 pips; the mean is +0.30 and the median +0.20.
- The worst observation is +2.5 pips; the best is −0.6.
These percentages describe 20 measured fills, not all 30 attempts. A missing benchmark is not zero slippage, and a rejection is not a fill. If evidence is more often missing during fast markets, the measured average may understate difficulty. This small invented sample illustrates arithmetic, not a reliable broker ranking.
Where an instruction produces multiple fills, preserve each quantity and price. Its volume-weighted average fill is the sum of quantity × price divided by total filled quantity. Group child fills under their original instruction, distinguish unfilled volume, and avoid counting one instruction as several independent trading decisions.
Compare like with like: pair, order action and type, size, session, news conditions, account terms, connection setup and benchmark definition. Keep both average cost and the distribution visible. A change in trade selection can move an aggregate even if execution within every comparable group stays similar.
Turn a measured finding into a practical decision
There is no useful universal “acceptable slippage” number for every method and instrument. Compare the measured distribution with your method's expected gross result and risk assumptions. If a small estimated edge disappears under observed entry and exit costs, that is a reason to reconsider the method's viability, not to disguise the cost in a different column.
- Recheck the price side, units, sign and timestamp alignment for unusual observations.
- Separate gaps and news conditions from ordinary observations, while retaining their contribution to the overall result.
- Review instrument terms and request an explanation using exact tickets, times and source records when a discrepancy remains.
- Document any change to timing, order method or size, then evaluate comparable subsequent records. Do not assume one changed setting caused an improvement.
Slippage alone does not establish broker misconduct. A useful concern is specific and reproducible: what was requested or observed, what filled, and which documented condition appears inconsistent. Preserve the evidence alongside the MT4 trading journal so the execution review becomes part of the strategy record.
Sources and documentation
- MetaQuotes: OrderSend, execution modes and instant-execution deviation.
- MetaQuotes: Account History, Journal, order types and symbol properties.
- BIS: FX execution algorithms and market functioning, particularly Box B on transaction-cost analysis.
- OANDA: slippage and execution risk; SEC: stock order types and the limit-order tradeoff.
Continue with MetaTrader Guides.
No comments