dcex - DEX & CEX trading library
English | 繁體中文
dcex is a Rust-backed exchange library with synchronous and asynchronous Python clients and a standalone Rust crate. It covers market data, account queries, order APIs, and public and private WebSocket streams.
Broker codes: dcex does not set or attach a broker code or broker tag by default. You can specify one explicitly when the exchange API supports it.
Forked from krex, a simplified version of the ccxt Python library.
Installation
Python:
pip install dcex
# or, in a uv-managed project:
uv add dcex
Rust:
cargo add dcex
Key features
- Synchronous and asynchronous Python HTTP clients, plus public and private WebSocket clients.
- HTTP, WebSocket, and signing APIs for direct use from Rust.
- A Product Table Manager (PTM) that normalizes exchange symbols and trading specifications.
- Support for multiple CEX and DEX platforms; available endpoints vary by exchange.
Documented withdrawal, market-maker and partner endpoints are in scope; current coverage and specification gaps are recorded in the endpoint ledger. API withdrawals have no second confirmation; they execute on submit. Trading API keys should not have withdrawal permission. PTM includes listed options from Binance, Bybit, and OKX; option trading remains exchange-specific.
Supported exchanges
| Exchange | HTTP Sync | HTTP Async | WS Public | WS Private |
|---|---|---|---|---|
| Binance | Yes | Yes | Yes | Yes |
| Bybit | Yes | Yes | Yes | Yes |
| OKX | Yes | Yes | Yes | Yes |
| Bitget | Yes | Yes | Yes | Yes |
| Kraken | Yes | Yes | Yes | Yes |
| MEXC | Yes | Yes | Yes | Yes |
| BingX | Yes | Yes | Yes | Yes |
| KuCoin | Yes | Yes | Yes | Yes |
| Hyperliquid | Yes | Yes | Yes | Yes |
| Lighter (Mainnet + Robinhood) | Yes | Yes | Yes | Yes |
| Backpack | Yes | Yes | Yes | Yes |
| Aster | Yes | Yes | Yes | Yes |
| Extended | Yes | Yes | Yes | Yes |
| Ondo | Yes | Yes | Yes | Yes |
| Arcus | Yes | Yes | Yes | Yes |
Private WebSocket support includes authenticated or address-scoped user-data streams. Trading WebSocket APIs are available for Binance, Bybit, Bitget, OKX, KuCoin and Kraken Spot; Hyperliquid and Lighter accept signed actions, and Arcus provides signed request construction. Lighter Mainnet and Robinhood use separate credential profiles; select the network per client (Mainnet is the default); see .env.example and the Lighter examples. Ondo spot currently supports only public market data (depth, trades, symbol_info, history and WS spot channels); Ondo has not published its spot trading API, so private operations such as placing or cancelling orders with a -SPOT symbol fail locally without sending a request.
Endpoint coverage, limitations and verification.
Python quick start
Synchronous HTTP:
import dcex
client = dcex.binance()
print(client.get_klines(product_symbol="BTC-USDT-SWAP", interval="1m"))
Asynchronous HTTP:
import asyncio
import dcex.async_support as dcex
async def main():
client = await dcex.binance()
try:
print(await client.get_klines(product_symbol="BTC-USDT-SWAP", interval="1m"))
finally:
await client.close()
asyncio.run(main())
Additional profiles cover Binance Alpha, Aster Prediction, KuCoin Classic/Pro and Kraken Spot V1. Bitget SBE returns raw binary frames for caller-side decoding.
Public WebSocket:
import asyncio
from dcex.ws import binance
async def main():
async with binance.public() as ws:
await ws.subscribe_agg_trades("BTC-USDT-SPOT")
print(await ws.recv())
asyncio.run(main())
Product Table Manager
PTM maps normalized product_symbol values, such as BTC-USDT-SWAP, to exchange-native exchange_symbol values and exposes trading metadata. Clients use this mapping where applicable.
| Fields | Meaning |
|---|---|
exchange, product_symbol, exchange_symbol |
Exchange and normalized/native symbols |
product_type, exchange_type |
Normalized and exchange-specific market types |
base_currency, quote_currency |
Product currencies |
price_precision, size_precision |
Price and size increments |
min_size, min_notional |
Minimum size and notional |
size_per_contract |
Contract multiplier |
from dcex.product_table.manager import ProductTableManager
table = ProductTableManager.get_instance("binance")
print(table.get_exchange_symbol("binance", "BTC-USDT-SWAP"))
print(table.get_product_symbol("binance", "BTCUSDT", product_type="swap"))
print(table.rows()[0])
More examples and development
Runnable examples are in Python sync, Python async and WebSocket, and Rust. They focus on public data or read-only account queries. Private HTTP examples require credentials; private stream examples require credentials or a user address.
uv run python examples/sync/binance_public.py
uv run python examples/async/binance_ws_public.py
cargo run -p dcex --example binance_ws_public
For direct Rust usage, see the crate README. The default test suite runs offline with uv run pytest; live suites are opt-in. See the contributing guide for development and testing details.
This project uses the MIT License; see the third-party notices for additional licenses.
Metadata
Release files for dcex 0.35.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| dcex-0.35.0.tar.gz | 1.8 MB | Details |
Built distributions (wheels)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| dcex-0.35.0-cp312-cp312-win_amd64.whl | CPython 3.12 | CPython 3.12 | Windows x86-64 | Details |
| dcex-0.35.0-cp312-cp312-manylinux_2_34_x86_64.whl | CPython 3.12 | CPython 3.12 | Linux glibc 2.34+ x86-64 | Details |
| dcex-0.35.0-cp312-cp312-macosx_11_0_arm64.whl | CPython 3.12 | CPython 3.12 | macOS 11.0+ ARM64 | Details |
Total release size: 47.6 MB
Release files / dcex-0.35.0.tar.gz
| Download URL | dcex-0.35.0.tar.gz |
|---|---|
| Size | 1.8 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e82efe4e8746c1f823595fd9ad0d8f9a1171e0a85b9619ac32e8defb02745d0b
|
|
BLAKE2b-256 checksum How to use checksums |
e2884209964564d9b690c714e8cb6b2bfa4f6307c95b9bf004fea195c894e42e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.21 {"installer":{"name":"uv","version":"0.12.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / dcex-0.35.0-cp312-cp312-win_amd64.whl
| Download URL | dcex-0.35.0-cp312-cp312-win_amd64.whl |
|---|---|
| Size | 16.3 MB |
| Tags | CPython 3.12 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
0cbb77b525ad58fc45c99b77e5ef8352aed185416a352904876a857dbdae3fe4
|
|
BLAKE2b-256 checksum How to use checksums |
539376266dea2f863546bee98d7c53bd395df03ff7db7cbb249bb56700274108
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.21 {"installer":{"name":"uv","version":"0.12.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / dcex-0.35.0-cp312-cp312-manylinux_2_34_x86_64.whl
| Download URL | dcex-0.35.0-cp312-cp312-manylinux_2_34_x86_64.whl |
|---|---|
| Size | 15.3 MB |
| Tags | CPython 3.12 Linux glibc 2.34+ x86-64 |
|
SHA-256 checksum How to use checksums |
62c26e7a922960f2e25576c0d90dce2b3354bf7a4b73e4acaed8781cf9580d64
|
|
BLAKE2b-256 checksum How to use checksums |
70f1faef2c05fb8e9ffdffa283e9c7f07c29b6464b8bdbb57ba06e761a35d032
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.21 {"installer":{"name":"uv","version":"0.12.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / dcex-0.35.0-cp312-cp312-macosx_11_0_arm64.whl
| Download URL | dcex-0.35.0-cp312-cp312-macosx_11_0_arm64.whl |
|---|---|
| Size | 14.3 MB |
| Tags | CPython 3.12 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
0140eadaac91100c072554226d64d9af61fb37ebdac420f788d993f72a157895
|
|
BLAKE2b-256 checksum How to use checksums |
8b7c5f4e8391196eafa77966fb240bb05553af9f765b56ea994744a1a8e713cf
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.21 {"installer":{"name":"uv","version":"0.12.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|