Skip to main content

Download Crypto Currency Data — hexagonal architecture, async-first.

Project description

dccd logo

Download Crypto-Currency Data — v3

Python versions PyPI CI License
Documentation Coverage


dccd downloads crypto-currency market data (OHLCV, trades, order book) from 7 exchanges via REST and WebSocket. Data is stored as Parquet files with nanosecond-precision timestamps.

Architecture (v3)

Hexagonal architecture — business logic is fully separated from interfaces:

Interfaces: CLI · HTTP API · Web UI · Python Client
                        ↓
          Application: backfill, stream, read, inventory
                        ↓
  Domain ← Sources (7 exchange adapters) ← Transport (httpx · WS · Paginator)
                        ↓
             Storage: ParquetStore + RunsStore (SQLite)
  • Async-first — httpx + websockets, one event loop; CLI via asyncio.run
  • Nanosecond timestamps — uniform int64 UTC throughout the store
  • Generic Paginator — no per-exchange chunking; Coinbase 300-limit is a capability declaration
  • NoCapability early — Bybit no spot trades history, Kraken OHLC recent-only → clear error
  • Four iso-functional interfaces — same operations everywhere (parity test enforces this)

Supported exchanges

You pick a data type (OHLC · trades · order book) and an operationbackfill (history) or stream (live):

Exchange Backfill (history) Stream (live)
Binance OHLC · trades · book OHLC · trades · book
Coinbase OHLC · book · trades (recent) trades
Kraken OHLC (720 recent) · trades · book OHLC · trades · book
Bybit OHLC · book OHLC · trades · book
OKX OHLC · trades · book OHLC · trades · book
Bitfinex OHLC · trades · book OHLC · trades
BitMEX OHLC (1m/5m/1h/1d) · trades · book OHLC · trades · book

Trades backfill is cursor-paginated (drains the full window, not just the first page). recent = no deep history via the public API (a deeper request is rejected/clamped early, never silently truncated); Bybit spot has no trade history. Order-book backfill is a single snapshot — use a stream to record the book over time. Stream channels are only listed where really implemented (undeclared ones raise NoCapability).

OHLC field fidelity

Not every exchange returns every OHLC field natively. Missing fields are stored as null (never fabricated):

Exchange quote_volume trades (count)
Binance ✅ native ✅ native
Bybit / OKX ✅ native — null
Kraken ✅ (vwap × volume, exact) ✅ native
Coinbase / Bitfinex / BitMEX — null — null

Installation

# Core — Python 3.11+
pip install dccd

# With scheduler, CLI, and web UI
pip install "dccd[daemon]"

# Development
pip install "dccd[dev]"

Quick start

Python API

import asyncio
from dccd import Client

async def main():
    async with Client() as c:
        result = await c.backfill("binance", "BTC/USDT", data_type="ohlc", span=3600)
        print(f"Wrote {result['rows_written']} rows")
        for ds in c.inventory():
            print(ds)

asyncio.run(main())

CLI

dccd validate --config config.yml      # validate config
dccd backfill --config config.yml      # run all backfill jobs
dccd backfill -e binance -s BTC/USDT --type ohlc --span 3600  # ad-hoc
dccd stream   --config config.yml      # run WebSocket stream jobs
dccd start    --config config.yml      # full daemon + UI
dccd ui       --config config.yml      # UI only (no scheduler)
dccd inventory --config config.yml     # list stored datasets
dccd status   --config config.yml      # show recent runs

Configuration (config.yml)

settings:
  data_path: ./data/crypto
  timezone: UTC
  ui_port: 8080

jobs:
  - exchange: binance
    pairs: [BTC/USDT, ETH/USDT]
    data_type: ohlc
    span: 3600
    trigger_kind: interval
    every: 3600

  - exchange: kraken
    pairs: [BTC/USD]
    data_type: trades
    operation: stream
    trigger_kind: supervised

storage:
  remotes:
    - provider: rclone
      remote: "mynas:crypto/"
  sync_interval: 3600

HTTP API (when dccd ui or dccd start is running)

GET  /api/operations          list registered operations
POST /api/backfill            start a backfill job
GET  /api/backfill/{run_id}   poll run status
GET  /api/streams             list stream jobs + state
POST /api/streams/start       start a stream job
POST /api/streams/stop        stop a stream job
POST /api/read                read stored data (≤1 000 rows)
GET  /api/events              SSE stream of progress/log/status events
GET  /api/inventory           list all datasets
GET  /health                  liveness check

Data layout

{data_path}/
  {exchange}/
    ohlc/{pair}/{span}/YYYY.parquet       # annual, ns timestamps
    trades/{pair}/YYYY-MM-DD.parquet      # daily
    orderbook/{pair}/YYYY-MM-DD.parquet   # daily
    .dccd/runs.db                         # SQLite job run history

All timestamps are nanoseconds UTC (int64).

Development

pip install -e ".[dev]"
pytest             # 141 tests
ruff check dccd/   # lint
mypy dccd/         # type check (strict on domain/)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dccd-3.3.1.tar.gz (149.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

dccd-3.3.1-py3-none-any.whl (165.1 kB view details)

Uploaded Python 3

File details

Details for the file dccd-3.3.1.tar.gz.

File metadata

  • Download URL: dccd-3.3.1.tar.gz
  • Upload date:
  • Size: 149.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for dccd-3.3.1.tar.gz
Algorithm Hash digest
SHA256 5031033d71a2029a986efa228fce0d27d592392b31501b6c854c6edf056390b8
MD5 1954d4232aac2d5c813ac38d721e8c87
BLAKE2b-256 583501db990aaec5cd6ea3c06eeb2037bcfa1c552a9b7cfefbd949490b227b17

See more details on using hashes here.

Provenance

The following attestation bundles were made for dccd-3.3.1.tar.gz:

Publisher: release.yml on ArthurBernard/Download_Crypto_Currencies_Data

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file dccd-3.3.1-py3-none-any.whl.

File metadata

  • Download URL: dccd-3.3.1-py3-none-any.whl
  • Upload date:
  • Size: 165.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for dccd-3.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 6ff2b0acfd1dd6e02e59dff291551a4e400c39737a5e561dbb5b24a717a86662
MD5 039019c447dcb713f5d67448e1de1701
BLAKE2b-256 60c338ee85daa2223beec69fb660a253390f10ad5cfa50596a7c653bb5b659d0

See more details on using hashes here.

Provenance

The following attestation bundles were made for dccd-3.3.1-py3-none-any.whl:

Publisher: release.yml on ArthurBernard/Download_Crypto_Currencies_Data

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page