Published September 14, 2026

How to Measure Trading Slippage and Execution Costs

Measure trading slippage and execution costs with a benchmark-defined, signed shortfall formula, tick-value conversion, and an all-in cost figure that avoids double-counting spread.


In this article, slippage means the signed shortfall between a pre-specified benchmark price and the price an order actually filled at. For a buy, signed shortfall equals fill price minus benchmark price; for a sell, it equals benchmark price minus fill price — positive is always adverse, negative is always favorable, and zero means the fill matched the benchmark exactly.

direction = +1 for a buy, −1 for a sell
signed_price_shortfall = direction × (fill_price − benchmark_price)
slippage_ticks = signed_price_shortfall / tick_size
price_execution_cost = slippage_ticks × tick_value × quantity
all_in_execution_cost = price_execution_cost + explicit_transaction_fees

The benchmark has to be chosen before the fact and captured contemporaneously, and it determines what the number means — a decision-price benchmark and a spread midpoint answer different questions. Whether spread is already embedded in the resulting shortfall depends specifically on which benchmark was chosen: a midpoint-relative shortfall already contains the realized midpoint-to-fill price concession, but a same-side touch-relative shortfall (buy vs. ask, sell vs. bid) does not automatically capture the half-spread paid relative to midpoint — it only measures displacement beyond that touch. See “Why ‘half the spread’ isn’t the whole story” and “Do not double-count spread and slippage” below before combining any of these terms.

This is a different question from rule adherence, which classifies whether a decision matched a predefined behavioral rule (aligned, deviated, unclassified). A rule-following entry can still carry adverse slippage, and a rule-breaking entry can fill exactly at the benchmark. This article owns the financial cost of execution friction — “how much did getting the order filled actually cost, in the trader’s own unit” — not process compliance.

Choose a benchmark before you measure anything

“Slippage” is not used identically across every trading context — a market maker’s transaction-cost-analysis (TCA) desk, a retail platform’s marketing page, and an academic microstructure paper can all mean something slightly different by it. This article fixes one operational definition — signed fill shortfall relative to a pre-specified benchmark price — and uses it consistently from here on. Whatever term a broker’s own report uses, translate it into this definition before comparing numbers across sources.

A quote is not one number, and neither is “the price.” Before picking a benchmark, know which of these it actually refers to:

PriceWhat it is
BidThe best price currently offered to buy from you
Ask (offer)The best price currently offered to sell to you
MidpointThe average of the current bid and ask
Last traded priceThe price of the most recent trade in the market, which may be stale relative to the current quote

A benchmark is not fully specified by naming an event — it has to name both an event and a price source. “The price when the trader decided to act” is not a reproducible benchmark by itself, because a platform can display the last trade, the bid, the ask, the midpoint, or a mark price at that instant, and those are not interchangeable numbers. A reproducible benchmark rule states both parts explicitly — for example “midpoint at decision time” or “NBBO midpoint at order receipt,” not merely “the price when I clicked.”

Two benchmark families answer different questions, and this article does not treat them as interchangeable:

  1. Order-receipt midpoint benchmark. Use the market midpoint sampled at the fixed reference time the order reaches the venue — not before, and not at some later point “immediately after.” This is closer to a market-microstructure measure of realized fill quality against the contemporaneous market, analogous to execution-quality measures used under the SEC’s Rule 605 for covered NMS-stock orders.1 Rule 605 itself defines this timing more precisely than “reaches the venue”: its benchmark event is the midpoint of the NBBO at the time of order receipt, based on capture in the relevant entity’s automated order-handling system, which is not always identical to physical arrival at a venue. This article’s generalized “order reaches the venue” framing is a practical analogue for a trader’s own scorecard, not a restatement of the exact Rule 605 definition — see the scope note in the worked example below for how the Rule 605 boundary applies to the ES contract used there.
  2. Decision-time benchmark. Use the price shown when the trader (or the signal generating the order) decided to act, sampled at that fixed decision timestamp. This decision-price shortfall is implementation-shortfall-style, in the spirit of the CFA Institute’s transaction-cost-analysis curriculum2 — it can include market movement or delay between the decision and the moment the order actually reached the venue, not only the cost of crossing the spread.

A decision-price shortfall captures part of the broader implementation-shortfall framework, not the complete calculation. The CFA Institute’s transaction-cost-analysis curriculum treats full implementation shortfall as also including explicit transaction costs and, for orders that only partly fill, the opportunity cost of the unexecuted quantity — a decision made once, only partly acted on, still has a cost attached to the part that never traded. This article’s filled_price − decision_price figure covers the filled quantity’s price concession; it is not, by itself, the complete implementation-shortfall number for the underlying decision.

The decision-time and order-receipt benchmarks are not one interchangeable “decision/arrival” family — the gap between them is itself economically meaningful, since delay between deciding and the order reaching the venue is its own source of cost. For a single trader building a simple, repeatable scorecard, a decision-time benchmark with clearly documented event-and-price semantics is usually the most practical starting point: it is the price the trader can actually observe and record at the moment they act, and it does not require book-depth data most retail platforms don’t expose. Whichever benchmark is chosen, state it next to every reported figure — “vs. decision-time last trade” or “vs. order-receipt midpoint” are not interchangeable labels.

The benchmark rule itself should be fixed in advance — the same event and the same price source every time, sampled at that exact timestamp, not before or after it — and the benchmark price should be captured contemporaneously at that event, not reconstructed afterward from a chart. Choosing the benchmark after seeing the fill turns a measurement into a story that can be shaped, consciously or not, to produce a preferred answer.

Convert a price shortfall into a cost

tick_size is the instrument’s minimum price increment; tick_value is the currency value of one tick per unit or contract. They are not interchangeable, and a raw price difference is not comparable across instruments with different tick sizes or tick values — only the converted currency figure is.

slippage_ticks = signed_price_shortfall / tick_size
price_execution_cost = slippage_ticks × tick_value × quantity

price_execution_cost on its own is a benchmark-shortfall figure, not the complete transaction cost. Add explicit, stated fees to get the full picture:

all_in_execution_cost = price_execution_cost + explicit_transaction_fees

all_in_execution_cost is all-in only relative to the chosen benchmark — it does not by itself guarantee every implicit execution-cost component is captured, and its economic coverage depends entirely on which benchmark produced price_execution_cost. A touch-based figure in particular can omit a real cost component; see the touch-benchmark note immediately below.

Choose either an all-in benchmark-shortfall approach or a mutually exclusive component-decomposition approach (spread, latency, impact, calculated separately from quote data) — never sum overlapping measures from both. Whether price_execution_cost already contains the cost of crossing the spread depends on the benchmark: if it is a midpoint benchmark, the signed shortfall already reflects the realized midpoint-to-fill price concession plus any subsequent price movement, and a separate half-spread line item added on top of it counts the same friction twice. If it is a same-side touch benchmark (buy vs. ask, sell vs. bid), the shortfall measures displacement beyond that touch and does not by itself contain the half-spread paid relative to midpoint — see “Why ‘half the spread’ isn’t the whole story” below for the full distinction.

Why “half the spread” isn’t the whole story

Older execution-cost write-ups often shorthand spread cost as “half the quoted bid-ask spread, paid on entry and again on exit.” That shorthand conflates three distinct quantities that need to be kept separate:

quoted_spread = ask − bid
quoted_half_spread = (ask − bid) / 2

The quoted spread and quoted half-spread are based on the displayed quote, not on any actual execution. Under this simplified, static-quote framing, a one-way, liquidity-taking buy or sell at the quoted ask or bid incurs approximately the quoted half-spread relative to midpoint — not the full quoted spread, which is the entire distance between the bid and the ask. A single marketable order does not cross the full quoted spread; it takes one side of it. (Effective spread is conventionally doubled partly so its scale is directly comparable with that full quoted spread — see below — not because a one-way fill actually costs the full spread.)

signed_midpoint_shortfall = direction × (fill_price − midpoint_at_benchmark_time)

This is the one-way economic price concession this article’s price_execution_cost formula measures when the benchmark is a midpoint: the actual fill compared against the actual contemporaneous midpoint. It already reflects whatever half-spread was actually paid, plus any additional price movement contained in the fill — not a theoretical approximation of it.

effective_spread = 2 × direction × (fill_price − midpoint_at_reference_time)

In conventional execution-quality analysis, effective spread conventionally doubles this same one-way midpoint-relative concession so the result is expressed on the same full-spread basis as the quoted bid-ask spread. It should not be interpreted as the realized cost of an actual entry-and-exit round trip — the “round-trip” framing describes the full-spread scale it’s expressed on, not two separate executions. Like the shortfall above, it is based on the actual execution relative to a contemporaneous midpoint — it is not merely the quoted half-spread, and it is not a theoretical approximation. If the order received price improvement, effective spread can be narrower than the quoted spread; if it filled beyond the displayed quote, effective spread can be wider than the quoted spread. If a broker or venue reports effective spread as this conventional doubled statistic, do not add that doubled number into all_in_execution_cost on top of a midpoint-based price_execution_cost — the two describe the same underlying concession at different multiples, and combining them double-counts it.

A touch benchmark (buy vs. ask, sell vs. bid) answers a different question from all three of the above. It measures price displacement beyond the displayed executable touch, not the price concession relative to midpoint — a fill exactly at the ask has zero touch-relative shortfall but still paid the full half-spread relative to midpoint. A generic touch-relative shortfall must never be described as an all-in, spread-inclusive execution-cost measure — an all_in_execution_cost built from a touch benchmark is all-in only relative to that touch, not relative to midpoint, and the midpoint-to-touch concession is outside it; see “Choose a benchmark before you measure anything” above and “Do not double-count spread and slippage” below.

Beyond the benchmark-definition question, actual execution can also differ from the quoted-spread approximation because of:

  • whether the order was marketable at all — a resting order can fill at the bid or ask it posted, not by crossing a spread;
  • displayed vs. available liquidity — the size shown at the touch may be smaller than the order;
  • partial fills across multiple prices;
  • market movement between order submission and fill; and
  • market impact from the order’s own size relative to available liquidity.

A midpoint-based benchmark-shortfall figure already absorbs all of this into one number — which is exactly why it should not also be added to a separately estimated half-spread. Reserve a standalone effective-spread or component decomposition for cases where the trader actually has the book/quote data to calculate it correctly and wants to isolate spread cost specifically from the rest of the shortfall; otherwise, the all-in benchmark-shortfall figure above is the simpler and more defensible default for an individual trader.

Separate execution costs from carry and overhead costs

Not every dollar a trading account pays is an execution cost. Keep the categories distinct so a subscription or financing charge doesn’t get folded into a fill-quality metric it has nothing to do with.

CategoryIncludesNature
Execution / transaction costprice_execution_cost (benchmark shortfall), commissions, exchange fees, applicable regulatory transaction feesAttached to the act of getting a specific order filled
Carry / holding costOvernight financing, borrow cost on short positionsAttached to holding a position over time, not to the fill itself
Operating overheadPlatform subscriptions, market-data subscriptionsFixed or recurring account cost, unrelated to any single trade’s execution

All three can affect net profitability, but only the first belongs in an all_in_execution_cost figure. If carry costs or overhead are tracked at all, report them as separate line items, not folded into the execution-cost scorecard below.

Worked example: entry, exit, and round-trip cost

To keep the arithmetic checkable, this example uses the real, published contract specifications of the CME E-mini S&P 500 (ES) futures contract: a minimum price fluctuation (tick size) of 0.25 index points, worth $12.50 per contract per tick.3 The price levels themselves are illustrative, not a record of an actual trade or a market call. This example uses a decision-time benchmark, not the order-receipt midpoint benchmark discussed above — the midpoint-based methodology described there is analogous to execution-quality measures used under SEC Rule 605 for covered NMS-stock orders, but Rule 605 itself is not the governing execution-reporting regime for CME futures like ES.1

Entry — buy 2 contracts. Decision-price benchmark: 4500.00. Actual fill: 4500.75.

direction = +1 (buy)
signed_price_shortfall = +1 × (4500.75 − 4500.00) = 0.75 points
slippage_ticks = 0.75 / 0.25 = 3 ticks (adverse)
entry price_execution_cost = 3 × $12.50 × 2 = $75.00

Exit — sell 2 contracts to close. Decision-price benchmark: 4498.00. Actual fill: 4498.25.

direction = −1 (sell)
signed_price_shortfall = −1 × (4498.25 − 4498.00) = −0.25 points
slippage_ticks = −0.25 / 0.25 = −1 tick (favorable)
exit price_execution_cost = −1 × $12.50 × 2 = −$25.00

Round-trip price execution cost:

round-trip price_execution_cost = $75.00 + (−$25.00) = $50.00

Explicit transaction fees, stated per side at $4.20:

entry fee = $4.20
exit fee = $4.20
round-trip explicit_transaction_fees = $8.40

All-in round-trip execution cost:

all_in_execution_cost = $50.00 (price) + $8.40 (fees) = $58.40

Reporting only the entry leg ($75.00 + $4.20 = $79.20) would have overstated this trade’s true execution drag; reporting only the round-trip net figure would have hidden that the entry itself was three ticks adverse. Keep entry, exit, and round-trip cost as three separate figures — a favorable exit can mask a consistently bad entry pattern if only the net number is ever reviewed.

Build a benchmark-shortfall scorecard

An unweighted average across fills treats a one-contract fill the same as a fifty-contract fill. Report both an equal-fill mean and a size-weighted mean, and be explicit about which one is being read:

equal-fill mean slippage_ticks = Σ slippage_ticks / number of fills
volume_weighted_slippage_ticks = Σ(slippage_ticks × quantity) / Σ quantity
MetricFormulaNote
Equal-fill mean slippage (ticks)Σ slippage_ticks / fillsTreats every fill equally regardless of size
Volume-weighted mean slippage (ticks)Σ(slippage_ticks × quantity) / Σ quantityWeights larger fills proportionally
Execution cost per executed unitΣ all_in_execution_cost / Σ executed quantityOne executed unit means one share/contract execution on one side of the trade, not a round-turn — see note below
Execution cost as % of gross absolute P&LΣ all_in_execution_cost / Σ |gross pre-cost trade P&L|Secondary, contextual metric only — see caution below
Benchmark-basis cost-adjusted expectancy(Σ benchmark-price hypothetical P&L − Σ all_in_execution_cost) / number of tradesValid only when the P&L term is reconstructed from benchmark prices, not actual fills — see note below
Actual-fill net expectancy(Σ actual-fill gross P&L − Σ explicit fees not already reflected in that P&L) / number of tradesValid when P&L is calculated from actual entry/exit fills; do not also subtract price_execution_cost — see note below

These figures are hypothetical:

Order typeAttemptsFillsFill rateEqual-fill mean slippage (ticks)Volume-weighted mean slippage (ticks)Cost per executed unit
Market order4242100%0.91.1$14.10
Marketable limit201890%0.30.4$6.40
Resting limit612643%-0.4-0.3$3.90

The resting-limit row has the lowest measured cost per executed unit and the lowest fill rate in the same table — see “Passive orders measure a conditional sample” below before reading that row as simply “cheaper.”

Execution cost per executed unit, defined above, counts one share/contract execution on one side of the trade — an entry fill and its closing fill are two executed units, not one. If a separate round-turn cost figure is wanted (cost per matched, completed position), calculate it separately from paired entry/exit records rather than changing what the denominator in the formula above means; the two are different metrics, not two labels for the same number.

A mean alone can hide a bad tail. For the market-order row above: median signed slippage was 0.8 ticks, the adverse-fill rate (share of fills with a positive, adverse shortfall) was 58%, and P90 adverse slippage was 2.4 ticks — one fill in ten was at least 2.4 ticks worse than the benchmark, well above the 0.9-tick equal-fill mean. Tail percentiles become more interpretable as sample size grows; with a small sample, report the raw adverse fills alongside the percentile rather than treating the estimate as stable — high percentiles like P90 or P95 are particularly sample-sensitive.

On the P&L metrics: “Execution cost as % of gross absolute P&L” is unstable near a small denominator — a near-zero gross P&L can send the ratio to an extreme value even when execution behavior barely changed. Treat it as secondary context, not the primary execution KPI; the metrics above (slippage in ticks, cost per unit) are more stable.

Cost-adjusted expectancy has two valid accounting paths, and they are not interchangeable — mixing them double-counts the price-shortfall component:

  • Benchmark-basis. If the P&L term is reconstructed from the pre-specified benchmark prices — the hypothetical P&L the trade would show entering and exiting at the benchmark, before any execution shortfall — that P&L does not yet contain the price-execution-cost component, so it is correct to subtract the full all_in_execution_cost from it.
  • Actual-fill basis. If the P&L term is instead calculated from the actual entry and exit fill prices, that P&L already embeds the fill-versus-benchmark price shortfall. Subtracting price_execution_cost again would double-count it; subtract only explicit fees that aren’t already reflected in that P&L.

For example, take a benchmark entry of 100 and benchmark exit of 110, but actual fills of 101 on entry and 109 on exit, with $1 in fees. The benchmark-price hypothetical P&L is 110 − 100 = +10; price_execution_cost is 2 (a 1-unit adverse shortfall on each leg), so the benchmark-basis figure is 10 − 2 − 1 = +7. The actual-fill gross P&L is 109 − 101 = +8, which already contains that same 2 units of price shortfall, so the actual-fill net figure is 8 − 1 = +7 — not 8 − 2 − 1 = 5, which would double-count the shortfall already embedded in the actual fills. Both paths correctly reconcile to +7; only the benchmark-basis path subtracts price_execution_cost, because only its P&L term was calculated from prices that didn’t already contain it. Never subtract a fill-versus-benchmark price shortfall from a P&L figure that was already calculated from the actual fills. State explicitly which P&L basis (benchmark or actual-fill) and which cost basis (gross or net of fees) is feeding any reported cost-adjusted figure.

Capture a comparable record per fill

FieldWhat to retainRole in cost measurement
Benchmark price and rulePrice at the specified event (decision-time or order-receipt), the price source sampled (midpoint, touch, last trade), and a timestampDefines the cost baseline and what the resulting number means
DirectionBuy or sellSets the sign of signed_price_shortfall
Order typeMarket, marketable limit, resting limit, stop, etc.Groups comparable fills
Actual fill priceConfirmed execution price from the brokerSupplies the observed price
QuantityContracts or shares in the fillConverts per-tick cost to currency
Explicit transaction feesCommission, exchange, and applicable regulatory fees from the fill confirmationNon-price cost component
Tick size and tick valueInstrument’s minimum increment and its currency valueConverts price units to currency
Session / volatility / liquidity contextTime of day, relevant volatility regime, displayed liquidity if availableGroups fills for like-for-like comparison

The benchmark price is the field most often missing after the fact. If the trading interface exposes the required contemporaneous quote, record it at the specified event rather than reconstructing it from a chart later, which reintroduces the hindsight bias this measurement exists to avoid.

Keep comparisons like-for-like

Compare cost within the same instrument, order type, direction, and volatility or session context before drawing a conclusion. Tick value, typical spread, and expected fill quality differ by instrument, and by session for the same instrument. Where the data is actually available to a retail trader — quantity, urgency of the order, and displayed liquidity at the time — segment on those too; do not manufacture a segmentation that depends on institutional order-book data a retail platform doesn’t expose.

Pooling market-order slippage from a quiet overnight session with market-order slippage from a high-volatility news release will average away the pattern that matters: cost is not constant, and an overall average hides when and why it spikes.

Avoid over-segmentation in the other direction. Instrument × order type × direction × session × size can leave a handful of fills per cell — enough to inspect individual records, not enough to claim a stable rate.

Passive orders measure a conditional sample

Realized-fill statistics for a resting (passive) limit order are conditional on the order actually filling. A resting-limit row that looks cheap on cost-per-unit can coexist with a lower fill rate, missed trades, and adverse selection on the fills that did happen — excluding unfilled attempts does not by itself cause favorable signed slippage; it simply means the reported figure describes only the subset of attempts that filled. Always pair a passive order’s cost figure with its fill rate, and if the missed trades themselves matter to the decision, treat that as a separate opportunity-cost question — formally, an implementation-shortfall framework that also prices unfilled orders — rather than folding it into this realized-fill cost scorecard.

Common execution-cost measurement failures

No fixed benchmark rule

If the benchmark is chosen after seeing the fill, the comparison is no longer a cost measurement. Fix the benchmark rule and event in advance, and capture the benchmark price contemporaneously.

Mixing benchmark families without labeling them

An order-receipt midpoint figure and a decision-price figure are not the same number and should never be averaged together or compared side by side without saying which is which.

Do not double-count spread and slippage

Whether spread is already embedded in the shortfall depends on the benchmark definition, not on whether the benchmark is “inside the spread” in some general sense. A midpoint-relative shortfall already contains the realized midpoint-to-fill price concession — adding a separate half-spread line on top of it counts that friction twice. A same-side touch-relative shortfall (buy vs. ask, sell vs. bid) does not automatically capture the half-spread paid relative to midpoint; it only measures displacement beyond the touch, and should never be described as an all-in, spread-inclusive execution-cost figure on its own. Pick one convention — all-in midpoint-based benchmark shortfall, or a mutually exclusive component decomposition that defines spread and touch displacement as non-overlapping terms — and state it.

Mixing signed and unsigned slippage

Averaging unsigned (absolute-value) slippage together with signed slippage produces a number that answers neither “how large are the deviations” nor “which direction do they skew.” Decide which question is being asked and keep the sign convention consistent across the sample.

Treating a single fill’s shortfall as proof of its cause

An observed benchmark shortfall can reflect spread, latency, market impact, volatility, or order-type choice in combination; a single fill’s number does not by itself identify which one. Isolating a specific cause (venue quality especially) requires more granular quote or order-event data than one fill-versus-benchmark figure provides — do not attribute an elevated cost pattern to a broker or venue without first checking order-type, size, and volatility context. Evaluating broker execution quality covers the self-evidence framework and regulatory disclosures that separate broker-attributable fill patterns from market- and order-type-caused ones.

Comparing cost across changed position size without normalizing

A larger position multiplies the currency cost of the same tick-level shortfall. Normalize to cost per executed unit before comparing periods where size changed.

Turn cost data into a decision

FindingWhat it supportsWhat it does not establish
Market orders show consistently higher cost per unit than limit orders in the same contextTest whether order type explains the difference before reconsidering order-type choice for that contextThat limit orders are always preferable — fill rate must be checked too
Execution cost as % of gross absolute P&L is rising while gross P&L is flatInvestigate execution friction as a contributor to the flat resultThat the strategy itself has stopped working
Cost spikes cluster around specific sessions or volatility regimesTest whether order type, urgency, or size explains the higher cost before deciding whether the execution process should changeThat the strategy should be abandoned in that window
Cost-adjusted expectancy remains positive despite nonzero costNo action required from cost aloneThat further cost reduction has no value

Cost measurement answers “what did execution actually cost,” not “what should be done about it.” The order-type, sizing, or venue decision that follows remains the trader’s own. For binary event contracts, the pre-trade counterpart of this measurement, pricing an order against the resting book before it is sent, is covered in prediction market liquidity and executable price. If cost or execution behavior looks like it may be changing the calculated edge itself rather than just adding friction on top of it, mistake-adjusted expectancy — a Costante-defined diagnostic label, not a standard institutional TCA metric — covers recomputing the win-rate/average-win/average-loss formula on aligned and classifiable trade subsets to see whether that pattern holds up. This all_in_execution_cost figure is also the exact threshold a strategy’s gross edge has to clear to be net-positive — minimum edge after trading costs covers that comparison and the cost-adjusted breakeven win rate it implies.

Cost is a distinct diagnostic from behavioral process adherence. A trade can be execution-cost-favorable and still process-deviated, or cost-unfavorable and still process-aligned — rule adherence and this cost scorecard answer different questions and should be read side by side, not merged into one score.

Where Costante fits

Costante supports the behavioral-performance layer around a trader’s existing method: low-friction trade and behavioral logging, structured review, and discipline trends that help a pattern stay visible on a schedule rather than only after a losing stretch. Recording the benchmark price, fill, quantity, and fees needed for this specific scorecard, and doing the arithmetic above, is the trader’s own workflow.

Costante does not calculate slippage or execution cost automatically, does not capture market data or broker fill feeds, does not route or execute orders, does not select order types on the trader’s behalf, and does not verify broker or venue fill quality. The trader remains responsible for capturing the benchmark price, choosing the order type, doing the calculation, and interpreting the resulting pattern.

Frequently asked questions

What benchmark should I use to calculate trading slippage?

For a simple, repeatable individual scorecard, use a decision-time price you can actually observe and record at the moment you act, and document both the event and the price source (last trade, bid, ask, or midpoint) — “the price when I decided” is not a complete benchmark definition by itself. An order-receipt midpoint benchmark is closer to a market-microstructure fill-quality measure and needs contemporaneous quote data; a decision-time benchmark is closer to an implementation-shortfall-style measure and can include market movement or delay between the decision and the fill. Pick one, document it, and don’t switch between them inside the same comparison.

Should I add spread to slippage?

It depends on which benchmark defines the shortfall. If the benchmark is a midpoint, the fill-versus-benchmark shortfall already contains the realized midpoint-to-fill price concession, including the half-spread paid — adding a separate half-spread charge on top double-counts that friction. If the benchmark is a same-side touch price (buy vs. ask, sell vs. bid), the shortfall measures displacement beyond that touch and does not by itself capture the half-spread paid relative to midpoint; a fill exactly at the ask has zero touch-relative shortfall but still paid the half-spread relative to midpoint. Only add a separate spread term if you are running a mutually exclusive component decomposition with the quote data to define it without overlap.

How do I calculate slippage in ticks?

slippage_ticks = signed_price_shortfall / tick_size, where signed_price_shortfall = direction × (fill_price − benchmark_price) and direction is +1 for a buy and −1 for a sell. Multiply by tick value and quantity to convert to currency.

What is the difference between slippage, effective spread, and implementation shortfall?

They form a hierarchy, not three overlapping synonyms. As used in this article, slippage is an operational label for the signed fill-versus-defined-benchmark difference, whatever benchmark is chosen. Effective spread is a specific, narrower statistic: the midpoint-based execution-quality measure, conventionally doubled so it’s expressed on the same full-spread basis as the quoted bid-ask spread — not because it represents an actual entry-and-exit round trip. Implementation shortfall is the broadest of the three — a decision-to-implementation cost framework that can include explicit transaction costs, delay cost, market-impact cost, and the opportunity cost of any unexecuted quantity, not only the price difference on the quantity that filled. A decision-price shortfall calculated in this article is implementation-shortfall-style, but it is not a complete implementation-shortfall calculation on its own.

Can limit orders have slippage?

Yes, relative to whatever benchmark is chosen, including price improvement (negative, favorable slippage) when a marketable limit fills inside the spread. A resting limit order’s realized-fill slippage is conditional on it filling at all — pair the figure with its fill rate rather than reading a low realized cost as proof the order type is cheap overall. Which order type to send in the first place is a separate decision made before any of these figures exist — see market orders vs. limit orders for the price-risk-vs-execution-risk tradeoff behind that choice.

How often should execution cost be reviewed?

Capture the benchmark price and fill data at the time of every order, then review the aggregate scorecard on a fixed schedule and after any material change in instrument, size, or order-type mix. The right interval depends on trading frequency; no universal trade count applies.

Costante provides educational workflow tools, not financial advice. Trading involves risk.

Sources

Footnotes

  1. U.S. Securities and Exchange Commission. Frequently Asked Questions: Rule 605 of Regulation NMS. Updated April 1, 2026. Rule 605 requires a market center that trades NMS stocks to publish uniform statistical measures of execution quality, including NBBO midpoint-based effective-spread statistics; it covers NMS-stock order reporting, not futures contracts such as ES. Accessed September 14, 2026. ↩ ↩2

  2. CFA Institute. Trading Costs and Electronic Markets. Refresher reading covering explicit and implicit trading costs, implementation shortfall, and its delay, execution, and opportunity-cost components. Accessed September 14, 2026. ↩

  3. CME Group. E-mini S&P 500 Futures Contract Specs. Minimum price fluctuation of 0.25 index points, valued at $12.50 per contract. Accessed September 14, 2026. ↩