RESEARCH

Why Kraken ticker prices can appear stale on quiet markets

Study details

Measured
2026-08-09, single live session
Instruments
Kraken spot and futures, PAXG-USD, PF_BCHUSD
Method
our stall monitor flags a symbol when the ticker price and both sides of the quote we hold stop changing while it is in the active universe
Result
with the default ticker subscription we observed 136s and 436s without a ticker update on PAXG-USD and 147s on PF_BCHUSD. After subscribing with event_trigger set to bbo, those warnings stopped for those symbols
Contents
If you subscribe to Kraken's WebSocket v2 ticker channel and leave the options at their defaults, the price you hold for a quiet pair can stay unchanged for minutes. To be precise about what this is and is not: the connection is fine, other symbols keep updating, and the order book channel keeps delivering. What stops arriving is the ticker update for that symbol. This is a property of what triggers a ticker message, not evidence that the market data itself stopped. We are describing what we observed in our own implementation with the default subscription, not asserting a fault on the venue's side.

1. What we saw

Our stall monitor watches every symbol in the active universe and raises a warning when the price and both sides of the quote we are holding stay identical for an extended period. On 2026-08-09 it produced these:
Time (UTC)VenueSymbolNo update for
17:20:20Kraken spotPAXG-USD136s
17:25:20Kraken spotPAXG-USD436s
19:19:36Kraken futuresPF_BCHUSD147s
In each case the values we held were intact and plausible — PAXG-USD sat at 4352.16 with a bid of 4352.15 and an ask of 4352.16. They simply did not change. Both symbols were in the active universe at the time, so a strategy could have been making decisions on a level-1 price that had not been refreshed for minutes.

2. What appears to explain it

The ticker channel accepts an event_trigger option. Under the default, a ticker message is emitted when a trade prints. On a liquid pair that is effectively continuous. On a quiet pair, trades can be minutes apart, and so the ticker is minutes apart — while the book itself may still be moving. That is a reasonable design: a trade-triggered ticker is exactly what you want if you are tracking last-traded price. It is not what most people assume when they read the field as "the current quote".

3. What we changed

We now subscribe the ticker channel with event_trigger set to bbo, which emits when the best bid or offer changes. After that change, our level-1 freshness tracked the book channel, and the stall warnings stopped appearing for those symbols. Two related habits we would suggest regardless of venue: - Subscribe trades without the initial snapshot if you compute per-interval volume. A snapshot of historical trades arriving at subscription time will otherwise be counted into the current interval. - Keep a freshness monitor independent of the feed. Ours only surfaced this because it compares wall-clock time against last-change time per symbol, rather than trusting that data is arriving.

4. Why this matters more than it looks

A stale value does not raise an error. It produces a number, and the number is wrong in a specific way: it is the last price at which somebody traded, which is exactly the number a naive strategy trusts most. Position sizing, spread filters and stop placement all read it. For a 436-second gap on a symbol in the active universe, that is seven minutes of decisions made on a price that may no longer be available. Conclusion Before you trust a level-1 price, find out what makes it update. On the ticker channel we were using, the default trigger is a trade rather than a quote change, and on quiet markets that is the difference between a current price and one that is several minutes old.

Limitations

  • Three observations from a single live session on 2026-08-09, on two symbols. This is not a measurement of how often it occurs, and not a claim about typical behaviour.
  • We did not run a controlled A/B. We changed the subscription and the warnings stopped for those symbols; that is consistent with the explanation above but does not prove it.
  • The behaviour follows from a subscription option the API exposes. We describe what the default produced in our implementation; we are not characterising it as a bug or a defect on the venue's part, and we have not confirmed the intended semantics against the venue's own documentation.
  • Kraken only, and only the ticker channel. Other venues — and other channels on the same venue. Have their own update semantics, which should be checked rather than assumed.
  • The stall thresholds are our monitor's, chosen for our universe. Different thresholds produce different counts.

Related reading

← All research

Originally published by TraderWe on August 11, 2026. You may quote and link to this page. Republishing the full text without a link back to the original is not permitted.

5 replies

M
MomoQueen· Aug 2026 ago
Wait so the ticker just goes quiet on the sleepy pairs and everything else keeps humming?! Good to know before I panic about a dead feed again, switching my subscription option and moving on!
G
GapHunterMike· Aug 2026 ago
Wait, so the feed is fine and it's just the ticker not firing on sleepy pairs?! Good to know before I panic-restart a connection again!
S
SpreadWatcher· Aug 2026 ago
so the fix is just changing the trigger setting. fine. but did anything else change when you did that. more messages, heavier load, anything.
L
LurkerLee· Aug 2026 ago
The part I'd want spelled out is whether the bbo trigger changes what you're actually holding as a quote versus the default behaviour, because if my stale-price check and my spread check disagree I'd rather know which one is lying. Also curious how you treat a symbol that's flagged stalled - do you skip it entirely for entries, or just widen your assumptions on it? A quiet pair with an old quote is exactly where I'd expect the real spread to be worse than what I think I'm seeing.
GrandpaGrizzly· Aug 2026 ago
Back in the day we called that a "dead tape" — quote board frozen, everybody trading off a number that stopped meaning anything ten minutes ago. Nice to see the machines found a new way to do the same old trick. Your monitor flagging identical bid/ask for minutes is the right instinct, but I'd add a staleness age to the price itself so nothing downstream can act on a quote older than some cutoff, no matter what channel fed it. A plausible number is far more dangerous than a missing one. Stay humble.
Sign in to reply →