Developer guide › Guides

One check for your integration: skip the candle that's still forming

The newest candle can still change. Here's how to tell, and the two lines that handle it.

The issue

When you ask for recent candles, the last one is usually the current period, still in progress. Its high, low and close keep moving until the period ends. TickFeed marks it with "complete": false:

Sample response to GET /v1/candles/XAUUSD?timeframe=H1&limit=24, captured from the live API on 02 November 2026 at 13:49 UTC. It's a real past response, not live data: prices have moved since.

{
  "symbol": "XAUUSD",
  "timeframe": "H1",
  "source": "live",
  "count": 24,
  "truncated": false,
  "next_start_time": null,
  "candles": [
    {
      "time": "2026-11-02T12:00:00Z",
      "open": 3901.37,
      "high": 3906.93,
      "low": 3898.62,
      "close": 3901.11,
      "tick_volume": 23638,
      "spread_points": 5,
      "complete": true
    },
    {
      "time": "2026-11-02T13:00:00Z",
      "open": 3901.12,
      "high": 3950.7,
      "low": 3896.3,
      "close": 3943.03,
      "tick_volume": 56414,
      "spread_points": 5,
      "complete": false
    }
  ],
  "notes": [
    "The last candle is still forming (complete=false); its values may change."
  ],
  "note": "(trimmed to the last 2 of 24 candles for this page)"
}

The fix

bars = tf.candles("XAUUSD", "H1", limit=50)["candles"]
closed = [b for b in bars if b["complete"]]   # only finished hours
last_closed = closed[-1]

Use closed for anything that should not change after the fact (signals, averages, stored history), and the forming bar only for display. Remember that time is the bar's open time in UTC.

Cost: up to 100 candles: 1 unit. One unit is $0.002 / £0.002 / €0.002 (in your account's currency), taken from your prepaid balance only when the request succeeds. Full prices.

More short guides