Where the data comes from
The live feed is Polymarket's own CLOB matching-engine WebSocket — the same stream that powers the order book. Every executed fill carries its price, size, aggressor side, and transaction hash, and lands in the terminal in roughly one second from execution.
Alongside the live stream, a reconciliation layer continuously sweeps Polymarket's public trade API and merges the results into the archive, deduplicating by transaction hash. If the WebSocket drops — a laptop sleeps, a network blips — the next sweep backfills the gap. The archive currently holds tens of millions of fills across tens of thousands of markets.
Expected latency
Live ticks: about one second from the matching engine to your chart, delivered over a server-sent stream with a polling safety net.
Worth knowing: Polymarket's public REST trade API itself can lag the matching engine by seconds to minutes during busy periods — we've measured multi-minute lag on heavy days. That's why the terminal reads the WebSocket as its primary live source instead of polling REST, and why charts here can show fills before other tools that rely on the REST mirror.
How candles are built
Time candles (1m to 1d) bucket executed trades into fixed UTC-aligned windows: open is the first fill in the bucket, close the last, high/low the extremes, and volume the sum of contracts traded. Tick candles instead close after a fixed number of trades (1 to 100), which keeps bar shape meaningful in bursty event markets where minutes can pass with no trades and then fifty print in two seconds.
For history that predates the trade archive, charts backfill from Polymarket's midpoint price history. Those older bars carry zero volume by design — we'd rather show an honest gap in volume than invent it. Bars inside the archive window are always real-fill OHLC.
How footprint and volume profile are computed
Each fill is tagged by aggressor side — whether the trade lifted the offer (buy) or hit the bid (sell). The footprint groups fills inside each bar by price level and shows buy versus sell volume at every level. The volume profile aggregates the same per-price volume across the visible range, and the point of control marks the price where the most contracts changed hands. Cumulative delta is the running sum of buy minus sell volume.
None of these are estimates or models — they're arithmetic over the executed tape. If the tape has a gap (see below), the affected bars show less volume rather than synthetic volume.
Honest limits
Things this system does not pretend to do:
- Brief WebSocket reconnects can delay ticks for a few seconds; the REST reconciliation backfills them, so candles heal but you might see a fill arrive late
- Tick-level history is retained for a bounded window (weeks, not years) — long-lookback backtests run on the densest data available and minute+ bars beyond it
- Pre-archive history is midpoint-derived with zero volume — clearly distinguishable from real-fill bars
- Polymarket occasionally restates or purges trades around market resolution; reconciliation follows the venue's record
- We chart Polymarket only — no Kalshi or other venues yet
Why your chart may differ from Polymarket's UI
Polymarket's native chart is primarily a probability line derived from price snapshots. TruthTickTerminal's candles are built from executed fills bucketed at UTC boundaries. The two can legitimately differ — a snapshot line smooths through fills, and bucket boundaries shift bar shapes. If your candles look 'off', it's almost always resolution or alignment, not missing data; see the support guide below.
Frequently asked
How accurate is footprint orderflow on Polymarket data?
- Exact to the executed tape: every fill carries price, size, and aggressor side from Polymarket's matching engine, and the footprint is arithmetic over those fills — no estimation. Accuracy limits come only from feed gaps, which the REST reconciliation backfills.
What latency should I expect on live Polymarket charts?
- About one second from execution to chart via the matching-engine WebSocket. Polymarket's public REST API can itself lag minutes behind during bursts, which is why WebSocket-first ingestion matters.
Can candles be missing ticks?
- Briefly, during a WebSocket reconnect — and the reconciliation sweep backfills them from Polymarket's trade API, deduplicated by transaction hash, so the candle corrects itself. Persistent gaps would only occur if both the stream and the REST API lacked the trade.
How is the volume profile calculated?
- Executed volume is aggregated per price level across the visible range, split by buy/sell aggressor. The point of control is the level with the highest traded volume. It is computed from real fills, not modeled.
Why does my candlestick chart look different from Polymarket's own chart?
- Polymarket's UI draws a snapshot-based probability line; TruthTickTerminal draws OHLC candles from executed fills in UTC-aligned buckets. Different construction, both correct. Check the timeframe and tick-vs-time mode first — see our chart-differences guide.
Related
Trade on the tape, not a sketch of it
Real fills, one-second latency, honest gaps. Open a live market and watch the tape build — free, no credit card.