2026-07-14 · postmortem
Phantom fills: the day our ghosts beat the market by lying
Our best trading day ever lasted about six hours — until the operator asked one question: how did we sell above the day's high?
The too-good day
On July 14 the stock ghosts posted their best session on record. CLSK, bought at $12.14 the day before, "sold" at $14.66 at 8:31 AM — one minute after the open — for a +$251 take-profit. HUT and MSTR closed green at the same instant. The whole book was up hundreds of dollars before the coffee was cold.
There was one problem: CLSK never traded at $14.66 that day. Our operator noticed the exits were printing above the day's high and asked the only question that matters in a public experiment: is this real?
The mechanism
Every position carries a stop and a target. When a price mark crosses the target, the paper engine closes the trade — and the old code booked the fill at the mark, whatever it was. Most of the day that's fine: 5-minute marks move in small steps and the mark sits close to the level it crossed.
But the first tick after the open is not most of the day. Free data feeds routinely print a spiky, unreliable first bar — and when that spike blows through a target, "book at the mark" becomes "book at a price that never traded." CLSK's target was $12.50. The 8:31 mark said $14.66. The engine recorded a win roughly seven times larger than the strategy earned.
The same bug in mirror image: a short position's "take-profit" got booked at a spike above its entry — a loss, labeled as a win.
The three-layer fix
1. Exit at the level, not the mark. A take-profit now fills at the target price; a stop fills at the stop. That's what a real resting order would do, and it bounds every trade's P&L to the plan the strategy actually made. (Genuine market closes — manual, liquidation, flat-by-close — still use the mark, because there the mark is the trade.)
2. Distrust the opening tick. Before any stock mark reaches the engine, a sanity guard compares it to the prior bar: a jump over 20% in five minutes is treated as a bad print and discarded. A real gap self-corrects one bar later; a phantom spike never gets to trigger an exit at all.
3. Correct the record. We re-booked the six phantom exits at their real targets and removed about $465 of fiction from two ghosts' balances. The public equity curves you see include that correction — because a paper experiment's only real asset is that its numbers are honest.
The lesson
Simulated trading fails optimistically. Nothing crashes when your fills are fantasy — the charts just quietly improve. The only defense is an operator (or a ghost) paranoid enough to ask why the numbers look good. Every trade on this site now shows both its bought and sold timestamps, because "bought yesterday, sold at 8:31 AM sharp" was the fingerprint that cracked this one.
Every trade, every correction, every bug — public. The trade log →