Why Paper-Trading Fills Lie
Paper trading fills you at the price you asked for. Real markets don't. Here's the specific machinery a paper account skips, and what it does to your read of your own edge.
- execution
- paper-trading
- fills
Your paper account has never told you no.
Think about that. However many hundred simulated trades you’ve placed, every single one filled. At your price, instantly, for your full size. No partial. No slip. No “the offer was gone by the time your order arrived.”
That is not a small simplification. It’s the difference between practicing trading and practicing clicking.
What a paper fill actually does
Most broker paper accounts do one thing when you submit a market order: read the current quote, stamp your order at that price, mark it filled. Some add a fixed penalty, a penny, maybe the full spread. That’s the whole model.
Notice what’s absent. There’s no clock. Your order doesn’t travel anywhere, doesn’t wait behind anyone, doesn’t discover that the 400 shares displayed at the ask were 400 shares displayed at the ask two hundred milliseconds ago.
The quote isn’t a promise. It’s a photograph of something that already moved.
Four things the model skips
Latency. Between your keypress and the moment an exchange can act on your order, time passes. On a consumer brokerage round-trip it’s roughly 180 milliseconds. A direct-access desk runs closer to 120. Colocated professional infrastructure gets down near 30. Those aren’t exotic numbers, they’re the ordinary cost of being physically distant from a matching engine, and on a small-cap that’s printing forty times a second, 180 milliseconds is a different price.
Queue position. Send a limit order that isn’t marketable and you don’t get “the bid.” You get a spot in line behind everyone already resting there. Whether you fill depends on how much size sits ahead of you and whether the market trades through your level at all. A paper account that fills your resting limit the instant the price touches it has quietly assumed you were first in line. You weren’t.
Size against displayed liquidity. You want 2,000 shares. The inside offer shows 400. In a paper account you get 2,000 at the inside. In reality your order eats those 400, then reaches for the next level, then the one after. Your average price is worse than the number you clicked, and how much worse depends on how thin the book was at that second.
Quote quality. Not every quote that crosses the tape is a quote you could have traded against. Some are manual, some stale, some crossed, some carry condition codes that mark them as non-firm. A fill engine that evaluates against raw NBBO without filtering those will hand you fills against prices no one would have honored.
The compounding problem
Here’s why this matters more than it looks.
Each of those four is small. A few cents here, a partial there. But you’re not evaluating a trade, you’re evaluating a strategy, and a strategy is a few hundred trades stacked end to end.
Run a setup that wins 55% of the time with a 1.4 reward-to-risk ratio and you have a business. Shave eight cents off every entry and add a partial fill on a third of your exits, and that same setup can cross into negative expectancy without a single thing changing about your read of the chart. The pattern recognition you spent months building is still correct. The strategy just doesn’t survive contact with an order book.
Which produces the worst possible outcome: you go live with real money, lose, and conclude you got psychologically rattled. Sometimes that’s true. Sometimes the setup was never profitable at achievable prices and your practice environment hid it from you for six months.
What honest simulation costs
The fix isn’t a bigger slippage penalty. A flat two cents is just a different wrong number, wrong in a new direction, and it teaches you nothing about when execution hurts.
What you actually need is for the simulator to run the same decision the market runs.
That means the tape is real tick data, with the NBBO and its sizes and the trade prints with their condition codes, not candles with a random walk between them. It means your order draws a latency from a distribution before anything happens to it, and the market keeps moving during that draw. It means marketable orders walk the book when they exceed the inside size, and resting orders take a queue position and can sit there unfilled while the price moves away.
And it means the engine tells you afterward which of those cost you money. On our desk, every fill carries the NBBO at three separate moments: when you submitted, when the engine evaluated it after latency, and when it filled. The gap between the first two is the price of your distance from the exchange. Between the second and third is the price of your size.
That’s readable. “I lost 11 cents” isn’t a lesson. “I lost 7 cents to latency because I chased a move that was already 20 basis points extended, and 4 more walking the book because I sized past the inside” is a lesson you can act on tomorrow.
Your journal inherits the lie
This is the second-order damage, and it’s worse than the fills themselves.
Every statistic you keep is computed from fill prices. Win rate, average win, average loss, expectancy, the ratio you use to decide whether to size up. All of it is arithmetic performed on the numbers your platform recorded when you traded.
Feed that arithmetic ideal fills and you don’t get a slightly optimistic journal. You get a journal describing a trader who doesn’t exist. Your average win is inflated by the entries you’d have gotten worse. Your average loss is understated, because the stop you’d have slipped through filled exactly at your number. Trades that were marginally positive at ideal prices and marginally negative at real ones flip category entirely, which moves your win rate in the direction that makes you brave.
Then you review the month, conclude the edge is solid, and increase size. The review was rigorous. The inputs were fiction.
What paper trading is still good for
I don’t want to oversell this. Paper accounts do a real job.
If you’ve never used a platform before, a paper account is where you learn where the buttons are without paying tuition for it. Learning that your hotkey for “sell half” is actually mapped to “sell all” is a lesson worth having on fake money. Same for learning the order-ticket fields, the montage layout, the difference between your stop types.
Mechanics practice is legitimate practice. Just don’t confuse it with evidence.
The moment you start drawing conclusions about whether a strategy works, the fill model becomes the entire experiment. And a fill model that never says no isn’t running the experiment you think it’s running.
The test
Here’s a quick one you can run on whatever you’re using now.
Submit a resting limit order at the bid on a fast-moving small cap. Watch the price touch your level and pull away without trading much size there.
If you filled, your simulator isn’t modeling a queue. It put you at the front of a line you never joined. Everything it has ever told you about your limit-order strategy is a story about a market that doesn’t exist.
If you’d rather practice against something that says no
We built one that does. Real tick tape from a real day, quotes filtered for eligibility before anything trades against them, a latency draw on every order, and resting limits that take a queue position and can sit there unfilled while price walks away.
It’s a free beta. Pick a day, trade it, then read the fill log afterward. If our fills look generous, run the same session and beat them.
Related reading: slippage has three sources, and they’re separable breaks down the diagnostic side of this, and TradingView bar replay vs. a real replay desk covers the tools that replay the chart but never model the fill.