Contents Lesson 11 of 16

7 min read · practitioner

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.CC returned 18 rows — every calendar day, Saturdays and Sundays included, no gaps.
  • EURGBP.FOREX returns 15 rows, Sundays present, Saturdays absent. (EURUSD.FOREX did 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

  1. 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.
Live API response: mda2 btc dates 2026 07 10
Live API response: mda2 eurgbp dates 2026 07 10
Live API response: mda2 aapl dates 2026 07 10
2. A year of daily returns is too long for a page, so here is the one number you need, computed on 28 September 2026: `BTC-USD.CC` from 1 September 2025 to 31 August 2026 is 365 closes and 364 daily log returns, with a standard deviation of 2.32%. Annualise it twice, by √252 and by √365, and keep both numbers next to each other as a reminder. Then say which one matches the number of observations the series actually has in a year.
Interactive line chart: BTC-USD.CC (1Y)
  1. Crypto volume grouped by day of week, BTC-USD.CC from 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:

Interactive volume chart: BTC-USD.CC (1Y)
  1. 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.
Live API response: mda4 btc hourly volume gaps