On this page
Tape Speed — Tape & flow, in its own panel below the chart.
What Tape Speed measures
The duration of each bar comes from the data source when the source reports it. Otherwise it falls back to the nominal duration of an explicit time-based timeframe, and only when the following bar confirms the close by starting at or after the nominal end — a next bar that arrives earlier does not prove the bar closed and may indicate mixed or out-of-order data. No interval between buckets is ever promoted into a duration for tick, volume or range bars. The most recent bar, when the source reports no duration for it, stays unknown rather than being measured against the wall clock, and a window containing any unknown duration yields no value. This makes the series stable: a faster bar arriving later never rewrites a rate that was already known.
The formula, as implemented
This is not how the indicator is usually defined elsewhere — it is what the shipped code computes, documented next to the implementation:
Durée close fournie par la source, sinon durée NOMINALE d'un timeframe temporel explicite dont la barre suivante confirme la clôture. Aucun intervalle entre buckets n'est promu en durée de barre tick/volume/range. Le dernier bucket sans mesure source reste inconnu, sans lire l'horloge. */ function closedBarDurationNs( bars: readonly FootprintBar[], i: number, ctx: SeriesContext, ): number | null { const bar = bars[i]; const source = ctx.barDurationsNs; if (source?.has(bar.bucketTsNs)) { const duration = source.get(bar.bucketTsNs); return duration !== undefined && Number.isFinite(duration) && duration > 0 ? duration : null; } if (i + 1 >= bars.length) return null; const match = /^(\d+)(s|m|h|d)$/.exec(bar.timeframe); if (match === null) return null; const seconds = TIMEFRAME_SECONDS[match[2] as keyof typeof TIMEFRAME_SECONDS]; const duration = Number(match[1]) * seconds * 1e9; // Une barre suivante antérieure à la fin nominale ne prouve pas sa // clôture (données mélangées, ordre incorrect ou timeframe incohérent). return Number.isFinite(duration) && duration > 0 && bars[i + 1].bucketTsNs - bar.bucketTsNs >= duration ? duration : null; } /** Vitesse du tape : trades/minute sur une fenêtre glissante de N barres. rate[i] = Σ tradeCount[i−N+1..i] / Σ durée_close_en_minutes[i−N+1..i] Durée close explicite ou nominale vérifiée ; une durée manquante rend la fenêtre inconnue. L'arrivée d'une barre plus rapide ne change jamais les taux déjà connus. Warm-up (< N barres) → null. Défaut N=5.
How to read it
- The unit is trades per minute, so values are comparable between timeframes on the same instrument, unlike a raw trade count per bar.
- A rising line means prints are arriving faster, whatever their size; it describes activity, not pressure.
- Compare the level with the same time of day on previous sessions rather than with an absolute number, since the tape naturally accelerates at the open and around scheduled events.
- Pair it with a volume measure: fast tape with low volume means many small prints, fast tape with high volume means many large ones.
- Missing sections of the line are expected on non time-based bars and at the right edge of the chart, and mean the duration was not measurable rather than that the tape was silent.
Parameters and defaults
Window defaults to 5 bars. A shorter window follows bursts more closely and produces a noisier line; a longer one averages across more bars, needs a longer warm-up before the first value appears, and raises the chance that one unmeasured bar blanks the whole window. Line colour is the only other setting.
| Parameter | Type | Default | Range |
|---|---|---|---|
| Window (bars) | number | 5 | 1 – 200 |
What it does not show
The measure counts trades and ignores their size, so a single large print counts exactly as much as a one-lot. It only produces values where bar durations are measurable, which means tick, volume and range bars stay empty unless the source reports durations for them. Trade counts depend on how the venue and the feed aggregate fills, so the same market can read differently through two data sources and the values should not be compared across feeds. A fast tape describes activity and says nothing about which direction that activity favours.
Related indicators
- Stacked Imbalances — Tape & flow
- Absorption Score — Tape & flow
- Unfinished Auctions — Tape & flow
- Effort vs Result — Tape & flow
- POC Drift (ticks) — Tape & flow
- Cumulative buy volume — Tape & flow
This page in other languages
Frequently asked questions
- What does speed of tape measure?
- It measures the rate at which trades print, expressed as trades per minute over a rolling window of bars. It counts the number of prints, not the quantity traded, so it describes how busy the tape is rather than how much size is changing hands.
- Why does Tape Speed show nothing on tick or volume bars?
- The rate needs a measured duration for each bar in the window. Tick, volume and range bars have no nominal duration, and the gap between two bucket timestamps is not treated as a bar duration because it would be a guess. Unless the data source reports a duration for those bars, the window stays unknown and no value is plotted.
- Does a fast tape mean a large move is coming?
- No. The indicator states how quickly prints are arriving and nothing more. Fast tape occurs around the open, around scheduled events and during two-sided fights that resolve nowhere, as well as during directional moves. Any directional reading has to come from other information, such as delta or the footprint itself.