Fill assumptions (backtest execution model)
Fill assumptions are the rules a backtest or simulator uses to decide whether, when and at what price a simulated order executes: signal timing, market order price, limit order fills, stop fills, gaps and costs. They are part of the result, because historical data records what traded, not what a new order would have obtained.
Senzoukria · Glossary · Updated September 2026
The decisions every execution model makes
| Assumption | Optimistic version | Conservative version |
|---|---|---|
| Signal timing | Fill at the close of the bar that produced the signal | Fill at the next bar's open |
| Market order price | Last traded price | Next price plus slippage against the trade |
| Limit order | Filled as soon as price touches the limit | Filled only if price trades through the limit |
| Stop order | Filled exactly at the stop price | Filled at the worse of the stop and the first price after it, including gaps |
| Ambiguous bar | Target assumed first | Stop assumed first |
| Costs | None | Fees per contract plus slippage |
Why limit fills are the hardest
A historical print at your limit price proves that someone traded there, not that your order would have been reached. Resting orders are filled in queue order at most futures exchanges, and an order placed at the moment of the signal joins the back of the queue. When price only touches a level and turns, the orders at the front were filled and the ones behind were not. A touch-equals-fill rule therefore overstates fills precisely on the trades that turned exactly at the limit, which are often the best ones.
A trade-through rule requires price to trade at least one tick beyond the limit. It understates fills a little and removes the most flattering ones. Book replay with order-by-order data can estimate queue position, but only where such history exists.
In Senzoukria
The automatic backtest takes decisions on closed bars and applies them at the next bar's open. Slippage, set in ticks, always penalizes the entry, and a round-trip fee per contract is deducted from every trade; the defaults are 1 tick and 1.24 dollars. Stops and targets are tested against bar highs and lows and filled at their own price: a target touched by the high of a bar counts as filled, and a bar that opens beyond a stop is still recorded at the stop price, so gaps through a stop are not modeled. When a bar touches both exits, the stop wins.
The simulated account used in Replay fills a limit order when the traded price reaches its trigger, at the trigger price, which its source describes as an idealized fill with no slippage, and the Performance panel notes that no commission is deducted for replay sessions. Replay therefore measures reading and decision making under generous execution; the automatic backtest is the place to test costs.
Common mistakes
- Treating a touched limit as a filled limit in a strategy that fades extremes.
- Assuming stops fill at their price across session breaks and news releases.
- Comparing a replay result without costs with a backtest result that includes them.
- Never rerunning the test with worse assumptions to see where the result changes sign.
Related
In the same section
- Fill-or-kill order
- Feed status
- Final settlement
- Fat tails
- First notice day
- Fair value gap
- FIX protocol
- Fair value
This page in other languages
Frequently asked questions
- Which fill assumption should I use for limit orders?
- For strategies whose limits sit at turning points, require price to trade through the limit by at least one tick, or discount the fill rate explicitly. Compare the result with the touch-fill version: the gap between the two is the part of the edge that depends on queue position.
- Does tick data remove the need for fill assumptions?
- No. Tick data resolves the order of prices inside a bar, but it still records only executed trades. Whether your order would have been filled at a resting price, and how much the market would have moved in response to it, remain assumptions.