Whether a resting order fills depends on where it sits in the queue — and a simulator cannot know that. So the question is not "how do I model the queue accurately" but "which way should I be wrong". The answer is always the same: against yourself, because the two errors have wildly asymmetric costs.
| What you would need | Reality |
|---|---|
| How much size sat ahead when you posted | visible — but not who cancels |
| Which of those ahead cancel before the sweep | unknowable |
| Whether the sweep clears your level entirely | sometimes; sometimes it stops short |
| Whether faster participants jumped ahead | unknowable |
Two unknowables, and both push the same way: the optimistic assumption is much easier to make. "They cancelled and I moved up" is a comfortable thing to believe, and there is no data contradicting it.
| Rule | Real-world equivalent |
|---|---|
| All displayed size ranks ahead | you are the last to arrive at that price |
| Cancellations do not promote you | the queue never shortens in your favour |
| A partial sweep reaches you last | you fill only if the level is fully cleared |
This is more pessimistic than reality. That is the point — the resulting number is a lower bound, and a lower bound is something you can make a decision with.
They change which fills you get. In a simulation that lets you fill easily, you collect benign flow — the fills a real queue would have given to someone faster.
Real queues do the opposite: you miss the good fills and receive the toxic ones, because informed traders sweep through everything while uninformed traders take the top of the book.
So an optimistic queue model is not "the same result, a bit too high". It is a different and better distribution of fills than you will ever receive. That is why market-making backtests fail live far more dramatically than taker backtests do.
| Assume | If wrong | Cost |
|---|---|---|
| Optimistic | backtest positive, live negative | discovered with real money; unbounded |
| Conservative | backtest negative, live might work | a missed opportunity; bounded |
Running a full replay of recorded books and complete tape under those rules — naive static laddering across the board:
| Tenor | Boards | Pair rate | Net ¢/share |
|---|---|---|---|
| 5 minutes | 60 | 36.3% | −3.12 |
| 15 minutes | 24 | 33.6% | −9.79 |
| 1 hour | 6 | 54.9% | +4.58 * |
* and that positive figure is a lottery: one board out of six contributed +$667 while the other five had a median of −$19. Static laddering lost money on the typical board at every tenor tested.
Knowing the direction of your bias unlocks something useful: quote both bounds.
| Source | Result | Direction |
|---|---|---|
| Full simulation, conservative queue | −3¢/share | pessimistic lower bound |
| Measured performance of a skilled operator | +0.1¢/share | optimistic upper bound |
Namely: is there any evidence I would land at the good end? There was not, so the line was never started. With a single mid-point number that question cannot even be asked — you would believe you had an answer when all you had was an unattributed point estimate.
| Ask | Failing answer |
|---|---|
| How does a resting order get filled in this model? | "whatever the framework does by default" |
| Do cancellations ahead promote me? | "I think so" |
| Where do unfilled orders go? | "filtered out" — the sample is now contaminated |
| Is this an upper or a lower bound? | cannot say → unusable for a decision |
The third row is worth stressing: dropping unfilled orders is selection on the outcome. No-fills must be reported as a rate, never silently removed.
You cannot model the queue accurately, so do not try — decide which way to be wrong. Optimism does not merely inflate the number; it hands you a better class of fill than the market will ever give you. Assume against yourself, then ask whether there is evidence you deserve better.