CCXT 中文教程:一套代码同时对接上百家加密货币交易所
2026-10-05发表于
框架与库一、CCXT 到底是什么,能帮你省掉什么麻烦
入门
假设你想写个程序,自动盯着币安和 OKX 上比特币的价格,哪边便宜就在哪边买。问题来了:每家交易所的接口地址、参数名、返回格式都不一样,光是读完它们的文档就要好几天。
CCXT 做的事情,就是给这些交易所套一层统一的外壳。你学会一套写法,就能操作一百多家交易所,切换时基本只改一个名字。
它目前支持 104 家交易所和预测市场,官方提供 Python、JavaScript/TypeScript、PHP、C#、Go、Java、Rust 八种语言的版本。
交易所接口(API)可以理解成"点餐窗口":你按格式报菜名,对方按格式递菜。CCXT 是那个帮你把所有窗口的菜单翻译成同一份的中间人。
二、装之前先确认两件事
入门
第一,你的语言版本要够新。 Python 需要 3.7 以上,JavaScript 需要 Node 7.6 以上。版本太老会装不上,因为库用到了新语法。
第二,想清楚你要"读数据"还是"真下单"。 只读行情不需要注册交易所账号;要下单则必须先在目标交易所注册、完成实名认证,并申请一对 API Key(相当于交易所发给程序的用户名和密码)。
安装本身只有一行命令:
pip install ccxt
用 JavaScript 的话换成:
npm install ccxt
三、跑通第一个例子:读取比特币实时价格
入门
下面这段代码会连上币安,打印出 BTC/USDT 这个交易对的最新行情。不需要任何账号,直接运行即可。
import ccxt
exchange = ccxt.binance() # 选一家交易所
ticker = exchange.fetch_ticker('BTC/USDT') # 问它 BTC/USDT 的行情
print(ticker['last']) # 最新成交价
print(ticker['high']) # 24 小时最高价
print(ticker['volume']) # 24 小时成交量
fetch_ticker 返回的是一个普通字典,字段名在所有交易所里都是同一套,这就是 CCXT 的核心价值。
四、核心概念:交易所对象、统一方法与隐式加载
进阶 · 推荐细读
交易所对象:ccxt.binance() 创建出来的东西,是你和这家交易所之间的唯一通道。所有操作都从它出发。
统一方法:CCXT 把常见操作归纳成固定几个动词,记住这些就够日常使用:
fetch_ticker拿单个交易对的最新行情fetch_ohlcv拿 K 线数据(开高低收加成交量)fetch_balance查账户余额create_order下单cancel_order撤单
隐式加载:你写 ccxt.binance() 时,CCXT 内部才去加载对应交易所的代码,而不是一上来把一百多家全读进内存。所以启动很快,但第一次调用某个交易所时会有一点点延迟。
统一数据结构:不同交易所返回的字段名千奇百怪,CCXT 全部翻译成同一套。比如"最新价"永远叫 last,不用去记某家叫 price、另一家叫 close。
五、进阶用法:下单、查余额与异常处理
进阶 · 推荐细读
要真正交易,得先填上 API Key。注意:密钥千万不要写死在代码里再传到公开仓库,建议放在环境变量或本地配置文件。
import ccxt, os
exchange = ccxt.binance({
'apiKey': os.environ['BINANCE_KEY'],
'secret': os.environ['BINANCE_SECRET'],
})
balance = exchange.fetch_balance()
print(balance['USDT']['free']) # 可用 USDT 余额
order = exchange.create_order(
symbol='BTC/USDT',
type='limit', # 限价单
side='buy', # 买入
amount=0.001, # 数量
price=30000, # 出价
)
print(order['id'])
网络请求随时可能失败,所以调用最好包一层异常处理。CCXT 把错误分成了几类,方便你分别应对:
try:
exchange.fetch_ticker('BTC/USDT')
except ccxt.NetworkError as e:
print('网络问题,稍后重试', e)
except ccxt.ExchangeError as e:
print('交易所拒绝了这次请求', e)
NetworkError 通常是超时或断网,重试往往有效;ExchangeError 是交易所明确拒绝,比如余额不足、参数不对,重试没用。

六、集成到现有项目时的注意点
深入 · 老手可选
限速是硬约束。 每家交易所都规定了每秒最多能请求几次,超了会被临时封禁。CCXT 内置了限速开关,默认开启,不要为了"跑快点"把它关掉。
exchange.enableRateLimit = True # 保持默认即可
不同交易所支持的品种不一样。 有的只有现货,有的还有合约、期权。调用前先用 exchange.has 查一下这家支持哪些方法,避免调用不存在的能力。
版本升级可能带来破坏性改动。 CCXT 迭代很快,升级前建议先看更新日志,并在测试环境验证一遍再上生产。
浏览器端用法不同。 如果要在网页里直接用,需要通过 CDN 引入打包好的脚本,而不是用 pip 或 npm 那套。
<script src="https://cdn.jsdelivr.net/npm/ccxt/dist/ccxt.browser.min.js"></script>
建议先用小额资金和测试网络跑通全流程,确认下单、撤单、查余额都正常,再考虑接入真实资金。
最后提醒一句:CCXT 只是把接口统一了,它不会替你判断该不该买。行情数据的解读、策略的盈亏,仍然是你自己的责任。
项目信息
| 项目 | 值 |
|---|---|
| 仓库 | ccxt/ccxt |
| 语言 | Python |
| Star | 44,253 |
| Fork | 8,875 |
| 主页 | https://docs.ccxt.com |
参考链接
延伸阅读
想继续探索?这些同领域的教程可能也适合你:
163
72
1
3401
文章目录
评论