← BTCADP Data Explorer

BTCADP

Bitcoin Average Daily Price
Specification Document • Version 1.0
A Universal, Reproducible, and Institution-Independent
Standard for Daily Bitcoin Valuation
March 2026
Draft for Public Review

Contents

  1. Introduction
  2. Currency Denomination
  3. Daily Time Window
  4. Core Mathematical Framework
  5. Exchange Qualification Criteria
  6. Historical Eras and Methodology Transitions
  7. Community Research and Iterative Refinement
  8. Edge Cases and Special Conditions
  9. Transparency and Auditability
  10. Specification Versioning
  11. Reference Implementation
  12. Conclusion

1. Introduction

The BTCADP (Bitcoin Average Daily Price) establishes a universal reference point for Bitcoin's daily value. It aims to provide an answer that satisfies four core principles:

Fairness. The price reflects actual market activity without favoring any particular exchange, geography, or participant.

Reproducibility. Any competent individual with access to the same trade data and this specification should independently arrive at the same number, to within a trivial margin.

Manipulation Resistance. The methodology is designed so that no single exchange, trader, or entity can materially distort the published price through wash trading, spoofing, or other manipulation.

Institutional Independence. The BTCADP does not depend on any organization for its legitimacy. If the original publisher ceases to exist, any party can continue computing the BTCADP using this specification.

Every design decision in this specification flows from these four principles. Where trade-offs arise, they are documented and justified.

2. Currency Denomination

The BTCADP is denominated in United States Dollars (USD). This is a pragmatic decision grounded in historical reality: the BTC/USD trading pair has consistently maintained the deepest liquidity throughout Bitcoin’s entire market history. The US dollar has served as the world’s reserve currency for the full duration of Bitcoin’s existence, making it the natural unit of account for a universal price.

The BTCADP is expressly defined for the BTC/USD pair. Exchanges trading BTC against other fiat currencies (EUR, JPY, GBP, etc.) are excluded from the calculation to avoid introducing a dependency on foreign exchange rates, which would add complexity and an additional vector for error.

Converting the published BTCADP to other currencies is straightforward: multiply by the relevant day’s USD exchange rate from any reputable forex source. A future extension of this specification may define BTCADP variants for other major fiat pairs using an equivalent methodology applied independently.

3. Daily Time Window

A single BTCADP value is computed for each calendar day. The day is defined as the 24-hour period from 00:00:00.000 UTC through 23:59:59.999 UTC. Coordinated Universal Time (UTC) is the only defensible choice: it is the international scientific standard for timekeeping and does not privilege any geographic region.

All trade timestamps must be normalized to UTC before processing. A trade is assigned to the day on which its UTC timestamp falls. Trades occurring at exactly 00:00:00.000 UTC belong to the new day.

Precision: Timestamps should be recorded to millisecond precision where available. Sub-millisecond precision is not required.

4. Core Mathematical Framework

4.1 Volume-Weighted Average Price (VWAP)

The foundational building block of the BTCADP is the Volume-Weighted Average Price. For a set of N trades executed during a daily window, each with price Pᵢ and volume Vᵢ, the VWAP is defined as:

VWAP = Σ(Pᵢ × Vᵢ) / Σ(Vᵢ)   for i = 1 to N

This is calculated independently for each qualifying exchange on each day, producing a set of exchange-level VWAPs. The VWAP answers the question: “At what average price did Bitcoin actually change hands on this exchange today?” weighted by economic activity.

4.2 Trimmed Mean Aggregation

Given a set of exchange-level VWAPs for a given day, the BTCADP is computed as a trimmed mean. The procedure is as follows:

Step 1. Collect the VWAP from each qualifying exchange for the day, producing an ordered set {VWAP₁, VWAP₂, …, VWAPₙ}.

Step 2. Sort the values in ascending order.

Step 3. Remove the lowest k% and the highest k% of values, where k = 25. If the number of values to remove is not an integer, round down (i.e., use floor). This means the trimming is conservative, preferring to include more data.

Step 4. Compute the arithmetic mean of the remaining values. This is the BTCADP for that day.

BTCADP(d) = mean( trimmed₂₅( {VWAP₁(d), VWAP₂(d), …, VWAPₙ(d)} ) )

The trimmed mean at k = 25% removes the top and bottom quartiles, making the result robust against outlier exchanges. Even if up to 25% of qualifying exchanges report fraudulent data, the BTCADP remains accurate, provided the majority report honestly.

Rationale: The trimmed mean was chosen over the median because it uses more of the available data while still being highly robust. With 20 exchanges, a median uses only 1–2 data points; a 25% trimmed mean uses 10.

4.3 Equal Weighting of Exchanges

Each qualifying exchange contributes exactly one VWAP to the trimmed mean, regardless of its volume. This is a deliberate design choice. Volume-weighting across exchanges would reintroduce the manipulation vector that the methodology is designed to eliminate: an exchange that fabricates volume would gain proportional influence over the final price. Equal weighting ensures that no single exchange, regardless of its reported size, can dominate the result.

The trade-off is that a small exchange with $2 million in daily volume receives the same weight as a large exchange with $500 million. This is acceptable because the trimmed mean already discards the most extreme values. If a small exchange’s VWAP is an outlier, it is trimmed. If it falls within the middle 50%, its price is broadly consistent with the market and deserves inclusion.

Known attack vector: An adversary could theoretically create multiple small exchanges that each barely meet the qualification threshold, attempting to shift the trimmed mean. However, with 20+ legitimate qualifying exchanges in the modern era, an attacker would need to introduce and sustain more than 7 fraudulent exchanges to influence the result — each meeting all qualification criteria including price coherence. The cost and complexity of this attack is substantial, and the transparency record (Section 9) makes it detectable.

4.4 Rounding and Arithmetic Precision

The final BTCADP value is rounded to two decimal places (cents) using the IEEE 754 round-half-to-even rule (banker’s rounding). This eliminates rounding bias and is the standard in financial computation.

Intermediate calculations (VWAP computation, trimmed mean) should use at minimum 64-bit double-precision floating-point arithmetic (IEEE 754 binary64), which provides approximately 15–17 significant decimal digits. This is more than sufficient for Bitcoin price calculations. Two conforming implementations given identical trade data as input must produce BTCADP values that agree after rounding to two decimal places. In the unlikely event of a one-cent discrepancy due to floating-point ordering differences, neither value is considered incorrect.

4.5 Minimum Exchange Threshold

The trimmed mean requires a minimum number of inputs to be statistically meaningful. The minimum qualifying exchange count is defined as follows:

Exchanges (n)MethodConfidence Flag
n ≥ 5Full trimmed mean (k = 25%)Full confidence
n = 3 or 4Median only (trimming not meaningful)Reduced confidence
n = 2Simple mean of two VWAPsLow confidence
n = 1Single exchange VWAPSingle-source — flagged
n = 0BTCADP is undefined for this dayNo data

The confidence flag is published alongside the BTCADP value for full transparency. It does not change the number itself — it communicates the degree of statistical robustness behind it.

5. Exchange Qualification Criteria

An exchange qualifies for inclusion in the BTCADP calculation for a given day if and only if it meets the following criteria. These criteria are purely algorithmic — no subjective judgment or editorial discretion is involved.

The criteria are applied in a specific order. This order matters for reproducibility and is considered part of the specification:

5.1 The Exchange List

The calculation begins with a list of known exchanges to evaluate. This is the one input to the BTCADP that requires human curation, and this specification acknowledges it directly. Any exchange that offers a BTC/USD trading pair and publishes publicly accessible trade-level data (via API or data feed) is a candidate for inclusion. The list should be as comprehensive as reasonably possible.

The transparency record (Section 9) must publish the full list of exchanges evaluated for each day, including those that were evaluated and excluded. This allows any observer to propose additions. If an exchange meets all algorithmic criteria below but was not included in the evaluated set, the BTCADP publisher should add it to subsequent calculations. Over time, the exchange list converges toward completeness through public scrutiny.

Principle: The exchange list is intentionally permissive. The algorithmic filters below are what protect the BTCADP from bad data — not the curation of the list. When in doubt, include an exchange and let the math decide.

5.2 Data Availability (Filter 1)

The exchange must publish historical trade-level data for the BTC/USD pair, including at minimum: trade timestamp (UTC or convertible to UTC), trade price (USD), and trade volume (BTC). Exchanges that do not provide this data at the required granularity are excluded.

5.3 Minimum Trade Count (Filter 2)

The exchange must have recorded at least 1,000 individual trades in the BTC/USD pair during the 24-hour UTC window. This threshold filters out exchanges with negligible activity while being low enough to include any exchange with meaningful market participation.

Calibration note: The threshold of 1,000 trades was selected to exclude dead or near-dead venues while including any exchange with genuine retail or institutional activity. This parameter may be adjusted in future versions based on empirical analysis.

5.4 Minimum Time Coverage (Filter 3)

The exchange must have recorded at least one trade in a minimum of 16 out of the 24 hourly UTC periods in the day (i.e., trades must span at least 16 distinct hours). This ensures that an exchange’s VWAP reflects the full trading day rather than being skewed by activity during a narrow time window. An exchange that was online for only 4 hours during a price spike would produce a VWAP unrepresentative of the day as a whole.

Rationale: The 16-hour threshold is deliberately lenient. It accommodates scheduled maintenance windows while excluding exchanges that were substantively offline. An exchange active for 16+ hours captures the vast majority of daily price action.

5.5 Spread Threshold (Filter 4, where available)

Where order book data is available for an exchange, the exchange’s volume-weighted average bid-ask spread for the day must not exceed 1.0% of the mid-price. Exchanges with abnormally wide spreads are either illiquid or operating abnormally and should not influence the reference price.

This criterion is applied only when order book data is available. Many exchanges do not publish historical order book data, and requiring it would exclude otherwise legitimate venues. The trade count threshold and price coherence filter (below) provide sufficient quality assurance for exchanges without order book data. The spread threshold is an additional safeguard, not a prerequisite.

5.6 Price Coherence (Filter 5, applied last)

After all exchanges have passed the above filters and their VWAPs have been computed, the price coherence check is applied. An exchange’s daily VWAP must fall within 5% of the median VWAP across all other exchanges that passed Filters 1–4. This is a sanity check that identifies exchanges whose prices have decoupled from the global market due to technical issues, capital controls, or fraud.

The price coherence check is applied iteratively: after removing outlier exchanges, the median is recalculated, and any newly-outlying exchanges are also removed, until the set stabilizes or a maximum of 5 iterations have been performed. In practice, this rarely requires more than one pass.

Order of operations: The explicit ordering — data availability, then trade count, then time coverage, then spread (where available), then price coherence — is essential for reproducibility. Two implementations must apply these filters in the same sequence to arrive at the same qualifying set.

6. Historical Eras and Methodology Transitions

Bitcoin’s data landscape has evolved dramatically since its inception. A single methodology applied uniformly to all eras would produce either false precision (in early years) or unnecessary imprecision (in recent years). The BTCADP specification therefore defines distinct historical eras, each with an appropriate methodology. This is not a weakness — it is intellectual honesty formalized as policy.

6.1 Era 0: Genesis (January 3, 2009 – July 17, 2010)

BTCADP value: $0.00 for all days.

The BTCADP timeline begins on January 3, 2009, the date the Bitcoin genesis block was mined and the first bitcoin came into existence. No organized exchange existed during this period. The only data points are a handful of peer-to-peer transactions (most famously, the 10,000 BTC pizza purchase of May 22, 2010, implying approximately $0.004 per BTC). While these isolated transactions demonstrate that some participants ascribed value to Bitcoin, there was no functioning market from which a daily price could be derived.

The BTCADP for this entire era is defined as $0.00. This is not a claim that Bitcoin was worthless — it is a recognition that no market-based price discovery mechanism existed. A daily reference price requires a market, and no market existed. The $0.00 value provides a clean, unambiguous baseline from which Bitcoin’s price history begins.

Note: Researchers investigating this era may produce more granular valuations based on documented peer-to-peer transactions, mining costs, or other methodologies. Such work is encouraged under Section 7 and may inform future revisions, but the default BTCADP for Era 0 remains $0.00.

6.2 Era 1: Single-Exchange Market (July 18, 2010 – February 24, 2014)

BTCADP status: Single-source, flagged.

Mt. Gox launched on July 18, 2010, and rapidly became the dominant exchange, handling over 70% of global Bitcoin volume for much of this period. While other exchanges existed (TradeHill, Bitcoinica, BTC-e, Bitstamp), their volumes were insufficient to form a statistically meaningful set for trimmed-mean aggregation.

The BTCADP for this era is defined as the Mt. Gox daily VWAP for the BTC/USD pair. Every value in this era carries a single-source confidence flag. For dates where other exchanges (particularly Bitstamp, from 2012 onward) have sufficient data to compute a VWAP, these values are published in the transparency record as secondary references for cross-validation, but do not alter the primary BTCADP value.

Known issue: It is now established that Mt. Gox was insolvent for much of 2013 and that automated trading bots (notably the “Willy Bot”) generated fraudulent volume. The BTCADP values from late 2013 should be treated with appropriate skepticism. This is an inherent limitation of the historical record, not a methodological failure — no methodology can produce trustworthy prices from untrustworthy data.

6.3 Era 2: Transition (February 25, 2014 – December 31, 2017)

BTCADP status: Multi-exchange, reduced confidence initially, improving over time.

Following the Mt. Gox collapse in February 2014, the market fragmented across multiple exchanges including Bitstamp, Bitfinex, BTC-e, Coinbase (GDAX), Kraken, and others. The full BTCADP methodology applies beginning on this date, but with the caveat that the exchange count is smaller (typically 5–10 qualifying venues) and the trimmed mean therefore has fewer inputs.

The confidence flag for each day in this era is determined by the actual number of qualifying exchanges on that day, per the thresholds in Section 4.5. Early days in this era may carry “Reduced confidence” or even “Low confidence” flags. By the 2017 bull run, the exchange ecosystem had matured substantially, with 15–30 qualifying venues on most days, providing the statistical depth needed for full-confidence BTCADP values.

6.4 Era 3: Maturity (January 1, 2018 – Present)

BTCADP status: Full methodology, full confidence.

The modern era features abundant, high-quality data from regulated exchanges (Coinbase, Kraken, Gemini, Bitstamp), institutional reference rates (CME BRR), and spot Bitcoin ETFs (from January 2024 onward). The full BTCADP methodology applies with a robust set of qualifying exchanges, typically 15–40 per day.

This era serves as the benchmark for validation: BTCADP values can be compared against institutional reference rates to confirm methodological soundness. Convergence with independently-calculated prices from CME, Bloomberg, and ETF NAV calculations provides external validation.

EraDate RangeMethodConfidence
0Jan 3, 2009 – Jul 17, 2010$0.00 (no market)Defined by specification
1Jul 18, 2010 – Feb 24, 2014Mt. Gox VWAPSingle-source
2Feb 25, 2014 – Dec 31, 2017Trimmed mean of VWAPsReduced → Full
3Jan 1, 2018 – PresentTrimmed mean of VWAPsFull

7. Community Research and Iterative Refinement

The BTCADP specification is designed not as a finished product but as a living standard that improves through community participation. While the methodology described in this document is fully operational for Era 3 (2018–present), the historical eras present research challenges that no single organization should attempt to solve in isolation. This section formalizes the role of independent researchers in strengthening the BTCADP.

7.1 Provisional Values and the Research Mandate

For Eras 0, 1, and 2, the initial BTCADP publication uses provisional values: $0.00 for Era 0, Mt. Gox VWAP data for Era 1, and aggregated market data from available sources for Era 2. These values are directionally accurate but were not computed using the full methodology specified in Section 4, because the required trade-level data is either incomplete, difficult to obtain, or housed in sources of uncertain provenance.

Every provisional value is clearly marked as such. Provisional status is not a deficiency — it is an honest acknowledgment that rigorous historical computation requires dedicated research effort, and an explicit invitation for that effort to be undertaken.

The research community is encouraged to produce definitive BTCADP values for these historical eras using trade-level data and the methodology described herein. When published, these values supersede the provisional figures and become the accepted historical record.

7.2 Methodological Adaptation

The BTCADP methodology was designed for the modern exchange ecosystem. Researchers working with early historical data may encounter conditions where strict application of every filter and threshold is impractical or produces misleading results. For example, the minimum trade count of 1,000 (Section 5.3) may exclude the only active exchange on a given day in 2011, and the 16-hour time coverage requirement (Section 5.4) may be incompatible with the operating patterns of early venues.

In such cases, researchers are encouraged to adapt the methodology to fit the available data, provided they adhere to the four core principles established in Section 1: fairness, reproducibility, manipulation resistance, and institutional independence. The specification defines what correct looks like; researchers determine how to get there given the constraints of the historical record.

7.3 Publication Standards for Research Contributions

To ensure that community research contributions are verifiable and useful, any published refinement of historical BTCADP values should include the following:

Data sources. A complete description of the trade-level data used, including its origin, format, and any known limitations or gaps. Where data was obtained from archived, leaked, or reconstructed sources, the provenance should be documented with sufficient detail for others to locate and evaluate the same data.

Methodology. A precise description of the calculation performed, including any deviations from the standard BTCADP methodology and the rationale for each deviation. This should be detailed enough for independent replication.

Transparency records. The same transparency data described in Section 9, adapted as necessary for the era in question. At minimum: the exchanges evaluated, the qualifying exchanges and their individual VWAPs, and any exchanges excluded with the reason for exclusion.

Reproducible results. The computed BTCADP values, along with code or sufficiently detailed procedures to allow independent verification.

These standards align with established academic publishing norms and ensure that research contributions can be peer-reviewed, challenged, and improved upon.

7.4 Strengthening the Specification Through Research

Research contributions serve a dual purpose. First, they produce better historical BTCADP values. Second, and equally important, they stress-test the specification itself. When a researcher finds that a particular filter does not work well for a specific era or dataset, that finding informs future versions of the specification. A methodology that survives independent scrutiny across diverse data conditions is more trustworthy than one that has only been applied by its authors.

Researchers who identify ambiguities, edge cases, or limitations in this specification are encouraged to document them alongside their findings. Such feedback is the mechanism by which the BTCADP evolves from a proposal into a robust, community-validated standard.

Principle: The BTCADP belongs to no one and benefits everyone. Its credibility is established through transparent methodology, open data, and the collective rigor of independent researchers who test, refine, and ultimately validate the standard.

8. Edge Cases and Special Conditions

8.1 Exchange Outages

If an exchange is offline or not reporting data for part of a day but meets the minimum trade count and time coverage thresholds (Sections 5.3 and 5.4) for the portion of the day it was active, its VWAP is included. If it fails either threshold, it is simply excluded for that day. No interpolation or estimation is performed for missing data.

8.2 Chain Splits and Hard Forks

When Bitcoin undergoes a chain split (as occurred with Bitcoin Cash on August 1, 2017), the BTCADP continues to track the chain that retains the BTC ticker on the majority of qualifying exchanges. The forked asset is a separate instrument and is not included. No retroactive adjustments are made to pre-fork BTCADP values.

8.3 Stablecoin Pairs

BTC/USDT, BTC/USDC, and other stablecoin pairs are excluded from the BTCADP. While these pairs are highly liquid, they introduce a dependency on the stablecoin’s peg to the US dollar, which is an additional assumption. The BTCADP is computed exclusively from BTC/USD fiat pairs where the USD side represents actual US dollars.

8.4 Extreme Market Events

The BTCADP makes no special accommodation for flash crashes, exchange-specific anomalies, or extraordinary volatility. The qualification criteria and trimmed mean are designed to be robust against such events. If multiple exchanges experience simultaneous extreme price moves, this is genuine market activity and should be reflected in the BTCADP.

9. Transparency and Auditability

Each daily BTCADP publication should be accompanied by a transparency record containing the following data, enabling full independent verification:

Date: The UTC calendar date.

BTCADP Value: The computed price, rounded to two decimal places.

Confidence Flag: Full, Reduced, Low, Single-source, or No data.

Exchanges Evaluated: The complete list of exchanges that were considered, enabling observers to identify any exchanges that should have been included but were not.

Qualifying Exchanges: Each exchange that passed all filters, along with its individual VWAP, trade count, time coverage (hours active), and whether its VWAP was trimmed or included in the final mean.

Excluded Exchanges: Any exchanges that were evaluated but failed qualification, with the specific filter they failed (trade count, time coverage, spread, or price coherence).

Specification Version: The version of the BTCADP specification used.

This transparency record allows anyone to audit not just the final number but every input that contributed to it. It also enables detection of systematic changes in exchange qualification over time, and ensures that the exchange evaluation list can grow through public feedback without requiring changes to the specification itself.

10. Specification Versioning

This document is version 1.0 of the BTCADP specification. Future versions may adjust parameters (trim percentage, minimum trade count, time coverage threshold, spread threshold) based on empirical analysis, or may introduce enhancements such as additional currency pairs.

Any changes to the specification will be versioned and documented. Retroactive recalculation using a new version is permitted and encouraged, but previously published values under prior versions remain valid under their respective versions. Both the value and the specification version under which it was computed should always be cited together.

The goal is that version changes are rare and justified by significant changes in the data landscape, not by editorial preference.

11. Reference Implementation

A reference implementation in Python (or equivalent open-source language) should accompany this specification. The reference implementation serves two purposes: it resolves any ambiguity in the written specification by providing an executable definition, and it allows independent parties to compute BTCADP values directly.

The pseudocode for the core calculation is as follows:

function BTCADP(date): exchange_vwaps = [] for each exchange in evaluated_exchanges: # --- Filter 1: Data Availability --- trades = fetch_trades(exchange, date, 'BTC/USD') if trades is unavailable: skip # --- Filter 2: Minimum Trade Count --- if count(trades) < 1000: skip # --- Filter 3: Minimum Time Coverage --- hours_active = count(distinct_utc_hours(trades)) if hours_active < 16: skip # --- Filter 4: Spread Threshold (where available) --- if orderbook_data_available(exchange, date): if avg_spread(exchange, date) > 0.01: skip # --- Compute exchange VWAP --- vwap = sum(p * v for p, v in trades) / sum(v for _, v in trades) add (exchange, vwap) to exchange_vwaps # --- Filter 5: Price Coherence (iterative, max 5 passes) --- for iteration in 1 to 5: median_vwap = median(vwap for _, vwap in exchange_vwaps) prev_count = count(exchange_vwaps) remove any (ex, vwap) where |vwap - median_vwap| / median_vwap > 0.05 if count(exchange_vwaps) == prev_count: break # stable # --- Compute BTCADP based on remaining count --- n = count(exchange_vwaps) vwaps = [vwap for _, vwap in exchange_vwaps] if n == 0: return UNDEFINED if n <= 2: return round(mean(vwaps), 2) if n <= 4: return round(median(vwaps), 2) # --- Trimmed mean (k = 25%) --- sorted_vwaps = sort(vwaps) trim_count = floor(n * 0.25) trimmed = sorted_vwaps[trim_count : n - trim_count] return round(mean(trimmed), 2)

Two independent implementations of this pseudocode, given identical trade data as input, must produce BTCADP values that agree after rounding to two decimal places. If they do not, the specification contains an ambiguity that must be resolved.

12. Conclusion

The BTCADP is designed to be the simplest number that can honestly and fairly answer the question of what Bitcoin was worth on any given day. It makes no claim to perfection in the early years of Bitcoin’s history, where data is sparse and unreliable. It makes a strong claim to accuracy and robustness from 2018 onward, where the methodology can be fully applied.

The strength of the BTCADP lies not in the authority of its publisher but in the transparency of its methodology. Anyone can verify it. Anyone can reproduce it. Trust comes from the math, not an individual publisher or institution.

End of Specification • BTCADP v1.0