The two prices
A chart draws a single line, but the market never has just one price. It has two at every instant:
- The bid — the highest price a buyer is currently willing to pay.
- The ask — the lowest price a seller is currently willing to accept.
The spread is the gap between them. The mid is their average — a convenient number no one actually trades at. The last price is simply the most recent trade to print, already history the moment you read it.
To buy right now you cross the spread and pay the ask; to sell right now you hit the bid. Crossing costs you the width of the spread — paid on the way in and again on the way out. That is why a fill is not the chart's line: the chart usually plots the last or the mid, and you transact at the edge.
A worked example
Take a generic broad-ETF session — call the instrument GENCO. The chart shows a tidy line at, say, the mid. But underneath, the book quotes a bid a hair below it and an ask a hair above, and you have two ways to trade against it:
- Cross the spread (a marketable order). Buy now and you lift the ask — the higher of the two prices. You pay the spread: you got in immediately, and the width between the ask and the mid is the toll for that immediacy. Sell now and you hit the bid, paying it again on the way out.
- Rest at your price (a passive limit order). Post a buy at the bid and wait. You do not cross anything; a seller has to come down to you. If one does, you earn the spread rather than pay it — but the catch is real: you only fill if price comes to your level, and you may not fill at all.
Either way, one thing holds: the fill is not the chart's line. The chart plots the mid or the last; your order executes at the bid or the ask, at whatever level actually traded. When the book thins out and the spread widens, crossing costs more and a resting order sits further from the action — for no reason other than the two prices drifting apart.
See it in kestrel
The gap between the chart's line and a real fill is not a story — it is a receipt you can pull. Run a session that actually fills a resting limit order:
npx kestrel.markets sim mean-reversion-range-fadeThat runs a deterministic simulation over a generic range-fading session — managed licensed data, no wall time, no signup, no card — where a resting limit buy fills only when price fades back down to it, and prints a certified proof URL. The fill lands at the order's own limit level, not the chart's mid line; the small result on that proof is the trade's directional give-back, not a spread cost. Point the CLI back at the proof and it recomputes the whole record — the fill price and where it sits against the tape — on your own machine, byte for byte:
npx kestrel.markets certify https://kestrel.markets/proof/art_f576347572a410a52647cf90Keep it one command away: drop the kestrel.markets MCP server into your client and the next fill is one call away — no account in between.