One of my stops filled 1.4% below its trigger price. Sunday, a little after 3am. The chart showed a single ugly candle and then nothing, as if the market had cleared its throat and gone back to sleep.

I'd sized that position for a normal slip of maybe 0.1%. This was fourteen times that. Nothing was wrong with the bot. The order book was just thin.

Crypto never closes, but liquidity does

Everyone repeats that crypto trades 24/7. True. What gets lost is that volume and depth don't stay flat across those hours. They follow the humans, and the humans sleep.

Weekday afternoons in New York and London, the book is deep. Market makers are quoting size, institutions are active, and a decent-sized order barely moves price. Sunday at 3am UTC, a lot of that quoting size is gone or pulled back.

Kaiko data reported by CoinDesk in June 2023 showed a measure of combined bid and ask depth dropping about 20% over a single weekend. I'm quoting that from memory of the report, so check the exact figure. The direction is what I've seen in my own fills, and it matches.

What a stop actually is

A stop-loss isn't a price guarantee. It's an instruction to sell at market once price touches a level. At market means whatever the book will give you.

In a deep book, that's close to your trigger. In a thin one, your sell order walks down the ladder, eating one level after another. Each level is a worse price. Your 2% stop becomes a 3.4% loss, and the loss is baked in before you've even seen the alert.

Here's the part people skip. Thin books also move on smaller orders from other people. A modest forced sale triggers a wick, the wick trips stops, those stops add more selling. It feeds itself, and it happens fastest exactly when nobody's around to absorb it.

Why most traders never see it

The problem isn't that traders ignore slippage. It's that they measure it as one average number. 'My slippage is about 0.15%.' Fine. But that average hides a distribution. Most fills are great, a few are awful, and the awful ones cluster in the same hours.

I only noticed because I tagged fills by hour. Pulling six months of exits, the worst 5% of slippage events were almost all between Saturday night and early Monday. Small sample, so don't treat it as law. Still, once you see it in your own data it's hard to unsee.

Backtests make this worse. A backtest fills you at the bar's price, same at 3am Sunday as at 3pm Tuesday. It has no concept of a sleeping order book.

What I changed

Three small things. First, I pull my own fills, group them by hour of week, and look at the worst decile instead of the mean. Ten minutes in a spreadsheet.

Second, I size weekend positions assuming the bad slip, not the average one. If a stop would normally cost 2%, I budget 3% in the quiet hours and cut size to match. You can't dodge the thin book, but you can stop being surprised by it.

Third, I widen the cost assumption in any test I run. If a strategy only works when every exit fills at the trigger, it doesn't work.

None of this makes stops bad. A stop that fills 1.4% late still beats no stop at all. It just means the real risk on a position isn't the distance to the stop, it's the distance plus the hour you happen to get stopped in.

If you'd like to see how we handle sizing and costs in the bots, the backtest data and methodology are at v33systematic.com.