Skip to content

Research notes

Missing crypto candles and zero-volume bars

Six minutes show why an absent row, a zero-volume quote bar and an unknown outage need different rules before indicators, labels or fills are calculated.

Ivory blocks and two transparent lime blocks occupy a slotted rail, with one empty dark slot and a detached block beside it.
Illustration for research notes; examples in this article are educational.

A missing crypto candle means that no row was supplied for an expected interval; a zero-volume bar means that a row exists and reports no traded volume under its source's rules. Neither establishes an unchanged executable price. Classify the interval before filling it, because documented no-trade periods, quote-based bars and unknown feed gaps require different treatment.

Two files can describe the same quiet market with different row counts. A third file can look equally quiet because collection stopped. The practical question is which evidence lets a researcher distinguish those cases, and which calculations remain valid afterward.

Read the source's empty-interval contract

Kraken's downloadable OHLCVT archive includes intervals in which trades occurred and omits intervals without trades. Within that documented dataset, an empty time slot can be an intentional representation of no trading. That rule concerns this archive; it should not be transferred automatically to another venue, endpoint or locally collected file. Kraken historical OHLCVT conventions

Coinbase Exchange says its historical rates may be incomplete and that it publishes no data for intervals without ticks. Consequently, absence alone cannot resolve every missing row in a downloaded Coinbase dataset: both the documented omission policy and collection completeness need investigation. Coinbase Exchange candle limitations

An explicit zero-volume bar also needs interpretation. Alpaca explains that its crypto bars include quote midpoint prices; when no trade occurs, volume can be zero while prices come from quotes. Such a bar need not have identical open, high, low and close. It is different from copying the previous trade close into every price field. Alpaca's zero-volume crypto bar explanation

These are source-specific examples, not a list of feeds supported by KLINEO. The wider candle-data audit covers malformed values, duplicate records and structural checks. Here the focus is the meaning of a valid empty slot.

Build a calendar without inventing observations

First define eligible intervals for the exact venue, instrument, market type and bar size. A pair that had not listed yet does not have an ordinary missing candle. A delisted market does not remain eligible merely because the rest of crypto continues trading.

Normalize the actual interval endpoints before constructing that calendar. Two daily series may have different boundaries even when both labels say the same date; use the candle time-zone comparison to resolve that separate problem.

Then join source records onto eligible slots and preserve two different facts: whether a source row exists and what kind of evidence it contains.

Interval statePrice meaningVolume meaningPermitted interpretation
Trade-based source barAggregated transaction pricesReported traded quantityTransactions occurred under the feed's definition
Quote-based source bar with zero volumeDocumented quote-derived pricesNo reported trading volumeQuotes can move without a trade
Verified no-trade slot, no source barNo new trade priceNo trades under the verified scopeA synthetic representation may be defined
Unknown missing slotUnknownUnknownMissing evidence remains unresolved
Current unfinished slotProvisionalProvisionalWait for the required finalization evidence

Zero is a value; unknown is a state. Keep volume unavailable for an unknown gap rather than silently replacing it with zero. Likewise, a zero-volume source bar should retain its source identity even if a downstream calculation excludes it.

Six minutes that change a moving average

The following is a hypothetical trade-based feed, not market history. It omits no-trade intervals. Assume an independently verified complete trade record establishes no trades in 09:01 and 09:02. At 09:04 the collector disconnects, so trading activity is unknown. A finalized 08:59 source candle closed at 99 before this table begins.

Minute starting UTCRaw closeRaw volumeClassified stateOptional calendar close
09:001005Observed trade bar100
09:01No rowNo rowVerified no trades100, synthetic
09:02No rowNo rowVerified no trades100, synthetic
09:031034Observed trade bar103
09:04No rowNo rowUnknown collection gapUnavailable
09:051013Observed trade bar101

For this exercise only, define a calendar-price convention that carries the latest trade close through verified no-trade slots, sets their synthetic volume to zero and keeps a construction flag. Once the 09:03 candle is finalized, the last three calendar-minute closes are 100, 100 and 103. Their simple average is 101.

Keeping only trade-bearing candles instead produces the latest three observed closes of 99, 100 and 103, averaging approximately 100.67. Those observations start at 08:59, 09:00 and 09:03. Calling both calculations a “three-minute average” hides a change from elapsed time to observation count.

The 100-to-103 move is 3% across the three minutes between the 09:00 and 09:03 closing boundaries. Under the synthetic last-trade convention, its intervening calendar returns are 0%, 0% and 3%. Removing empty slots leaves one 3% observation across a longer span; it does not turn the move into a one-minute return. Neither representation reconstructs executable quotes.

At 09:05, the 103-to-101 change is approximately −1.94% across two minutes. Because 09:04 is unknown, its individual minute return and intrabar range remain unavailable. Do not distribute that change evenly or insert a flat candle and call either version observed history.

Choose fill rules separately for features and orders

A regular grid can be useful for a specified calculation. It does not follow that every synthetic row should be eligible for a trade. Write the policies separately:

ConsumerExample declared policyWhat the policy cannot establish
Calendar moving averageInclude flagged carry-forward prices only for verified no-trade slotsA fresh transaction or available liquidity
Trade-count statisticCount actual transactions; retain zero for verified no-trade slotsMissing transactions during an unknown gap
Volume-weighted priceUse documented price and volume inputs; return unavailable if total volume is zeroA VWAP from an entirely untraded window
Order simulatorRequire an explicit execution model and adequate source evidenceA fill merely because a synthetic candle touches an order price
Risk evaluation after a gapMark any range-dependent outcome unresolved pending recoveryWhether an unseen stop or target would have triggered

The zero denominator matters. A window with no traded volume has no trade-based VWAP under the usual weighted-average formula. Returning the previous VWAP is a separate stale-value policy, not a newly measured VWAP.

A stop at 102 in the example cannot be adjudicated from the missing 09:04 slot merely because the surrounding closes are 103 and 101. Order timing, price path and execution rules all matter. The backtest execution evidence guide examines that broader ambiguity.

Recovery must preserve what was known at the time

An empty live interval may still be developing. Kraken's REST OHLC documentation states that its final array entry is the current, uncommitted timeframe. A temporarily zero volume value in an active bar is therefore not the same evidence as a finalized no-trade interval. Kraken REST OHLC finalization rule

For each gap, retain the request range, source identity, arrival evidence, classification reason and policy version. A reconnect or a busy heartbeat does not establish that the missing period was quiet; the freshness guide separates connection activity from the relevant market observation.

Backfill can later resolve an unknown slot. Preserve the original decision-time state and the recovered version separately. Using a later candle to retroactively authorize an earlier signal creates an availability problem, addressed in the look-ahead audit.

The classification also affects downstream evaluation. If a price label cannot be determined across an unknown gap, treating it as a negative outcome changes a probability test's target. Define label eligibility before assessing probability calibration and Brier scores. For a portfolio, carry each asset's availability flag into multi-asset backtest alignment; an asset with an unknown minute should not acquire a fresh valuation merely because another asset traded.

Method and limits

This AI-assisted article uses primary feed documentation and an original six-minute worksheet. The prices, volumes, outage and fill policies are invented; the averages and returns were checked arithmetically. No historical feed was downloaded or execution result measured. The worksheet specifies a research contract and does not assert that KLINEO offers these classification or filling controls.

Keep the context with the example.

Each worked example is illustrative, with its sources and assumptions in the article. Read our editorial standards for authorship, verification and corrections.