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 state | Price meaning | Volume meaning | Permitted interpretation |
|---|---|---|---|
| Trade-based source bar | Aggregated transaction prices | Reported traded quantity | Transactions occurred under the feed's definition |
| Quote-based source bar with zero volume | Documented quote-derived prices | No reported trading volume | Quotes can move without a trade |
| Verified no-trade slot, no source bar | No new trade price | No trades under the verified scope | A synthetic representation may be defined |
| Unknown missing slot | Unknown | Unknown | Missing evidence remains unresolved |
| Current unfinished slot | Provisional | Provisional | Wait 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 UTC | Raw close | Raw volume | Classified state | Optional calendar close |
|---|---|---|---|---|
| 09:00 | 100 | 5 | Observed trade bar | 100 |
| 09:01 | No row | No row | Verified no trades | 100, synthetic |
| 09:02 | No row | No row | Verified no trades | 100, synthetic |
| 09:03 | 103 | 4 | Observed trade bar | 103 |
| 09:04 | No row | No row | Unknown collection gap | Unavailable |
| 09:05 | 101 | 3 | Observed trade bar | 101 |
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:
| Consumer | Example declared policy | What the policy cannot establish |
|---|---|---|
| Calendar moving average | Include flagged carry-forward prices only for verified no-trade slots | A fresh transaction or available liquidity |
| Trade-count statistic | Count actual transactions; retain zero for verified no-trade slots | Missing transactions during an unknown gap |
| Volume-weighted price | Use documented price and volume inputs; return unavailable if total volume is zero | A VWAP from an entirely untraded window |
| Order simulator | Require an explicit execution model and adequate source evidence | A fill merely because a synthetic candle touches an order price |
| Risk evaluation after a gap | Mark any range-dependent outcome unresolved pending recovery | Whether 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.
