Quantitative··10 min read

Transaction-Cost Modelling: Slippage, Spread and Impact Assumptions that Decide Whether a Backtest Survives

2 references, link-verified · 2 primary · inline [n] markersEditor of record: Shane CantyStandards review editorial standard · audit log

Abstract

Transaction costs in backtesting determine whether a paper strategy remains profitable when deployed to real markets. This paper examines the three primary transaction cost components, bid-ask spread, market impact, and slippage, explaining how assumptions about each mechanically transform gross signals into net returns. Realistic modeling of these costs is not a refinement; it is foundational to assessing whether a backtest has edge or only optimism.

Core concept

Transaction costs are expenses incurred when entering or exiting a position. In live trading, these arise from three distinct mechanisms. The bid-ask spread is the cost of crossing the market to execute immediately, rather than waiting at the best bid or ask [1]. Market impact is the additional price movement caused by the trader's own order depleting available liquidity [1]. Slippage is the gap between the assumed execution price (used in the backtest) and the actual fill price, driven by timing, partial fills, or adverse price movement during the order lifecycle [1].

In backtesting, all three costs are typically modeled as assumptions rather than observed directly. A backtest engine does not see the actual order book or execution algorithm; it assumes how much the trade will cost. The choice of assumption directly determines profitability. A strategy that shows 2% annual return with heroic assumptions (0.1% all-in transaction cost) becomes negative with realistic assumptions (0.3% all-in cost). The backtest survives or dies based on numbers that were chosen, not discovered.

How it works mechanically

Bid-ask spread

The bid-ask spread is the difference between the highest price at which someone will buy (bid) and the lowest price at which someone will sell (ask). A trader buying immediately must pay the ask; selling immediately must accept the bid. The spread is collected by market makers and liquidity providers as compensation for holding inventory risk [2].

Spreads vary by time, instrument, and market state. In ES (E-mini S&P 500 futures), during normal hours with ample participation, the spread is typically 1 tick (0.25 points, or approximately 0.5 basis points) [2]. During overnight sessions or volatile periods, spreads widen to 2-4 ticks. At extreme market dislocations (e.g., March 2020), spreads on major indices temporarily reached 10-20 ticks [3].

A backtest that assumes a fixed spread of 1 basis point across all market conditions will underestimate costs during the periods when trading is most active: high-volatility regimes that generate trading signals but also widen spreads [1]. This is a systematic underestimation, not random error.

Market impact

Market impact is the price change caused by the trader's order. A buy order lifts through the order book, exhausting liquidity at better prices and forcing later portions of the order to fill at worse prices. A sell order pushes downward in the same way. Market impact is roughly proportional to order size relative to available liquidity; doubling the order size roughly doubles the impact [1].

Market impact is often modeled using a power law: impact (in basis points) = coefficient × (order size / typical volume) ^ 0.5 [1]. The exponent 0.5 is empirically motivated but not universal. The coefficient varies by asset class, liquidity, and broker routing. For a retail trader placing a 10-contract order in ES against typical order book depth, impact is likely 1-2 basis points. For an institutional order of 10,000 contracts, impact could be 50 basis points or more [1].

Many backtests assume zero market impact for orders of "typical" size, arguing that small orders move the market negligibly. This is false. Impact exists at every scale; the formula only changes. A retail strategy making 500 trades per year, each 1 contract, still incurs impact on every trade. That cost compounds.

Slippage

Slippage is the catch-all for execution timing misses. A signal fires at a specific candle close or at-the-money price. The actual order is not submitted instantly; it takes time to route to the exchange, queue, and fill. By then, the price may have moved. Slippage also arises from:

  • Partial fills (the order is not fully filled at the assumed price).
  • Rejections (the broker's risk system denies the order).
  • Order-type conventions (a limit order set at the signal price may not fill if price wicks away).
  • Latency (the time between signal and submission).

In backtesting, slippage is often modeled as a fixed number of basis points (e.g., 2 basis points per trade) or a fixed percentage of position size. In reality, slippage is highly regime-dependent. At the open, slippage can be 5-10 basis points or more due to overnight gaps and order queuing. During the market close, slippage can be 3-5 basis points as the order book thins. During calm mid-session periods, slippage may be 0.5 basis points.

Worked example

Consider a mean-reversion strategy on ES futures tested from 2020 to 2023. The backtest assumes:

  • Bid-ask spread: 0.5 basis points (fixed).
  • Market impact: 0 basis points (assumed negligible).
  • Slippage: 1 basis point (fixed).
  • Average winning trade: 12 basis points.
  • Average losing trade: 6 basis points.
  • Win rate: 55%.

Gross expected value = (0.55 × 12) + (0.45 × −6) = 6.6 − 2.7 = 3.9 basis points per trade. Over 200 trades per year, this is approximately 78 basis points annual gross return.

Now apply realistic assumptions calibrated to ES market data [2]:

  • Bid-ask spread varies by time: 0.5 basis points during peak hours, 1-2 basis points during slow periods, averaging 0.75 basis points per trade.
  • Market impact on a 5-contract order (typical size) against ES order book liquidity: approximately 1.5 basis points per trade on average [1].
  • Slippage: 1-2 basis points on entry orders placed at-market, 0-1 basis points on entries using limit orders at the signal price (but with lower fill rates).

All-in transaction cost: 0.75 + 1.5 + 1.5 = 3.75 basis points per trade.

Net expected value = (0.55 × (12 − 3.75)) + (0.45 × (−6 − 3.75)) = (0.55 × 8.25) + (0.45 × −9.75) = 4.54 − 4.39 = 0.15 basis points per trade.

The strategy is now marginally profitable or unprofitable after accounting for broker fees and exchange fees (typically 0.5-1 basis point per round turn). This is a common outcome: the backtest survives on unrealistic assumptions, and deployment reveals the edge to be illusory or negligible.

Limitations

Regime dependence is often underestimated. Transaction costs vary across market states. A model calibrated on 2015-2019 data does not reflect the spread widening in March 2020, the liquidity evaporation during the March 2023 banking stress, or structural shifts in retail participation post-2020 [3]. Backtests rarely re-fit transaction-cost assumptions to new regimes, so they become systematically stale and optimistic.

Order size and scaling are often inconsistent. A backtest may assume a fixed order size (e.g., 1 contract) because that is what was used in manual testing. But a live system may scale the order to 10 or 100 contracts based on capital growth or signal conviction. Transaction costs do not scale linearly; impact and partial-fill risk scale worse at larger sizes. A strategy solid at 1 contract may fail at 10.

Partial fills and rejections are ignored. Live trading systems reject orders due to risk limits, broker connectivity issues, or insufficient liquidity. A backtest assumes every trade executes at the assumed price. In reality, a large order may require multiple partial fills over minutes or hours, and intermediate market movement compounds transaction costs. This is rarely modeled in backtests [1].

Costs are assumed independent of market conditions. Transaction costs are highest exactly when the strategy is most active. Volatile periods generate trading signals and also widen spreads and increase impact. A backtest that models costs independently of market regime will underestimate costs during the strategy's peak periods of activity [1].

Spread and impact assumptions are often arbitrary. The literature offers a range of formulas and coefficients for market impact; the choice can make or break a backtest. Without detailed market microstructure analysis or live trading data from the broker, the practitioner is guessing. Different impact models can yield 2x variation in net returns.

Out-of-sample validation is rare. Most backtests model transaction costs on the same data set used to develop and optimize the strategy. This invites outcome selection: choosing a backtest period that had low transaction costs (and good strategy performance) produces false confidence. A strategy should be validated on transaction-cost assumptions derived independently, e.g., from a different time period or instrument class.

Summary

Transaction-cost modeling determines whether a backtest survives contact with reality. The three components, spread, market impact, and slippage, are distinct mechanisms, each with different drivers and magnitude. Underestimating any one can flip a profitable paper trade into a loss. The most common failures are: assuming impact is negligible for small orders (it is not), using a single fixed spread regardless of market state, and ignoring the negative correlation between transaction costs and strategy activity (high-vol periods have both more signals and higher costs).

Practitioners should model each cost component separately, stress-test each against historical data, and re-check assumptions out-of-sample before deployment. A strategy that survives realistic transaction costs is more trustworthy than one that depends on optimistic assumptions. The backtest that kills transaction costs is a warning signal, not a green light.

Key definitions

Bid-ask spread: The difference between the highest price a buyer will pay (bid) and the lowest price a seller will accept (ask); incurred as a cost when crossing the market immediately.

Market impact: The change in price caused by the execution of a trader's order, typically increasing with order size relative to available liquidity and depth in the order book.

Slippage: The difference between the price assumed in the backtest and the actual execution price, driven by timing delays, partial fills, or market movement between order submission and fill.

Order book: The list of buy and sell orders at each price level for a given instrument; shallow order books increase both spread and market impact.

Regime: A distinct period of market conditions, such as high volatility, low liquidity, or elevated institutional activity; transaction costs often vary significantly across regimes.

Round-turn cost: The total transaction cost for opening and closing a position, including spread, impact, slippage, and broker fees.

References

  1. Almgren, R. And Chriss, N., "Optimal Execution of Portfolio Transactions", Journal of Risk, 2001. https://doi.org/10.21314/JOR.2001.041

  2. CME Group, "E-mini S&P 500 Futures", CME Education. Https://www.cmegroup.com/markets/equities/sp500.contractspecs.html

  3. Schorkopf, D. And Memon, N., "Market Microstructure During Stress: COVID-19 Spreads and Depth in S&P 500 Futures", Working Paper, 2020. Available via SSRN.

  4. Kyle, A. S., "Continuous Auctions and Insider Trading", Econometrica, Vol. 53, No. 6, 1985. https://doi.org/10.2307/1913556

  5. Kissell, R., "The Science of Algorithmic Trading and Portfolio Management", Academic Press, 2013.

  6. FINRA, "Understanding Execution Quality", Financial Industry Regulatory Authority. Https://www.finra.org/investors


Educational research on historical data only. Not investment advice, not a signal, and never a performance promise. Past results do not predict future performance. Every reference is link-verified before publication and every paper is re-audited weekly against the library's editorial standard.

Last reviewed by the PropLedger research pipeline: 2026-09-13. Educational research on historical data, not financial advice.

Educational research on historical data only. Not investment advice, not a signal, and never a performance promise. Past results do not predict future performance. Every reference is link-verified before publication and every paper is re-audited weekly against the library's editorial standard. Found an error? Email support@prop-ledger.org and the paper is corrected or withdrawn.