Important: No default broker tags are set. You may manually specify a broker tag within function arguments if needed.
Forked from krex, a simplified version of the ccxt Python library.
Originally created and maintained by the same contributor, this fork continues active development, building upon the original foundation with enhanced design, unified DEX + CEX support, and fixes for previously unresolved issues.
A high-performance and lightweight Python library for interacting with cryptocurrency exchanges. dcex offers full synchronous and asynchronous support across major exchanges, designed for speed, modularity, and ease of use.
pip install dcexor use uv to manage the project:
uv add dceximport dcex
client = dcex.binance()
klines = client.get_klines(product_symbol="BTC-USDT-SWAP", interval="1m")
print(klines)import os
import asyncio
import dcex.async_support as dcex
from dotenv import load_dotenv
load_dotenv()
BINANCE_API_KEY = os.getenv("BINANCE_API_KEY")
BINANCE_API_SECRET = os.getenv("BINANCE_API_SECRET")
async def main():
client = await dcex.binance(
api_key=BINANCE_API_KEY,
api_secret=BINANCE_API_SECRET
)
try:
result = await client.get_income_history()
print(result)
finally:
await client.close()
if __name__ == "__main__":
asyncio.run(main())| Exchange | Sync Support | Async Support |
|---|---|---|
| Binance | ✅ | ✅ |
| Bybit | ✅ | ✅ |
| OKX | ✅ | ✅ |
| BitMart | ✅ | ✅ |
| BitMEX | ✅ | ✅ |
| Gate.io | ✅ | ✅ |
| Hyperliquid | ✅ | ✅ |
| BingX | Developing | Developing |
| KuCoin | Developing | Developing |
- 📘 Product Table Manager for unifying trading instruments in different exchanges
- 🔁 Sync & Async API clients with identical interfaces
- ⚡ Optimized for low-latency, high-frequency trading
Ptm is a utility that standardizes and unifies trading instrument metadata across different exchanges, making cross-exchange strategy development easier.
It is a table that contains the following columns:
| Column | Description |
|---|---|
| exchange | The exchange name |
| product_symbol | The symbol we use to identify the product, it will be the same in different exchanges. For example, BTC-USDT-SWAP is the same product in Binance and Bybit, which named BTCUSDT in Binance and BTC-USDT-SWAP in OKX. |
| exchange_symbol | The symbol that the exchange will actually used |
| product_type | The type we will use, e.g. spot, inverse, swap, futures |
| exchange_type | The type the exchange will actually used, e.g. linear, INVERSE, perp... different exchanges have different types, pretty annoying... |
| base_symbol | The base symbol, e.g. BTC |
| quote_symbol | The quote symbol, e.g. USDT |
| price_precision | The price precision, e.g. 0.000001 |
| size_precision | The size precision, e.g. 0.000001 |
| min_size | The minimum size, e.g. 0.000001 |
| min_notional | The minimum notional, e.g. 0.000001 |
| size_per_contract | The size per contract. Sometimes 1 contract is not the same as 1 unit in exchanges like OKX. |
In most cases, we have handled the case, but if you have any specific use cases, you can use the ptm to get the information you want.
from dcex.utils.common import Common
from dcex.product_table.manager import ProductTableManager
ptm = ProductTableManager.get_instance(Common.BINANCE)
product_symbol = ptm.get_product_symbol(
exchange=Common.BINANCE,
exchange_symbol="BTCUSDT",
product_type="swap",
)
print(product_symbol)We welcome contributions! Please see our Contributing Guide for details.
This project is licensed under the MIT License.
- Issues: Report bugs and request features on GitHub Issues.
- Discussions: Discuss ideas and share your thoughts on GitHub Discussions.
Cryptocurrency trading involves significant risk. This library is provided as-is without any warranty. Users are responsible for their own trading decisions and risk management.