What breaks when a market never closes?
Crypto lives on its own virtual exchange, CC, and bitcoin against the dollar is BTC-USD.CC.
Read that ticker carefully, because the punctuation is the first thing that will cost you time. FX is EURUSD.FOREX — concatenated, no separator. Crypto is BTC-USD.CC — hyphenated. Indices are bare: GSPC.INDX. Three namespaces in the same API, three different conventions, and a wrong guess returns a 404 that tells you nothing about which part you got wrong.
The universe, counted
On 2026-07-28, /exchange-symbol-list/CC returned 1,925 rows, nearly all of them carrying Type: "Currency" — the same value the FOREX rows carry. Re-checked three weeks later the list held 1,900 rows and the distinct Type set had grown to include FUND, so it is not even uniform within the exchange. Either way the conclusion is the same and now doubly earned: Type cannot distinguish a coin from a currency pair, and the only reliable discriminator is the Exchange field, or equivalently the suffix on the symbol.
Quote currencies are heavily concentrated: 1,910 of the 1,925 are quoted in USD, 6 in GBP, 2 in BTC and 1 in EUR. And six codes contain no hyphen at all — B3, DRV, SONIC, VVV, WEN, ZKSYNC. A symbol list is a database table maintained by people, not a guarantee, and any parser that splits on the hyphen needs a branch for the rows that do not have one.
One more discrepancy worth carrying: /exchange-details/CC reported 1,954 active tickers on the same day the symbol list returned 1,925 — a 29-row gap. FOREX and INDX agreed exactly that day and disagreed by three and by one when re-checked a few weeks later, so the agreement is a coincidence of timing rather than a property of those exchanges. When two endpoints count the same universe, expect them to differ, quote the one you actually iterate over, and say which one you used.
Three asset classes, three calendars
Now the part that breaks code. Over the identical window 2026-07-10 to 2026-07-27:
BTC-USD.CCreturned 18 rows — every calendar day, Saturdays and Sundays included, no gaps.EURGBP.FOREXreturns 15 rows, Sundays present, Saturdays absent. (EURUSD.FOREXdid the same when this was written on 2026-07-28; by 28 September 2026 it had gained its Saturdays and returns 18, the crypto count. The FX calendar is per pair.)- A US equity over the same window returns 12 — the twelve weekdays.
Eighteen days on the calendar, three different answers. Join those three series on date and six of the eighteen rows have holes — the three Saturdays, where only crypto printed, and the three Sundays, where crypto and FX printed and the equity did not. The twelve weekdays are complete, which is exactly why the problem is easy to miss. What you do about it — forward-fill, drop to the intersection, or align everything to one chosen calendar — changes every correlation, every beta and every rolling statistic you compute afterwards, and there is no default that is right for all three.
The annualisation trap
Here is the concrete version. Equity convention annualises a daily standard deviation by the square root of 252 trading days. Apply that to a crypto series and you have used the wrong count, because the series has 365 observations a year.
Take a daily standard deviation of 3%:
- On the equity convention: 3% × √252 = 3% × 15.8745 = 47.6%
- On a 365-day convention: 3% × √365 = 3% × 19.1050 = 57.3%
Same data, two answers, nearly ten percentage points apart — and only one of them matches the number of observations you actually have. The same problem appears anywhere a calendar is hard-coded: "previous trading day" as date minus one business day, "one month ago" as twenty-one rows back, holiday calendars, session-open logic. Every one of those assumptions is an equity assumption.
Volume is real here, and it is not a share count
Unlike FX, crypto rows carry a genuine volume. BTC-USD.CC on 2026-07-10 reported volume: 27450201269.
Twenty-seven billion. Notice what that number cannot be: there will only ever be twenty-one million bitcoin, so this is not a count of coins. It is a currency amount — a turnover figure aggregated across whatever venues the data provider tracks. Reasoning from a known supply cap to the meaning of a field is a small trick, and it is exactly how you should treat any unlabelled quantity.
The weekend shows up in it clearly. Saturday 2026-07-11 recorded 13.95 billion against Monday 2026-07-13's 37.65 billion — about 37% of Monday's activity. The market is open; the participants are not all present. Crypto Markets and Data covers why the weekend is the thinnest part of the crypto week; here it is simply visible in a column.
Go below the day and the column stops being dependable. /intraday/BTC-USD.CC at interval=1h returns 24 bars for every calendar day, each with a price, but on 22 September 2026 fourteen of the 24 came back with volume: null, in runs of several hours. Sum the hourly volumes and you get part of a day; weight anything by them and the null hours drop out without a word. The daily row for that date carries a volume; the hours under it do not add up to anything you can check it against.
Try it now
- Here is the same Friday-to-Monday range, 10 to 13 July 2026, for a crypto symbol, an FX pair and a US stock. Count the rows in each and name the missing days. Then write down, before you do anything else, which calendar your analysis will use.
- Crypto volume grouped by day of week,
BTC-USD.CCfrom 1 June to 31 August 2026, 13 or 14 of each weekday, computed on 28 September 2026:
| Weekday | Mean daily volume, USD billion |
|---|---|
| Monday | 32.52 |
| Tuesday | 31.31 |
| Wednesday | 32.31 |
| Thursday | 33.50 |
| Friday | 35.06 |
| Saturday | 17.93 |
| Sunday | 18.84 |
Express the weekend days as a fraction of the weekday average, and compare with the Saturday-to-Monday ratio quoted above. The pattern is a property of participation, not of the protocol. Here is a year of the same volume column, day by day:
- Here are three of the 24 hourly bars for 22 September 2026. One has a price and no volume. Decide what your loader stores for that hour, and what a volume-weighted average over the day does with it.