‹ Build a Dashboard Lesson 13 of 16
Contents Lesson 13 of 16

5 min read · professional

What "real-time" actually means

The word does more work in marketing than in engineering. Before you design a refresh strategy, you need to know what your data actually is.

Three different things wear the name

End of day. One bar per trading day, finalised after the close — finalised, not settled, which is the separate cash-for-shares step and lands a day later. Yesterday's truth, and the right data for a backtest — course 3 ran entirely on it.

Delayed. Real trades, shown after a lag. The number is right; it describes a moment that has passed.

Live. As close to now as a consumer feed gets, which still is not the exchange's own clock.

A dashboard mixing these without labels is the most confidently wrong artefact in this whole track, because all three render as a number with two decimal places.

Read the age, do not trust the name

You already have the technique from course 1. The response carries a timestamp; use it:

{"code":"AAPL.US","timestamp":1787689680,"gmtoffset":0,"close":309.90,"change_p":-0.1418}

1787689680 is Unix seconds — 2026-08-25 20:28:00 UTC. Subtract from now and you have the true age of that number, whatever any plan description says.

Two things to know about that field. It is timezone-independent, so gmtoffset is for display only and never for arithmetic. And it is the timestamp of the last trade, not of your request — so a thinly traded instrument reports an age of hours during an open market and is not broken.

Different symbols, different ages, one response

From the same measured fixture:

[{"code":"AAPL.US","timestamp":1787689680},
 {"code":"MSFT.US","timestamp":1787689680},
 {"code":"TSLA.US","timestamp":1787689740}]

Sixty seconds apart, in one response, for three of the most liquid stocks in the world — and read the clock while you are there: 20:28 UTC is 16:28 in New York, so those are after-hours prints on a feed stamped to the minute. In the session three names this liquid sit within seconds of each other. On a thin instrument the spread is much larger.

So there is no single "as of" for a cockpit. Per-panel ages, and a header showing the oldest — which unit 3 already established and which this lesson explains the reason for.

Refresh rate cannot exceed the data rate

The mistake that wastes the most quota in this course: polling every five seconds a feed that updates every fifteen minutes.

You now have the measurement to prevent it. Poll a symbol repeatedly for a few minutes, log the distinct timestamps, and compute the median gap between changes. That gap is the fastest useful refresh interval. Anything faster spends calls to fetch a number you already have.

Do it for one liquid and one thin instrument and the two answers will surprise you.

What the market is doing matters too

A closed market produces no new trades. A cockpit refreshing through the night is spending its allowance to re-fetch the same closing price several hundred times.

Refresh only while the relevant market is open, and pause when the tab is hidden. Two conditions, and together they usually cut a day's usage by more than any other change in this course.

The finance behind it

What the word means on a quote, from the data side: What does "delayed" actually mean on a live quote?. And why a market that never closes still stops: Why does FX trade around the clock but stop for the weekend?

Try it now

Measure the update interval of one liquid and one thin instrument on your own plan, and write both in PLAN.md. Then compare them to the refresh rate you were about to choose — for most people the honest number is many times slower than the intended one.