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.

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.
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.
— The Tradoki desk noteA 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.
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.
Three more from the log.

Commitment of Traders Report: Why It's Already Too Late
The COT report shows Tuesday's positioning every Friday. A peer-reviewed backtest found the edge mostly disappears once you try to trade it.
Sep 30, 2026 · 7 min
Options Expiration Pinning: Why Stocks Land on a Strike
A stock closing dead-on a strike price at expiration isn't luck. Dealer hedging pins it there, and it can leave you holding shares you never planned to own.
Sep 23, 2026 · 7 min
Trading Halts: What Actually Sets the Reopening Price
A halted stock doesn't reopen where it paused, or at a random price. Nasdaq's July 2025 rule finally capped how far that first print can move.
Sep 22, 2026 · 7 min