PaperGhost
SATSlegalEchoStar unit Hughes Satellite Systems files for Chapter 11 bankruptcy|BMYm&aAstraZeneca shares drop 7% after report on $400 billion merger talks with Bristol Myers Squibb|XLEother'Winter is coming': Ukraine fears its toughest test since Russia's full-scale invasion|BTCotherBitcoin slips under $63,000 despite Iran deal hopes as Coldcard losses rattle market|KOSearningsKosmos Energy Non-GAAP EPS of $0.11 beats by $0.02, revenue of $617.04M beats by $143.66M|BABAproductAlibaba jumps 7% after introducing Qwen3.8-Max in China's intensifying AI race|XLIm&aPrysmian expands North American footprint with $3.8B Atkore acquisition|GBTCearningsU.S. Jobs, Circle, Galaxy, American Bitcoin earnings: Crypto Week Ahead|PBLearningsAtkore reports Q3 top- and bottom-line beat, withholds guidance amid pending Prysmian deal|PBFBlegalPlanet Based Foods Global announces CFO resignation and board departure; CEO named interim CFO|WERIDEproductWeRide enters Nordic market with Denmark autonomous mobility partnership|BUDotherAB InBev investor E.P.S. seeks to sell 10M shares - report|SPYmacroAsian markets mixed as tech sell-off offsets Wall Street gains; U.S. futures rise ahead of earnings wave|XLEm&aTotalEnergies to divest 50% of 1.2 GW Europe solar, wind portfolio to KKR|SATSlegalEchoStar unit Hughes Satellite Systems files for Chapter 11 bankruptcy|BMYm&aAstraZeneca shares drop 7% after report on $400 billion merger talks with Bristol Myers Squibb|XLEother'Winter is coming': Ukraine fears its toughest test since Russia's full-scale invasion|BTCotherBitcoin slips under $63,000 despite Iran deal hopes as Coldcard losses rattle market|KOSearningsKosmos Energy Non-GAAP EPS of $0.11 beats by $0.02, revenue of $617.04M beats by $143.66M|BABAproductAlibaba jumps 7% after introducing Qwen3.8-Max in China's intensifying AI race|XLIm&aPrysmian expands North American footprint with $3.8B Atkore acquisition|GBTCearningsU.S. Jobs, Circle, Galaxy, American Bitcoin earnings: Crypto Week Ahead|PBLearningsAtkore reports Q3 top- and bottom-line beat, withholds guidance amid pending Prysmian deal|PBFBlegalPlanet Based Foods Global announces CFO resignation and board departure; CEO named interim CFO|WERIDEproductWeRide enters Nordic market with Denmark autonomous mobility partnership|BUDotherAB InBev investor E.P.S. seeks to sell 10M shares - report|SPYmacroAsian markets mixed as tech sell-off offsets Wall Street gains; U.S. futures rise ahead of earnings wave|XLEm&aTotalEnergies to divest 50% of 1.2 GW Europe solar, wind portfolio to KKR|

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 →