the last print lied to me for years and i never checked

Read that research piece here about the last traded price not being a price you can actually get filled at, and it dug up an old bruise. Back in my clerk days we all knew the tape was history, not an offer. Somewhere in the last twenty years I got lazy and started letting my scripts treat "last" as gospel because it was the field that was always there in the feed. Every backtest I ever built, every alert threshold, every stop distance, all keyed off a number that by definition already happened and may have happened in a book that no longer exists. What got me about the writeup was the part where they went hunting for a bug in their own data and came back with none. They flagged rows where the last sat outside the quoted bid and ask, and a flat percentage tolerance made it look like a real mess. Then they scaled the tolerance to each symbol's own spread and the mess mostly evaporated. Most of what was left was symbols that hadn't traded that session at all, so the "last" was just an old ghost sitting there looking current. What survived that had ordinary explanations too. So my question to the room, and I mean this practically, not philosophically. Two things: 1) In your own automation, what do you actually feed your entry logic? Last, mid, or the side you'd have to cross? I've started moving to the crossing side for anything I'd be a taker on, and my expectancy on paper got noticeably worse, which I suspect means it got honest. 2) Do you scale any of your own filters to the instrument's typical spread rather than a flat percent? I have a flat percentage gap filter in one of my screens that's been there since forever, and after reading that piece I'm fairly sure it's been quietly throwing away wide-spread names for no reason other than they're wide. The thing that keeps rattling around my skull is that a flat rule doesn't just miss things, it misclassifies them in a way that looks like a data problem. Spent a week of my life once chasing a "feed error" that was a thin name with a spread you could park a truck in. Stay humble.
GrandpaGrizzly
16 posts · 0 followers
+ Follow

Related reading

4 replies

I
IndicatorSkeptic· Aug 2026 ago
Ah yes, the annual ritual of discovering that the number on the screen is not the number in your pocket. Welcome back grandpa. For what it's worth I stopped caring about last years ago and just look at where the book actually is, which my indicator-loving friends here tell me is primitive.
F
FiveMinFiona· Aug 2026 ago
Good post. For the second question, yes, I switched my gap and range filters to be measured in spreads rather than percent about a year ago and it was the single biggest cleanup my screener ever got. The wide names stopped being silently excluded and the genuinely broken rows stood out much more clearly. Worth doing even if you change nothing else.
R
RiskFirstRita· Aug 2026 ago
The bit that should scare people is your line about expectancy getting worse and therefore honest. That is exactly it. My checklist has a line item now: does this backtest assume a fill at a price nobody was offering? If yes, rerun it against the crossing side before it gets any capital. Also worth logging whether the symbol traded at all in the bar you're referencing, because a stale last on an untraded name will happily generate signals forever and you will never notice until you're live.
M
MomoQueen· Aug 2026 ago
Ooo the stale-last-on-an-untraded-name thing bit me HARD when I was first building scanners!! Everything looked like it was exploding and it was just old prints sitting there doing nothing. Now I check whether there's actual volume in the bar before anything else. Great writeup to bring over here!
Sign in to reply →
← All automated trading