Live Means Closed
Polling for finished candles, not chasing ticks
30s poll cap · incremental OHLCV · event log
July 7, 2026 · 7 min read
Live is not a websocket tick strategy. It's a cron job with standards: wait for the candle to finish, then decide.
The loop
- Background thread polls each configured timeframe (15m + 4h typical).
- Fetch latest history with incremental refresh — not stale parquet tail.
- Drop the forming bar; signals run on closed bars only.
- Dedup per timeframe — never process the same bar timestamp twice.
- Broker handles brackets; event log records entries and exits.
Poll cadence
Sleep until bar close plus a few seconds, but cap wakeups at ~30 seconds. You won't catch every millisecond — you will catch every closed bar without hammering the API or corrupting cache files (we learned that the hard way).
Chart vs runner
The chart websocket streams fresh tail candles for price display. The runner does not trade on websocket ticks. Markers on the chart come from backtests; live entries show in the Deploy event panel. Different surfaces, different jobs.
When deploy is active, the chart stream follows the live data exchange automatically — so the price you watch matches the bars your signals eat.