The fill-price problem: slippage, spreads, and commissions
Xavi ·
A strategy buys an option quoted at $1.00 bid and $1.20 ask. The backtest fills it at $1.10.
That looks fair. It may even be possible. But the midpoint is a calculation, not a trade.
If the strategy’s average profit is only a few cents per contract, that distinction can decide whether the entire backtest works.
A quote is not a fill
A buyer who wants immediate execution usually pays toward the ask. A seller usually gives up price toward the bid. A limit order can improve the fill, but it introduces a new problem: the order may not execute at all.
Historical quote data rarely tells you where your order would have sat in the queue. It does not show hidden liquidity, your routing decisions, or whether the market moved while a multi-leg order was working.
The simulator has to choose a rule. Your job is to understand how friendly that rule is.
Multi-leg strategies hide more assumptions
An iron condor has four quoted markets. The displayed midpoints may imply an attractive net credit, yet one leg could be stale or too wide to trade near its midpoint.
A live complex order may fill as a package, partially fill, sit untouched, or require a price concession. A historical model simplifies that process. There is nothing dishonest about a simplification when it is disclosed and tested. Trouble starts when a modeled net price is treated as proof of an executable historical fill.
Pay attention to the whole spread and the individual legs. A tidy round-trip P/L can hide an implausible fill in one contract.
Turnover makes small errors expensive
Suppose your fill assumption is too favorable by $0.03 per contract on entry and another $0.03 on exit.
One trade will barely notice. Hundreds of trades will.
Frequent strategies and structures with several legs rack up more fill events. Commission schedules often charge per contract, which means a four-leg position can incur costs on every leg when it opens and closes.
Do the cost math before celebrating the gross result.
Run three versions without changing the rules
A single execution assumption invites false certainty. Use a range.
The first run can use optimistic fills, perhaps at the midpoint, with realistic commissions. This is not the expected case. It shows how the strategy behaves when execution is cooperative.
For the base run, add a modest concession based on your own order history if you have it. Compare the midpoint visible when you submitted each order with the price you received. Your records are more relevant than a generic slippage number borrowed from somebody trading another product.
For the stress run, make fills worse and raise the cost estimate. The point is not to manufacture a disaster. You want to see whether a small change wipes out the historical edge.
Keep the dates, rules, and position size identical across the runs. Otherwise you will not know whether execution caused the difference.
Find the strategy’s cost budget
Increase modeled slippage until the backtest’s net result reaches roughly zero.
That number is the strategy’s historical room for execution error. It is not a prediction of future tolerance, but it is revealing.
If one extra cent destroys the result, the system is balanced on a thin assumption. If it remains interesting under harsher costs, there may be enough margin to justify more research.
You can perform the same exercise with commissions. This matters when comparing brokers or testing structures with different numbers of legs.
Inspect the days when execution mattered most
Summary metrics smooth out the awkward parts. Open the trades.
Look at the largest winners and ask whether spreads were unusually wide. Check stop exits during fast markets. Find trades where the modeled profit was smaller than the total assumed cost. If a strategy holds near expiration, inspect those sessions separately because option prices can move sharply and quoted markets may widen.
A backtest with honest costs will often look worse. That is useful. It is cheaper to lose an imaginary edge than real money.
StratVerra lets you model slippage and commissions on hosted minute-level options data and rerun the same saved strategy under different assumptions. Try one strategy with a friendly, base, and stress case. If the conclusion changes, you have found the next thing to investigate.
Next, we will move past net profit and read the rest of the backtest.