Modeling Fees, Slippage, and Fills Before the First Dollar

Pull-quote: “Every strategy is brilliant gross of costs. The cost model is where research stops flattering itself and meets the venue.”
Why this matters
The distance between a research result and a tradeable strategy is measured in costs. Fees are the visible part. Slippage and unfilled orders are the larger, quieter part, and for any strategy that trades frequently or captures small edges, they are the whole question of viability. The discipline that follows is simple to state: the cost model is built before the first dollar moves, and it lives inside the research loop, not after it. A strategy evaluated gross of costs is not an early result. It is an unevaluated strategy.
The three components
| Component | What drives it | How it is modeled up front |
|---|---|---|
| Fees | Venue schedule, order type, tiers, maker and taker treatment | Deterministically, from published schedules, per order |
| Slippage | Order size against available liquidity, spread, volatility | As a function of size and book state, never a flat constant |
| Fill probability | Order type, distance from touch, queue position, adverse selection | Per order type, from preserved microstructure |
Two of the three are commonly mishandled. Slippage modeled as a flat constant erases exactly the size-dependence that matters, because cost per unit grows as the position grows against finite liquidity. And fill probability is usually ignored entirely, which quietly assumes every passive order fills. The assumption is not just wrong but wrong in the worst direction: passive fills arrive preferentially when the market is moving through your price, so the fills you model as free are the ones most likely to be adversely selected. The three components also interact, which is why they belong in one model: choosing a more passive order type lowers fees and raises fill uncertainty at the same time, and no component-by-component analysis prices that trade correctly.
Costs inside the loop, not after it
signal ──► gross expectancy
│
▼
[ COST MODEL, per order ]
fees + slippage(size, book) + P(fill | type)
│
▼
net expectancy ──► sizing and risk ──► pre-trade checks
│
▼
survives? ──► paper ──► live, where fills
recalibrate the model
The placement is the point. Costs applied as a haircut after research let cost-fragile strategies survive selection and die in production. Costs applied per simulated order, inside the replay, kill them at the desk, where dying is free. This is why the cost model and backtest parity are one system: slippage and fill estimates are only as honest as the preserved microstructure they are calibrated against.
Before live data exists, estimates are set conservatively and treated as provisional. Once real orders flow, recorded fills recalibrate the model, and the daily reconciliation of position, cash, and P&L keeps the estimated costs honest against the ones actually paid.
How this runs in practice
On a production desk, fees, slippage, and fill probability are modeled before the first dollar moves, as a standing part of the research framework. The cost model then stays load-bearing at execution time: liquidity-weighted sizing keeps positions inside what the venue can absorb, which is the sizing-side expression of the same slippage curve, and strict pre-trade checks gate every order against the assumptions the research was approved under. Costs are not an appendix to the strategy. They are one of its axioms.
Closing
Gross returns are a fiction everyone agrees to stop believing at different speeds. Building the fee, slippage, and fill model before the first dollar moves is what separates a research process from a sequence of hopeful experiments. Model the three components per order, keep them inside the loop, calibrate them against preserved microstructure and then against your own fills, and let sizing respect what the model says liquidity will bear. The venue charges for every lesson. The cost model is how you take the lesson without paying tuition twice.
