The idea for Blocktap originated in 2017. There was limited access to high quality, highly detailed cryptocurrency information. We set out to build a robust, fault tolerant, and highly accurate market data collection system. Blocktap operates on raw data streams and performs aggregation of this information into meaningful time series metrics.
Blocktap is also the world's first GraphQL API for cryptocurrency market data. We felt that the expressiveness of GraphQL would provide a powerful way to query the complex and varied assets available in the cryptocurrency space.
In addition to market data, Blocktap collects and analyzes on-chain metrics for Bitcoin and Litecoin.
Blocktap makes accessing similar markets across different exchanges simple. For example Bitcoin can be referred to as BTC or XBT on different exchanges. Blocktap simplifies querying across exchanges by normalizing this symbol to 'BTC'. Internally, we maintain a reference for each asset on each exchange.
Blocktap uses a similar standardization scheme as the popular library CCXT.
Blocktap is not in the cloud. Blocktap servers are colocated at a top tier data center.
The decision to colocate was made after analysis of the high bandwidth and storage requirements for a system such as Blocktap.
Data collection is split across many servers in a redundant manner. Blocktap also utilizes redundent and separate networks for all of the data collection processes to maintain maximum uptime.
Blocktap uses multiple, redundant data feeds for each supported exchange. These feeds are connected in real time from our open-source websocket library, CCXWS.
From the live streams, data is de-duplicated and archived by our system. A completed set of data is warehoused in our data lake for access by the query engine.
Blocktap also uses periodic web polling as a second method to obtain market data from exchanges. This ensures that if web socket feeds are offline, a second mechanism can retrieve information.
Blocktap collects and archives raw trade information, sometimes referred to as level 3 matches.
The following information is collected:
Field | Type | Description |
---|---|---|
trade_id | string | the exchange's unique trade id |
unix_ms | int | unix timestamp in milliseconds when the match occurred as reported by the exchange |
price | string | price of transaction in the quote asset |
amount | string | amount transacted in the base asset |
seller_order_id | string | order id for the seller |
buyer_order_id | string | order id for the buyer |
Trade data is used to calculate time bucketed statistics such as OHLC.
Aggregating raw trade data is the preferred method for generating OHLC candles.
For a given time period (1m, 15m, 1h, 4h, 1d, etc.)
For the open price, the price of the first trade is used instead of the prior close price. We believe this more accurately reflects the movements of executed trades.
If there are zero trades in the period, the OHLC values are the price of the last executed trade and the volume is 0.
As an example, if there are two trades execution in a period: 0.1 bitcoin @ $10,000 and 0.2 bitcoin @ $9,990.
While we prefer to use the raw trade information, Blocktap builds and reports OHLC data in one of two ways. The method is determined by the supported accuracy of the exchange.
As part of a validation process, Blocktap requests daily OHLC data from exchanges. Blocktap compares the reported daily candle values to those generated by Blocktap.
Blocktap accuracy is usually around 100% and targets > 98%. Refer to the exchange details table for specifics.
Candles are processed from incoming trades. From the time a trade is received until the OHLC values are updated and queryable is near real time. In most cases this means under 100ms.
Tickers are generated from the raw trade data stream. Live tickers contain:
Tickers are calculated from incoming trades. Tickers are updated once per second based on the last processed trade.
Blocktap maintains current order books for all exchanges. These order books are level 2 and provide aggregated volume by price point. The available number of data points varies by exchange.
During the collection process, Blocktap takes periodic level 2 snapshots of all markets. The interim update stream between snapshots is archived as well.
This information is archived on a per-stream basis and can be replayed by our system.
Blocktap began collecting order book information starting in June of 2018.
The ability to replay order book data allows custom snapshots to be taken from a replay of archived order books.
Historical information is only available on a per-request basis.
Blocktap collects information from the top 20+ exchanges. These exchanges conver the majority of trading activty in the cryptocurrency space.
Refer to exchange details.
Blocktap attempts to collect information from all active markets for exchanges that are in the system. This includes Spot, Futures, and Options markets.
Refer to exchange details.
The earliest trade data is from August 2011. The availability of full historical exchange information is dependent on the exchange.
Refer to exchange details.
The earliest candle data is from August 2011. We only maintain historical candle data for markets that have historical trade data.
Refer to exchange details.
Blocktap does not currently have reference rates. Reference pricing data is in development and will be introduced in a future Blocktap release.
We process statistics for each Bitcoin block. We then perform time bucketed aggregations.
Blocktap collects a number of statistics for the Bitcoin Lightning Network. This information is available upon request.
Exchange | Markets | TradeStart Date | TradeEnd Date | TradeAccuracy | CandleMethod1 | CandleStart Date | CandleEnd Date | CandleAccuracy |
---|---|---|---|---|---|---|---|---|
Bibox | 331 | 03/2019 | 10/2021 | Unknown2 | 60s candles | 03/2019 | 08/2022 | Unknown |
Binance | 1303 | 07/2017 | 09/2021 | Unknown | Trades | 07/2017 | 09/2021 | Unknown |
Binance Futures Coin-M | 54 | 01/1970 | 01/1970 | Unknown | 60s candles | 01/1970 | 01/1970 | Unknown |
Binance Futures USDT-M | 111 | 01/1970 | 01/1970 | Unknown | 60s candles | 01/1970 | 01/1970 | Unknown |
Binance US | 163 | 09/2019 | 04/2023 | Unknown | Trades | 09/2019 | 04/2023 | Unknown |
Bitfinex | 508 | 01/2013 | 04/2023 | Unknown | Trades | 01/2013 | 04/2023 | Unknown |
bitFlyer | 17 | 07/2018 | 04/2023 | Unknown3 | Trades | 05/2018 | 04/2023 | Unknown3 |
BitMEX | 128 | 04/2019 | 04/2023 | Unknown | Trades | 04/2019 | 04/2023 | Unknown |
Bitstamp | 133 | 08/2011 | 11/2022 | 100.0% | Trades | 08/2011 | 11/2022 | 100.0% |
Bittrex | 716 | 05/2018 | 04/2023 | Unknown | 60s candles | 02/2018 | 04/2023 | Unknown |
CEX | 181 | 12/2013 | 04/2023 | Unknown | Trades | 12/2013 | 04/2023 | Unknown |
Coinbase Pro | 251 | 06/2018 | 04/2023 | Unknown | 60s candles | 12/2014 | 04/2023 | Unknown |
Coinex | 569 | 12/2018 | 04/2023 | Unknown | 60s candles | 12/2018 | 04/2023 | Unknown |
Deritbit | 27198 | 08/2018 | 06/2021 | Unknown | Trades | 08/2018 | 06/2021 | Unknown |
ErisX | 98 | 10/2020 | 04/2023 | Unknown | 60s candles | 10/2020 | 04/2023 | Unknown |
Gateio | 587 | 10/2017 | 04/2023 | Unknown | Trades | 10/2017 | 04/2023 | Unknown |
Gemini | 71 | 10/2015 | 04/2023 | 100.0% | Trades | 10/2015 | 04/2023 | 100.0% |
HitBTC | 1470 | 12/2013 | 09/2022 | Unknown | Trades | 12/2013 | 09/2022 | Unknown |
Huobi | 801 | 06/2018 | 09/2021 | Unknown | 60s candles | 05/2018 | 09/2021 | Unknown |
Huobi Swaps | 9 | 01/1970 | 01/1970 | Unknown | 60s candles | 01/1970 | 01/1970 | Unknown |
itBit | 6 | 08/2019 | 04/2022 | 100.0% | Trades | 08/2019 | 04/2023 | 100.0% |
Kraken | 370 | 09/2013 | 04/2023 | Unknown | Trades | 09/2013 | 04/2023 | Unknown |
OKEx | 17337 | 04/2018 | 03/2022 | Unknown | 60s candles | 07/2017 | 03/2022 | Unknown |
Poloniex | 324 | 01/2014 | 08/2022 | Unknown | Trades | 01/2014 | 08/2022 | Unknown |
Upbit | 429 | 03/2019 | 04/2023 | Unknown | 60s candles | 01/2019 | 04/2023 | Unknown |
ZB | 350 | 04/2018 | 04/2021 | Unknown | 60s candles | 04/2018 | 09/2021 | Unknown |