← Back to blog

Live

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.