---
title: "Live Means Closed"
description: "Live trading on closed bars only: rebuild signals from history, then ask the broker—never treat websocket ticks as signals."
canonical: https://www.tradelogger.dev/blog/live-closed-bars
date: 2026-07-07
---

# Live Means Closed

*Polling for finished candles, not chasing ticks*

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.
Canonical HTML: https://www.tradelogger.dev/blog/live-closed-bars
