TradokiTradoki/blog
Subscribe
← back to indexblog / market structure / limit-order-not-filled-price-touched-queue-position
● Market Structure

Limit Order Not Filled When Price Touched It? Queue Position

Price hit your level and your order sat there. On a FIFO exchange that's the system working as designed. Here's the mechanic, and what it does to backtests.

A
ArthurFounder, Tradoki
publishedOct 03, 2026
read7 min
Limit Order Not Filled When Price Touched It? Queue Position

You had the level marked. Price dropped right onto it, tagged it to the tick, and bounced. Your limit order is still sitting there, unfilled, while the chart shows the exact entry you wanted. That isn't a platform glitch, and it isn't the m

You had the level marked. Price dropped right onto it, tagged it to the tick, and bounced. Your limit order is still sitting there, unfilled, while the chart shows the exact entry you wanted.

That isn't a platform glitch, and it isn't the market picking on you personally. It's queue position, the part of order execution almost nobody explains until they've been burned by it. A touch means someone traded at your price. It doesn't mean you did, and a backtest that assumes otherwise is grading you on fills you never had.

A touch means some orders filled, not yours

A limit order is an order to buy or sell at a specific price: a buy limit can only be executed at your price or lower, a sell limit at your price or higher. Notice what's missing from that definition: any promise that it will execute. It's a ceiling on what you pay, not a guarantee you get in.

When you place a buy limit, it joins the order book (the live list of resting buy and sell orders) at that price, behind whoever got there first. Price only has to trade at that level once to look like a touch on your chart. Whether your order participates depends on how many orders are ahead of you and how much volume actually prints there.

Think of it like a coffee line. The shop selling out of oat milk doesn't mean you got the last carton. It means the people ahead of you did.

On CME's FIFO products, the queue is strictly first in, first out

CME Group's matching engine documentation spells out the FIFO rule: resting orders are matched in timestamp order only. Earliest timestamp first, then the next earliest, and so on. Size doesn't matter. Skill doesn't matter. Arrival time does.

The same page lists what costs you your place in line. Three modifications reset your timestamp: increasing the working quantity of the order, changing the price, and changing the account number. A GTC (good till cancelled) order keeps its timestamp across sessions, as long as you don't touch it in one of those ways.

That makes a casual edit more expensive than it looks. Nudging your limit one tick, or bumping from 2 contracts to 3 because the setup looks cleaner, quietly moves you from the middle of the queue to the back.

3modifications CME lists as forfeiting time priority on FIFO: increasing quantity, changing price, changing account number
1 tickhow far beyond your level price must move for TradingView's optional 'Requested price and 1 tick beyond' limit-fill mode to count the order as filled
Chart datawhat TradingView's broker emulator uses by default to decide fills, with no queue information in it, per the Pine Script docs

Not every contract plays by FIFO

Before you build a whole routine around queue time, know that FIFO is one algorithm among several. CME's own list of supported matching algorithms includes FIFO, FIFO with a lead market maker, pro rata, threshold pro rata, and allocation. Pro rata splits an incoming order across everyone resting at the price in proportion to size, so there size matters a lot and arrival time matters less.

Which products use which is on CME's side of the fence, not mine to guess at, so check the specs for the contract you trade. The principle holds either way: the exchange has a rule for who gets filled when volume is scarce, and that rule is not "whoever's chart showed the touch."

A worked example with made-up numbers

Say you place a buy limit for 1 contract at a level, and 40 contracts are already resting there ahead of you. These numbers are invented to show the mechanic, not measured from any market.

Price trades down to your level, 25 contracts change hands at that price, then buyers step in and price lifts. Your order never got reached. You were 41st in line and only 25 contracts printed. Your chart shows a clean tag of the level. Your account shows nothing.

Now flip it. Price slices straight through your level and keeps going. Everyone resting there gets filled, including you, and you're now long in a market that's still falling. That's the uncomfortable part, and it's reasoning rather than a measured statistic: touch-and-bounce moves tend to fill the front of the queue and leave the back empty-handed, while move-through moves fill everybody. The fills you get skew toward the ones you didn't want.

Backtests count a touch as a fill unless you tell them otherwise

Here's where it bites strategy testers. TradingView's Pine Script docs say the broker emulator considers any price within the bar's range a valid level for filling pending orders, and that it works from chart data by default, inferring intrabar movement from the open, high, low, and close. Nothing in there knows how many orders were ahead of you.

The gap rule works in your favor and against you. If price jumps past your limit between bars, the emulator assumes no intrabar data exists in the gap and fills at the next bar's open, per the same docs. A fill at the next open instead of at your price is the more honest assumption, because price never traded at your level in the gap.

The touch-equals-fill assumption is the optimistic one. It's the same family of problem as the strategy tester's other documented assumptions, and it's baked into any bar-by-bar test, including replaying history bar by bar.

A backtest that fills you on every touch isn't testing your strategy. It's testing a version of you that always gets to the front of the line.

— The Tradoki desk note

Test the conservative fill before you trust the optimistic one

TradingView's broker emulator help page lists two limit-fill modes: "Requested price," where the order fills at your level, and "Requested price and 1 tick beyond," which only fills once price has moved a tick past the level. The page describes the second as a way to assume liquidity is sufficient only when price has clearly passed through, and to reduce overfitting to ideal fill conditions.

A reasonable test routine runs the same strategy under both settings and compares them. If the edge survives needing a tick of trade-through, the entry logic is probably doing real work. If the equity curve falls apart, a meaningful share of the profit was coming from fills at the extreme of a touch-and-bounce, exactly where a real queue is least likely to reach you.

This is also why a sample of trades big enough to mean something isn't enough on its own. A big sample of optimistic fills is still a big sample of optimistic fills.

Demo and paper accounts have the same blind spot

Paper trading is mandatory for beginners, and nothing here changes that. But demo accounts often fill simulated limit orders off the price feed, with no real queue behind them, so check how your platform does it. A fill rate that looks great on demo is a ceiling, not a forecast.

When you move to live, track your own fill rate on resting limit orders as a number in your journal. If a setup works on paper and starves live, queue position is a prime suspect before you start blaming the strategy or your psychology. It's also a cleaner explanation than the story that someone hunted your level on purpose.

● FAQ

Why wasn't my limit order filled when price touched it?
Because a touch only proves that some orders traded at that price, not that yours was one of them. On an exchange using FIFO (first in, first out) matching, orders at the same price fill in the order they arrived, so a limit order near the back of the queue can watch price tick through its level and never get matched.
Does modifying my limit order cost me my place in the queue?
Sometimes. CME documents three changes that forfeit time priority on its FIFO algorithm: increasing the working quantity, changing the price, and changing the account number. Treat any edit to size or price as joining the back of the line.
Do all futures contracts use first-in, first-out matching?
No. CME lists several matching algorithms, including FIFO, FIFO with a lead market maker, pro rata, threshold pro rata, and allocation. Which one applies depends on the product, so check the specifics of the contract you trade before assuming queue time is all that matters.
Does TradingView's strategy tester model queue position?
No. Its broker emulator works from chart data and, per the Pine Script docs, treats any price inside a bar's range as a valid level for filling a pending order. A limit order that was only touched can therefore show as filled in a backtest while the same order in a live queue would not have been.
How can I make a backtest less optimistic about limit fills?
Run the strategy a second time requiring price to trade through your level instead of just touching it. TradingView's emulator offers a 'Requested price and 1 tick beyond' option for exactly this. If the results collapse, the edge was living in fills you probably wouldn't have gotten.
— share
— keep reading

Three more from the log.