Sim results don't match live because a simulator fills your orders by applying a rule to market data, while the exchange fills them from a queue of real orders, and the two disagree most on limit orders. A simulated fill is software's estimate of whether and where your order would have executed; a live fill happens only when a real counterparty trades with your order, and on FIFO contracts only after every earlier order at your price. In the illustrative example below, changing only the fill rule turns the same five trades from +$100 into -$100.

Key takeaway

A simulator fills your orders with a rule, while the exchange fills them with a queue. On CME's FIFO products a live limit order fills only after every earlier order at its price has filled or cancelled, so a simulator that fills on touch adds exactly the winning trades live accounts tend to miss. Use sim to test mechanics and rules, and judge an edge only with trade-through fills, added slippage and small live size.

How does a simulator decide whether your order fills?

A simulator applies a rule to market data, usually the last traded price and sometimes the bid, ask and volume, instead of matching your order against other traders' orders. Your simulated order never enters the real order book, so no order ahead of it has to trade first and no counterparty has to accept it.

Three limit-order rules recur in simulators and backtesters: fill on touch (filled as soon as any trade prints at your limit price), fill on trade-through (filled only when a trade prints at least one tick beyond your limit) and a queue model (filled once the volume resting ahead of you at your price has traded). NinjaTrader's IsFillLimitOnTouch reference page documents the choice for NinjaScript backtests: "The default behavior of the strategy's fill algorithm is to fill a limit order once price has penetrated the limit price." Setting the property to true selects "a more liberal fill algorithm for back-testing purposes only."

Real-time simulators and prop-firm evaluation engines apply their own rules. Where the documentation does not state them, treat the sim as a black box until you have compared its fills with live ones.

Why didn't my limit order fill when price touched it?

Price can touch a live limit order without filling it because the order waits in a queue behind orders that arrived earlier at the same price. CME Group's documentation of its Globex matching algorithms defines the rule: "FIFO stands for First In, First Out. During FIFO, resting orders are matched in timestamp order only." The same page states: "The trading engine assigns the algorithm applied to the given product." Market-data vendor Databento (2025) lists ES, NQ, ZN, ZF, ZB and CL outrights as FIFO, and SOFR futures (SR3) outrights under an algorithm that allocates first to a top order, then pro rata, then FIFO.

Take an illustrative 1-lot limit buy at 5000.00 with 400 contracts already resting at that price. A trade at 5000.00, a touch, proves only that someone traded there; the first 400 contracts that trade fill the orders ahead of yours. A trade at 4999.75, one tick through, proves the whole 5000.00 level has cleared, because an incoming sell must fill every bid at 5000.00 before trading lower. A touch rule therefore gives the most fills live trading could produce (a ceiling), a trade-through rule the fewest (a floor), and your queue position decides where the real result falls between them. The size shown at your price on the DOM (depth-of-market ladder) when your order joins is the starting estimate of that position.

YOUR ORDER AT THE BACK OF THE QUEUE price level 5000.00, bid side, first in first out400 contracts ahead (earlier timestamps)your1-lot buyincoming sellsthey meet the front firstnext level 4999.75A trade at 5000.00 = touchproves only the front traded: a ceiling on fillsA trade at 4999.75 = trade-throughproves the whole level cleared: a floorCME matches most futures, including E-mini equity index, first in first out. Queue size illustrative.
A print at your price only proves someone at the front of the queue was filled. A print one tick through proves everyone at your price was, which is why touch fills overstate results and trade-through fills understate them.

Touch, trade-through or queue: how much does the fill model change the result?

On the same five price paths, the fill rule alone moves the illustrative result from +$100.00 to -$100.00, a $200.00 swing on five signals ($40.00 per signal). Inputs are illustrative except the tick, the E-mini S&P 500's 0.25 points worth $12.50: one limit buy for 1 contract at 5000.00 with 400 contracts ahead, a profit target at 5002.00 and a stop at 4998.00, gross of commissions.

P&L per filled trade = (exit - entry) / 0.25 × $12.50 × contracts, so the target pays +8 ticks (+$100.00) and the stop costs 8 ticks (-$100.00). The queue model fills once more than 400 contracts have traded at 5000.00, or on any trade-through; it ignores cancellations ahead of you, which also move you forward, so it is slightly conservative.

Path (illustrative)Contracts traded at 5000.00ThenTouchQueue (400 ahead)Trade-through
P1 Kiss and rally150Low 5000.00, rallies to 5002.00+$100.00No fillNo fill
P2 Heavy test and rally650Low 5000.00, rallies to 5002.00+$100.00+$100.00No fill
P3 One-tick wick and rally300Prints 4999.75, rallies to 5002.00+$100.00+$100.00+$100.00
P4 Break down900Falls to 4998.00-$100.00-$100.00-$100.00
P5 Bounce then break80Bounces to 5000.75, falls to 4998.00-$100.00-$100.00-$100.00
Fills (wins / losses)5 (3 / 2)4 (2 / 2)3 (1 / 2)
Win rate60.0%50.0%33.3%
Net P&L+$100.00$0.00-$100.00
Net per fill+$20.00$0.00-$33.33

Every model fills both losers, P4 and P5, because price falling through your bid clears the queue on the way down. The models disagree only about winners: touch fills all three, the queue model two, trade-through one. On path P2 the touch rule fills at the first print at 5000.00, the queue model when the 401st contract trades there, and the trade-through rule never, because 4999.75 never prints.

ONE PATH, THREE FILL RULES 02468104998.005000.005002.00target 5002.00limit 5000.004999.75 never printsstop 4998.00touch fillqueue fill: 401st contractvolume at 5000.00400650Path P2: touch +$100, queue +$100, trade-through no fill (the winner is lost). Illustrative.
On this path price touches the limit and rallies without trading through it. Touch and queue models both book the winner; the strict trade-through model misses it, which is exactly the trade live traders at the back of the queue also miss.

Why are you profitable in sim but not live?

Adverse selection, the tendency of limit orders to fill when the fill is bad news, is the mechanical reason a strategy can profit in sim and lose live: live limit orders fill most reliably when price is about to move through them, while a generous simulator also fills the ones where price only visits and leaves. Handa and Schwartz (1996) named the two risks of limit orders in "Limit Order Trading" in the Journal of Finance: "an adverse information event can trigger an undesirable execution", and "favorable news can result in a desirable execution not being obtained." A touch-fill simulator removes the second risk and keeps the first.

Linnainmaa (2010) showed how far adverse selection distorts measured performance. Using simulations and the trading records of all individual investors in Finland, his Journal of Finance study found that their poor post-trade returns, disposition effect (selling winners sooner than losers) and contrarian trading can be explained in large part by their use of limit orders: "These patterns arise mechanically because limit orders are price-contingent and suffer from adverse selection."

In the illustrative table, losers make up 40% of fills under touch (2 of 5), 50% under the queue model (2 of 4) and 66.7% under trade-through (2 of 3). Fill modelling is not the only sim-to-live gap (size, nerves and reaction time change too), but it is the one you can measure.

EVERY MODEL FILLS THE LOSERS 3 of 32 of 2Touchlosers 40% of fills, win rate 60.0%2 of 32 of 2Queue, 400 aheadlosers 50% of fills, win rate 50.0%1 of 32 of 2Trade-throughlosers 66.7% of fills, win rate 33.3%winners filledlosers filledFive illustrative paths: three winners, two losers. The red bars never change height.
A limit order that is about to lose gets filled by everyone, because price keeps going through it. The fill model only decides how many of the winners you get, which is adverse selection in one chart.

How much does queue position change the result?

Queue position can move a live account across the whole range between the touch and trade-through outcomes. Counting a fill whenever the volume traded at 5000.00 exceeds the contracts ahead of you, or price trades through, the five illustrative paths give three regimes: 0 to 149 contracts ahead, all five fill for +$100.00, identical to touch; 150 to 649 ahead, four fill for $0.00; 650 or more ahead, three fill for -$100.00, identical to trade-through.

NET P&L VS CONTRACTS AHEAD IN THE QUEUE 01504006501000-$100$0+$100like touch: 5 fills, +$1004 fills, $0like trade-through: 3 fills, -$100the example: 400 aheadreverse case at 20 ahead:live +$100 vs strict sim -$100contracts ahead of you at 5000.00
Queue position is the hidden variable. Near the front of the book a live trader beats even a strict simulator; at the back, reality looks like the harshest model, and neither sim setting tells you where you will stand.

Queue position also has a measured value in stock markets. Moallemi and Yuan's (2017) working paper on queue position valuation finds that for some large tick-size stocks (stocks whose spread is usually a single tick), queue value, the worth of a place near the front, can be of the same order of magnitude as the bid-ask spread. ES usually trades one tick wide too, but the paper's data are stocks, not futures.

Sim can also be too harsh. An illustrative trader genuinely 20 contracts from the front fills all five paths live for +$100.00, while a trade-through simulator reports -$100.00, understating live results by $200.00.

Do market and stop orders fill differently in sim?

Yes: for market and stop orders the sim gap is the fill price, not whether the order fills. A live market order takes the resting size at the best price, then the next prices if that runs out, while a simulator may fill the whole order at the displayed price. The difference between expected and actual price is slippage, and stops feel it most because a triggered stop-market order must take whatever prices are available, often in a fast move (see how stop, limit and bracket orders behave).

Charging an illustrative one tick ($12.50) of slippage on each stop exit turns every illustrative loser into -9 ticks, or -$112.50. Per five signals, touch then nets +$75.00, the queue model -$25.00 and trade-through -$125.00. Over 100 signals (the five-path mix repeated 20 times), that is +$1,500, -$500 and -$2,500.

SAME STRATEGY, THREE FILL RULES, 100 SIGNALS 020406080100-$2,000-$1,000$0+$1,000+$2,000touch +$1,500queue -$500trade-through -$2,500signalsFive-path mix repeated 20 times, one tick ($12.50) of slippage on every stop exit. Illustrative.
One strategy, three verdicts. A trader who tunes on touch fills will ship the top line and trade something closer to the bottom one, which is why sim is for mechanics and rules, not for proving an edge.

Partial fills cut both ways: a live 10-lot limit order can fill 4 contracts and miss the rest, while an all-or-nothing simulator reports the full winner or no trade (see partial fills and order routing).

How do you make sim fills more realistic?

Choose the strictest fill rule your tools allow, then check it against live fills at minimum size.

  1. Fill limits on trade-through. In NinjaScript backtests, leave IsFillLimitOnTouch at its default of false.
  2. Charge slippage on every stop and market fill. NinjaTrader's backtest Slippage setting defaults to 0 ticks, which assumes no slippage at all; start with at least one tick.
  3. Count the queue. Record the size at your price when your order joins and count a fill only after that much volume has traded there.
  4. Use finer data. Bar-based fills cannot know the order of prices inside a bar; NinjaTrader's High order fill resolution fills backtest orders from a finer secondary series. Check that your slippage setting still takes effect in that mode.
  5. Test live at minimum size. Run the strategy live at the smallest size alongside sim and log, for every signal, whether each filled and at what price. Winners the sim filled and live missed measure your simulator's bias.

Honest fills remove one bias; tuning a strategy to past data adds another (see backtesting and overfitting).

What is sim trading actually good for?

Sim is good for mechanics and rules: learning a platform, rehearsing order entry, checking brackets and automation, and testing risk limits. Sim is weak evidence of an edge. The CFTC rule on advertising by commodity pool operators and trading advisors (17 CFR 4.41) bars them from presenting simulated or hypothetical performance without a prescribed disclaimer, and the rule's own version states: "Unlike the results shown in an actual performance record, these results do not represent actual trading." The same text warns that such results "may have under-or over-compensated for the impact, if any, of certain market factors, such as lack of liquidity." The rule covers those firms, not sim platforms, but the wording fits any simulated equity curve, including the backtests behind AI trading bots.

Prop-firm evaluations typically run on simulated accounts, so the firm's fill model, not the exchange queue, decides those fills (see whether a funded account is real money or simulated).

A trade copier does not close the gap either. Thor, this blog's own product, copies one account's orders to others, so copying a strategy whose edge exists only under touch fills multiplies the same loss across accounts. Live copies also meet the queue: a mirrored resting limit order reaches each follower account after the master's, so on a FIFO contract the followers stand behind it at the same price and can miss fills the master gets, as on paths like P1 and P2. Test copied fills at minimum size before scaling.

Go deeper

Frequently asked questions

What percentage of traders who are profitable in sim lose money live?

No traceable study supports a specific percentage, and the figures repeated online name no dataset. A credible number would need matched sim and live records for the same traders and strategies, so treat any quoted percentage without a named source as folklore.

Is market replay more realistic than real-time sim?

Not for fills: in both, a model matches your order against market data, never against other traders' orders. Replay lets you rehearse the same session repeatedly, but your order cannot change what traded or take anyone's place in the historical queue.

How can I check whether my prop firm's sim fills are realistic?

Compare each limit fill with the time and sales record (the tape of every trade): did price trade through your level or only touch it, and how much volume traded there first? Repeated fills on single touches with little volume mean the engine fills more generously than a FIFO queue would.

Does cancelling and re-entering a limit order cost me queue position?

Yes on FIFO products: a new order gets a new timestamp and joins the back of the queue at its price. CME's order functionality documentation also lists changing an order's price or increasing its quantity among the modifications that change its priority in the book.

What does pro-rata matching mean for a limit order?

Under pro-rata matching, an incoming order is shared among the resting orders at a price roughly in proportion to their size, so arrival time matters less and larger orders receive more. Queue-position reasoning built for FIFO contracts does not carry over to pro-rata products.

Does adding slippage to a backtest fix limit-order fills?

No. Slippage changes the price of fills that happen, while the limit-order problem is fills that would not have happened at all.

Should I test on micro contracts live instead of sim?

Yes, if the goal is realistic fills: a live micro order joins a real queue and meets real counterparties. The micro book has its own depth, so treat the results as evidence about micro fills rather than about the full-size contract.

How many signals do I need to compare sim and live fills?

Enough signals where price touched your limit without trading through, because only those separate the fill models. Paths that trade through fill under every rule and reveal nothing about bias, so a few dozen touch-only signals give a first read, not a precise estimate.

Is a broker demo account the same as a simulator?

Yes: a demo or paper account shows market prices, but its fills come from the platform's model, not from the exchange. Fill rules can differ between one broker's demo and another platform's sim, so compare before trusting either.

Sources

  1. CME Group (n.d.), CME Globex Matching Algorithm Steps, CME Group Client Systems Wiki
  2. NinjaTrader (n.d.), IsFillLimitOnTouch, NinjaScript Language Reference
  3. Handa, P. and Schwartz, R. A. (1996), Limit Order Trading, The Journal of Finance 51(5), 1835-1861
  4. Linnainmaa, J. T. (2010), Do Limit Orders Alter Inferences about Investor Performance and Behavior?, The Journal of Finance 65(4), 1473-1506
  5. Moallemi, C. C. and Yuan, K. (2017), A Model for Queue Position Valuation in a Limit Order Book, working paper, Columbia Business School (revised June 2017)
  6. Cornell Law School LII (n.d.), 17 CFR 4.41, Advertising by commodity pool operators, commodity trading advisors, and the principals thereof