ccxt / Architecture
ccxt 架构:统一接口如何收口 100+ 交易所
ccxt 的核心是「统一接口」:你在代码里只面对一套方法名,ccxt 内部把每个方法翻译成对应交易所的私有 REST API。理解这三层,就能看懂为什么换交易所几乎不用改业务代码。
exchange 实例ccxt.binance() / ccxt.okx() 等
统一方法fetchTicker / fetchOHLCV / createOrder
交易所适配器翻译成各交易所 REST API
Layers
三层结构
ccxt 把「统一接口」落实到三层,每一层解决一个不同的问题。
| 层 | 作用 | 示例 |
|---|---|---|
| exchange 实例 | 代表一个具体交易所,承载配置(API key / 代理) | exchange = ccxt.binance() |
| 统一方法 | 跨交易所一致的方法名与参数约定 | exchange.fetchOHLCV('BTC/USDT','1h') |
| 交易所适配器 | 把统一方法翻译成该交易所的 REST 调用并解析响应 | 各交易所专属实现文件 |
说明:ccxt 的「统一」指方法名和数据结构尽量一致,但不同交易所支持的交易对、精度、限频仍有差异,实际使用需查阅该交易所的接口覆盖情况。
Error handling
异常类型与限频处理
ccxt 把错误归类为若干异常类型,便于在代码里统一捕获与降级。
| 异常类型 | 含义 | 处理建议 |
|---|---|---|
| NetworkError | 网络/连接失败 | 重试并指数退避 |
| ExchangeError | 交易所返回的业务错误 | 检查参数与交易对 |
| RateLimitExceeded | 触发交易所限频 | 降频或开启 enableRateLimit |
| BadSymbol / BadRequest | 交易对或参数错误 | 核对符号与参数格式 |
说明:ccxt 提供
enableRateLimit 开关与 rateLimit 属性用于内置限频,具体异常类名以官方文档为准。Config
版本、代理与全局配置
生产使用时常需配置代理、限频与超时,这些通常在初始化 exchange 实例时传入。
import ccxt
exchange = ccxt.binance({
'enableRateLimit': True, # 开启内置限频
'proxies': { # 可选:HTTP/HTTPS/SOCKS5 代理
'http': 'http://127.0.0.1:7890',
'https': 'http://127.0.0.1:7890',
},
'timeout': 30000, # 毫秒
})
说明:代理(proxy/socks5)与限频是常见配置项,参数名以官方文档为准。
FAQ
常见问题
为什么换交易所几乎不用改代码?
因为业务代码调用的是统一方法(如 fetchOHLCV),只有实例化那一行(如 ccxt.binance() 换成 ccxt.okx())需要改,其余逻辑保持一致。
所有交易所的接口都一样吗?
不完全一样。ccxt 尽量统一方法名与返回结构,但不同交易所支持的交易对、精度、限频和部分参数仍不同,需要查文档确认。
ccxt 是托管平台吗?
不是。ccxt 是非托管(non-custodian)库,不持有用户资金,只负责调用交易所接口。