{
    "release": "v1.0",
    "created": "2026-08-23",
    "title": "The 2014-2015 six-venue series",
    "summary": "Six venues of BTC top-of-book and order book imbalance at two-second nominal cadence, 2014-11-02 to 2015-11-07. Three of the six no longer exist.",
    "license": "CC-BY-4.0",
    "citation": "bitcoinpricedata.com (2026). The 2014-2015 six-venue series, v1.0. https://bitcoinpricedata.com/data/v1.0/",
    "doi": null,
    "era": "hist2014",
    "source": {
        "artifact": "historical-2014.sqlite",
        "artifact_bytes": 1725480960,
        "artifact_sha256": "ee4b28b97398fd064793c0f27471976f5c2673d9662a2cf5e97709f3a20a2ad0",
        "dataset": "bitcoinpricedata.com historical series, six venues, 2014-2015",
        "release": "v1.0",
        "import_date": "2026-08-23",
        "generated_by": "bayesdata scripts/import-2014.php",
        "source_archive": "/mnt/storage/archive/machines/quen/work-2024/bayes-php-part.tar.gz",
        "source_canonical": "bayes/bayes-tickers-history.sql.gz (280391155 bytes compressed) inside /mnt/storage/archive/machines/quen/work-2024/bayes-php-part.tar.gz (935165660 bytes), 1518435047 bytes of decompressed SQL read by this import, the main series, imported first with a plain INSERT",
        "source_fragment": "bayes/db/bayes-wyvern.sql.gz (724697764 bytes compressed) inside /mnt/storage/archive/machines/quen/work-2024/bayes-php-part.tar.gz (935165660 bytes), 29868032 bytes of decompressed SQL read by this import, the earlier OKCoin fragment, imported second with INSERT OR IGNORE so the canonical dump wins every dateline the two share. The same dump holds ~182 M rows of k-means training artifacts (centroid, centroidpoint, timepoint, timeserie) which are not market data and were not imported.",
        "collector": "bayes-data5.php and siblings, archived at /mnt/storage/archive/machines/quen/projects/gpu-bayes-bitcoin-trading/",
        "cadence": "2 s nominal, drifting with fetch time (the 2014 loop guarded on $lasttimeupdate + 1 and slept 60 ms), so gaps and 3 s steps are normal and the row count is below the arithmetic maximum for the span",
        "time_column": "dateline, unix seconds UTC, PRIMARY KEY, one row per second per table at most",
        "price_unit": "last_trade, current_bid and current_ask are the quote currency per BTC. The source dumps store them as scaled int unsigned and the scale is NOT the same on every table: five collectors multiplied by 100 and stored cents (31910 = 319.10), BTC-e's multiplied by 1000 and stored thousandths (317890 = 317.89). The import divided each table by its own scale once, which is the only change made to any value, and the per-table divisor is recorded in the table.*.source_scale keys. At these magnitudes the division is exact in float64 back to the integer it came from. Note that docs/data-inventory.md as written on 2026-08-22 calls all six columns cents, which is right for five of them; the BTC-e scale was read off the archived collector (bayes-data.php, $ticker[\"last\"]*pow(10,3)) and confirmed against the other five venues at equal datelines.",
        "book_ratio_definition": "THE 2014 RATIO IS NOT THE MODERN ONE. It is (bid_volume - ask_volume) / (bid_volume + ask_volume) over the top 60 levels per side of whatever the venue returned, whatever price range those 60 levels happen to cover. The modern bayesdata series sums volume within +/-2% of the best price instead. The two measure the same idea through different windows and must not be treated as one series. See docs/data-inventory.md, \"Methodology, read from bayes-data5.php\".",
        "book_ratio_range": "-1 to 1, negative is ask-heavy, stored to five decimals (the source column was decimal(6,5))",
        "zeros_policy": "Zeros are kept, not nulled. The 2014 loop INSERTed even when the depth fetch failed and every column carried DEFAULT 0.00000, so a stored 0.0 ratio may be a failed fetch or a genuinely balanced book and nothing in the row tells them apart. Nulling them would manufacture data, so the per-table contamination ceilings are published beside the data instead (see the table.*.zero_ratio_pct keys, which are upper bounds).",
        "quote_currency_note": "bayesdata_btcchina and bayesdata_okcoin_cny quote in CNY, the other four in USD, under the same column names, because the quote currency is a property of the venue. Chinese venue volumes of this era carry a well documented wash-trading context; this series holds no volume column, but any cross-venue reading of the ratio should know it.",
        "defunct_venues": "Three of the six no longer exist: BTC-e was seized by the FBI in 2017, BTCChina closed in 2017, and OKCoin's CNY book died with the PBoC ban. The series is irreplaceable for that reason.",
        "license": "CC BY 4.0",
        "documentation": "bayesdata docs/data-inventory.md, \"The 2014-2015 historical series\", and docs/spec-bitcoinpricedata-com.md",
        "rows_total": "37907076",
        "tables": "bayesdata_bitfinex, bayesdata_bitstamp, bayesdata_btcchina, bayesdata_btce, bayesdata_okcoin, bayesdata_okcoin_cny",
        "anomaly.flash_crash_2015_01_14": "Every venue prints its series low in the minutes around 2015-01-14 07:42 UTC: Bitstamp 152.40 USD, BTCChina 919.90 CNY. That is the January 2015 flash crash, not a broken row, and the ratio between the two is the era's ~6.03 CNY/USD.",
        "anomaly.okcoin_cny_usd_prices": "Fifteen rows in bayesdata_okcoin_cny between 2015-06-11 08:10:54 and 08:16:47 UTC carry prices near 229, which is BTC in USD that day, not CNY. The okcoin.cn endpoint served the wrong book for about six minutes. The rows are kept as collected, for the same reason the zero ratios are."
    },
    "tables": [
        {
            "name": "bayesdata_bitfinex",
            "venue": "Bitfinex, api.bitfinex.com/v1 btcusd",
            "venue_id": "bitfinex",
            "quote": "USD",
            "rows": 10123356,
            "first_dateline": 1418847720,
            "last_dateline": 1446888567,
            "first_utc": "2014-12-17 20:22:00",
            "last_utc": "2015-11-07 09:29:27",
            "columns": [
                "dateline",
                "last_trade",
                "current_bid",
                "current_ask",
                "book_ratio"
            ],
            "note": "Top-of-book plus a book-imbalance ratio, 2 s nominal cadence drifting with fetch time. THE 2014 book_ratio IS NOT THE MODERN ONE: it is (bid_volume - ask_volume) / (bid_volume + ask_volume) over the top 60 levels per side of whatever the venue returned, not a fixed price band, and must not be joined to any other era. Zero ratios are kept as collected because a failed depth fetch and a balanced book are indistinguishable row by row. Placeholder contamination ceiling for this table: 0.45% of its rows carry a zero ratio, which is an upper bound because a genuinely balanced book stores zero too. Source scale: 100 (the source integer divided by this is the price, so two decimals of precision).",
            "files": [
                {
                    "name": "bayesdata_bitfinex.csv.gz",
                    "bytes": 72591413,
                    "sha256": "9883d1e66c87e6694144bea22ee8b5a09af70c5cf3e06884553d453e979665d5"
                },
                {
                    "name": "bayesdata_bitfinex.parquet",
                    "bytes": 60810266,
                    "sha256": "896515840ebe4164a387602e67a2fbf2f6347f6614da09b50561022dd081e066"
                }
            ]
        },
        {
            "name": "bayesdata_bitstamp",
            "venue": "Bitstamp, bitstamp.net/api btcusd",
            "venue_id": "bitstamp",
            "quote": "USD",
            "rows": 3390136,
            "first_dateline": 1418847720,
            "last_dateline": 1446888565,
            "first_utc": "2014-12-17 20:22:00",
            "last_utc": "2015-11-07 09:29:25",
            "columns": [
                "dateline",
                "last_trade",
                "current_bid",
                "current_ask",
                "book_ratio"
            ],
            "note": "Top-of-book plus a book-imbalance ratio, 2 s nominal cadence drifting with fetch time. THE 2014 book_ratio IS NOT THE MODERN ONE: it is (bid_volume - ask_volume) / (bid_volume + ask_volume) over the top 60 levels per side of whatever the venue returned, not a fixed price band, and must not be joined to any other era. Zero ratios are kept as collected because a failed depth fetch and a balanced book are indistinguishable row by row. Placeholder contamination ceiling for this table: 1.79% of its rows carry a zero ratio, which is an upper bound because a genuinely balanced book stores zero too. Source scale: 100 (the source integer divided by this is the price, so two decimals of precision).",
            "files": [
                {
                    "name": "bayesdata_bitstamp.csv.gz",
                    "bytes": 18742957,
                    "sha256": "0ecd5502a5f0f332869b0b9baebeee604202a769bb4bd4e284cfba82c899d0c1"
                },
                {
                    "name": "bayesdata_bitstamp.parquet",
                    "bytes": 20432817,
                    "sha256": "c07139e8b6127ae703b07f72f85ec67d5c5a55baabbec80d60782cbca69c165a"
                }
            ]
        },
        {
            "name": "bayesdata_btce",
            "venue": "BTC-e, btc-e.com/api/2 btc_usd (seized by the FBI in 2017)",
            "venue_id": "btce",
            "quote": "USD",
            "rows": 2244786,
            "first_dateline": 1418847720,
            "last_dateline": 1446888571,
            "first_utc": "2014-12-17 20:22:00",
            "last_utc": "2015-11-07 09:29:31",
            "columns": [
                "dateline",
                "last_trade",
                "current_bid",
                "current_ask",
                "book_ratio"
            ],
            "note": "Top-of-book plus a book-imbalance ratio, 2 s nominal cadence drifting with fetch time. THE 2014 book_ratio IS NOT THE MODERN ONE: it is (bid_volume - ask_volume) / (bid_volume + ask_volume) over the top 60 levels per side of whatever the venue returned, not a fixed price band, and must not be joined to any other era. Zero ratios are kept as collected because a failed depth fetch and a balanced book are indistinguishable row by row. Placeholder contamination ceiling for this table: 0.02% of its rows carry a zero ratio, which is an upper bound because a genuinely balanced book stores zero too. Source scale: 1000 (the source integer divided by this is the price, so three decimals of precision).",
            "files": [
                {
                    "name": "bayesdata_btce.csv.gz",
                    "bytes": 14472002,
                    "sha256": "d8a179ef62681372820166edb6f275115d3f8c8e8f6557bba749bd43ed4d8312"
                },
                {
                    "name": "bayesdata_btce.parquet",
                    "bytes": 17961882,
                    "sha256": "edd3df73255122801b632ba490e9e0b4b8ff42fb291486f8722bd3e021788f85"
                }
            ]
        },
        {
            "name": "bayesdata_okcoin",
            "venue": "OKCoin, okcoin.com/api USD book",
            "venue_id": "okcoin",
            "quote": "USD",
            "rows": 9185180,
            "first_dateline": 1414928941,
            "last_dateline": 1446888570,
            "first_utc": "2014-11-02 11:49:01",
            "last_utc": "2015-11-07 09:29:30",
            "columns": [
                "dateline",
                "last_trade",
                "current_bid",
                "current_ask",
                "book_ratio"
            ],
            "note": "Top-of-book plus a book-imbalance ratio, 2 s nominal cadence drifting with fetch time. THE 2014 book_ratio IS NOT THE MODERN ONE: it is (bid_volume - ask_volume) / (bid_volume + ask_volume) over the top 60 levels per side of whatever the venue returned, not a fixed price band, and must not be joined to any other era. Zero ratios are kept as collected because a failed depth fetch and a balanced book are indistinguishable row by row. Placeholder contamination ceiling for this table: 0.05% of its rows carry a zero ratio, which is an upper bound because a genuinely balanced book stores zero too. Source scale: 100 (the source integer divided by this is the price, so two decimals of precision). The canonical dump contributed 8468499 rows from 2014-12-17 20:22:00. The wyvern fragment then contributed 716681 rows read, of which 716681 were new and 0 were dropped as datelines the canonical dump already held, extending coverage back to 2014-11-02 11:49:01.",
            "files": [
                {
                    "name": "bayesdata_okcoin.csv.gz",
                    "bytes": 54125112,
                    "sha256": "6ac0b796ab28a54c9c42e7d79cca14243d107baecc6bdcbb2a2d3562e2b6736e"
                },
                {
                    "name": "bayesdata_okcoin.parquet",
                    "bytes": 47929082,
                    "sha256": "96bbdaa3c0c3ec69f8ddba658e7748876afadabc8dda137f748b02e927f77600"
                }
            ]
        },
        {
            "name": "bayesdata_btcchina",
            "venue": "BTCChina, data.btcchina.com btccny (closed in 2017)",
            "venue_id": "btcchina",
            "quote": "CNY",
            "rows": 10838969,
            "first_dateline": 1418847720,
            "last_dateline": 1446888568,
            "first_utc": "2014-12-17 20:22:00",
            "last_utc": "2015-11-07 09:29:28",
            "columns": [
                "dateline",
                "last_trade",
                "current_bid",
                "current_ask",
                "book_ratio"
            ],
            "note": "Top-of-book plus a book-imbalance ratio, 2 s nominal cadence drifting with fetch time. THE 2014 book_ratio IS NOT THE MODERN ONE: it is (bid_volume - ask_volume) / (bid_volume + ask_volume) over the top 60 levels per side of whatever the venue returned, not a fixed price band, and must not be joined to any other era. Zero ratios are kept as collected because a failed depth fetch and a balanced book are indistinguishable row by row. Placeholder contamination ceiling for this table: 0.03% of its rows carry a zero ratio, which is an upper bound because a genuinely balanced book stores zero too. Source scale: 100 (the source integer divided by this is the price, so two decimals of precision).",
            "files": [
                {
                    "name": "bayesdata_btcchina.csv.gz",
                    "bytes": 93954610,
                    "sha256": "f3179020a4789199aa276cb487f73da322d320026dc04891aef061b18f8a4d0d"
                },
                {
                    "name": "bayesdata_btcchina.parquet",
                    "bytes": 109704841,
                    "sha256": "9c3ba97f73d99f6f9a52ec272673724263bacee2e513de71344be6b75de1e63b"
                }
            ]
        },
        {
            "name": "bayesdata_okcoin_cny",
            "venue": "OKCoin CNY, okcoin.cn/api/v1 btc_cny (died with the PBoC ban)",
            "venue_id": "okcoin_cny",
            "quote": "CNY",
            "rows": 2124649,
            "first_dateline": 1419306693,
            "last_dateline": 1446888531,
            "first_utc": "2014-12-23 03:51:33",
            "last_utc": "2015-11-07 09:28:51",
            "columns": [
                "dateline",
                "last_trade",
                "current_bid",
                "current_ask",
                "book_ratio"
            ],
            "note": "Top-of-book plus a book-imbalance ratio, 2 s nominal cadence drifting with fetch time. THE 2014 book_ratio IS NOT THE MODERN ONE: it is (bid_volume - ask_volume) / (bid_volume + ask_volume) over the top 60 levels per side of whatever the venue returned, not a fixed price band, and must not be joined to any other era. Zero ratios are kept as collected because a failed depth fetch and a balanced book are indistinguishable row by row. Placeholder contamination ceiling for this table: 14.69% of its rows carry a zero ratio, which is an upper bound because a genuinely balanced book stores zero too. Source scale: 100 (the source integer divided by this is the price, so two decimals of precision).",
            "files": [
                {
                    "name": "bayesdata_okcoin_cny.csv.gz",
                    "bytes": 23424986,
                    "sha256": "cae7a72e1fa88c917523e7a55d9f30a70ad91861d884980acd35507576522f56"
                },
                {
                    "name": "bayesdata_okcoin_cny.parquet",
                    "bytes": 25803671,
                    "sha256": "530b35c9eae69cba6cbf04df1e2a1d85522f04a8642b567ef7a5161ec1e9d571"
                }
            ]
        }
    ]
}
