ccxt-python
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseCCXT for Python
面向Python的CCXT库
A comprehensive guide to using CCXT in Python projects for cryptocurrency exchange integration.
一份关于在Python项目中使用CCXT对接加密货币交易所的全面指南。
Installation
安装
REST API (Standard)
REST API(标准型)
bash
pip install ccxtbash
pip install ccxtWebSocket API (Real-time, ccxt.pro)
WebSocket API(实时型,ccxt.pro)
bash
pip install ccxtbash
pip install ccxtOptional Performance Enhancements
可选性能增强
bash
pip install orjson # Faster JSON parsing
pip install coincurve # Faster ECDSA signing (45ms → 0.05ms)Both REST and WebSocket APIs are included in the same package.
bash
pip install orjson # 更快的JSON解析
pip install coincurve # 更快的ECDSA签名(从45ms优化至0.05ms)REST和WebSocket API都包含在同一个包中。
Quick Start
快速入门
REST API - Synchronous
REST API - 同步方式
python
import ccxt
exchange = ccxt.binance()
exchange.load_markets()
ticker = exchange.fetch_ticker('BTC/USDT')
print(ticker)python
import ccxt
exchange = ccxt.binance()
exchange.load_markets()
ticker = exchange.fetch_ticker('BTC/USDT')
print(ticker)REST API - Asynchronous
REST API - 异步方式
python
import asyncio
import ccxt.async_support as ccxt
async def main():
exchange = ccxt.binance()
await exchange.load_markets()
ticker = await exchange.fetch_ticker('BTC/USDT')
print(ticker)
await exchange.close() # Important!
asyncio.run(main())python
import asyncio
import ccxt.async_support as ccxt
async def main():
exchange = ccxt.binance()
await exchange.load_markets()
ticker = await exchange.fetch_ticker('BTC/USDT')
print(ticker)
await exchange.close() # 重要!使用后需关闭
asyncio.run(main())WebSocket API - Real-time Updates
WebSocket API - 实时更新
python
import asyncio
import ccxt.pro as ccxtpro
async def main():
exchange = ccxtpro.binance()
while True:
ticker = await exchange.watch_ticker('BTC/USDT')
print(ticker) # Live updates!
await exchange.close()
asyncio.run(main())python
import asyncio
import ccxt.pro as ccxtpro
async def main():
exchange = ccxtpro.binance()
while True:
ticker = await exchange.watch_ticker('BTC/USDT')
print(ticker) # 实时更新!
await exchange.close()
asyncio.run(main())REST vs WebSocket
REST与WebSocket对比
| Import | For REST | For WebSocket |
|---|---|---|
| Sync | | (WebSocket requires async) |
| Async | | |
| Feature | REST API | WebSocket API |
|---|---|---|
| Use for | One-time queries, placing orders | Real-time monitoring, live price feeds |
| Method prefix | | |
| Speed | Slower (HTTP request/response) | Faster (persistent connection) |
| Rate limits | Strict (1-2 req/sec) | More lenient (continuous stream) |
| Best for | Trading, account management | Price monitoring, arbitrage detection |
When to use REST:
- Placing orders
- Fetching account balance
- One-time data queries
- Order management (cancel, fetch orders)
When to use WebSocket:
- Real-time price monitoring
- Live orderbook updates
- Arbitrage detection
- Portfolio tracking with live updates
| 导入方式 | 用于REST | 用于WebSocket |
|---|---|---|
| 同步 | | (WebSocket需使用异步) |
| 异步 | | |
| 特性 | REST API | WebSocket API |
|---|---|---|
| 适用场景 | 一次性查询、下单 | 实时监控、实时价格推送 |
| 方法前缀 | | |
| 速度 | 较慢(HTTP请求/响应模式) | 较快(长连接模式) |
| 请求限制 | 严格(1-2次请求/秒) | 宽松(持续流推送) |
| 最佳用途 | 交易操作、账户管理 | 价格监控、套利检测 |
何时使用REST:
- 下单操作
- 获取账户余额
- 一次性数据查询
- 订单管理(取消、查询订单)
何时使用WebSocket:
- 实时价格监控
- 订单簿实时更新
- 套利机会检测
- 投资组合实时跟踪
Creating Exchange Instance
创建交易所实例
REST API - Synchronous
REST API - 同步方式
python
import ccxtpython
import ccxtPublic API (no authentication)
公开API(无需身份验证)
exchange = ccxt.binance({
'enableRateLimit': True # Recommended!
})
exchange = ccxt.binance({
'enableRateLimit': True # 推荐启用!
})
Private API (with authentication)
私有API(需身份验证)
exchange = ccxt.binance({
'apiKey': 'YOUR_API_KEY',
'secret': 'YOUR_SECRET',
'enableRateLimit': True
})
undefinedexchange = ccxt.binance({
'apiKey': 'YOUR_API_KEY',
'secret': 'YOUR_SECRET',
'enableRateLimit': True
})
undefinedREST API - Asynchronous
REST API - 异步方式
python
import ccxt.async_support as ccxt
exchange = ccxt.binance({
'apiKey': 'YOUR_API_KEY',
'secret': 'YOUR_SECRET',
'enableRateLimit': True
})python
import ccxt.async_support as ccxt
exchange = ccxt.binance({
'apiKey': 'YOUR_API_KEY',
'secret': 'YOUR_SECRET',
'enableRateLimit': True
})Always close when done
使用后务必关闭
await exchange.close()
undefinedawait exchange.close()
undefinedWebSocket API
WebSocket API
python
import ccxt.pro as ccxtpropython
import ccxt.pro as ccxtproPublic WebSocket
公开WebSocket
exchange = ccxtpro.binance()
exchange = ccxtpro.binance()
Private WebSocket (with authentication)
私有WebSocket(需身份验证)
exchange = ccxtpro.binance({
'apiKey': 'YOUR_API_KEY',
'secret': 'YOUR_SECRET'
})
exchange = ccxtpro.binance({
'apiKey': 'YOUR_API_KEY',
'secret': 'YOUR_SECRET'
})
Always close when done
使用后务必关闭
await exchange.close()
undefinedawait exchange.close()
undefinedCommon REST Operations
常见REST操作
Loading Markets
加载市场信息
python
undefinedpython
undefinedLoad all available trading pairs
加载所有可用交易对
exchange.load_markets()
exchange.load_markets()
Access market information
访问市场详情
btc_market = exchange.market('BTC/USDT')
print(btc_market['limits']['amount']['min']) # Minimum order amount
undefinedbtc_market = exchange.market('BTC/USDT')
print(btc_market['limits']['amount']['min']) # 最小下单量
undefinedFetching Ticker
获取行情数据
python
undefinedpython
undefinedSingle ticker
单个交易对行情
ticker = exchange.fetch_ticker('BTC/USDT')
print(ticker['last']) # Last price
print(ticker['bid']) # Best bid
print(ticker['ask']) # Best ask
print(ticker['volume']) # 24h volume
ticker = exchange.fetch_ticker('BTC/USDT')
print(ticker['last']) # 最新成交价
print(ticker['bid']) # 最优买价
print(ticker['ask']) # 最优卖价
print(ticker['volume']) # 24小时成交量
Multiple tickers (if supported)
多个交易对行情(若交易所支持)
tickers = exchange.fetch_tickers(['BTC/USDT', 'ETH/USDT'])
undefinedtickers = exchange.fetch_tickers(['BTC/USDT', 'ETH/USDT'])
undefinedFetching Order Book
获取订单簿
python
undefinedpython
undefinedFull orderbook
完整订单簿
orderbook = exchange.fetch_order_book('BTC/USDT')
print(orderbook['bids'][0]) # [price, amount]
print(orderbook['asks'][0]) # [price, amount]
orderbook = exchange.fetch_order_book('BTC/USDT')
print(orderbook['bids'][0]) # [价格, 数量]
print(orderbook['asks'][0]) # [价格, 数量]
Limited depth
限定深度的订单簿
orderbook = exchange.fetch_order_book('BTC/USDT', 5) # Top 5 levels
undefinedorderbook = exchange.fetch_order_book('BTC/USDT', 5) # 前5档深度
undefinedCreating Orders
创建订单
Limit Order
限价单
python
undefinedpython
undefinedBuy limit order
买入限价单
order = exchange.create_limit_buy_order('BTC/USDT', 0.01, 50000)
print(order['id'])
order = exchange.create_limit_buy_order('BTC/USDT', 0.01, 50000)
print(order['id'])
Sell limit order
卖出限价单
order = exchange.create_limit_sell_order('BTC/USDT', 0.01, 60000)
order = exchange.create_limit_sell_order('BTC/USDT', 0.01, 60000)
Generic limit order
通用限价单
order = exchange.create_order('BTC/USDT', 'limit', 'buy', 0.01, 50000)
undefinedorder = exchange.create_order('BTC/USDT', 'limit', 'buy', 0.01, 50000)
undefinedMarket Order
市价单
python
undefinedpython
undefinedBuy market order
买入市价单
order = exchange.create_market_buy_order('BTC/USDT', 0.01)
order = exchange.create_market_buy_order('BTC/USDT', 0.01)
Sell market order
卖出市价单
order = exchange.create_market_sell_order('BTC/USDT', 0.01)
order = exchange.create_market_sell_order('BTC/USDT', 0.01)
Generic market order
通用市价单
order = exchange.create_order('BTC/USDT', 'market', 'sell', 0.01)
undefinedorder = exchange.create_order('BTC/USDT', 'market', 'sell', 0.01)
undefinedFetching Balance
获取账户余额
python
balance = exchange.fetch_balance()
print(balance['BTC']['free']) # Available balance
print(balance['BTC']['used']) # Balance in orders
print(balance['BTC']['total']) # Total balancepython
balance = exchange.fetch_balance()
print(balance['BTC']['free']) # 可用余额
print(balance['BTC']['used']) # 订单占用余额
print(balance['BTC']['total']) # 总余额Fetching Orders
查询订单
python
undefinedpython
undefinedOpen orders
未成交订单
open_orders = exchange.fetch_open_orders('BTC/USDT')
open_orders = exchange.fetch_open_orders('BTC/USDT')
Closed orders
已成交订单
closed_orders = exchange.fetch_closed_orders('BTC/USDT')
closed_orders = exchange.fetch_closed_orders('BTC/USDT')
All orders (open + closed)
所有订单(未成交+已成交)
all_orders = exchange.fetch_orders('BTC/USDT')
all_orders = exchange.fetch_orders('BTC/USDT')
Single order by ID
通过ID查询单个订单
order = exchange.fetch_order(order_id, 'BTC/USDT')
undefinedorder = exchange.fetch_order(order_id, 'BTC/USDT')
undefinedFetching Trades
查询交易记录
python
undefinedpython
undefinedRecent public trades
近期公开交易记录
trades = exchange.fetch_trades('BTC/USDT', limit=10)
trades = exchange.fetch_trades('BTC/USDT', limit=10)
Your trades (requires authentication)
个人交易记录(需身份验证)
my_trades = exchange.fetch_my_trades('BTC/USDT')
undefinedmy_trades = exchange.fetch_my_trades('BTC/USDT')
undefinedCanceling Orders
取消订单
python
undefinedpython
undefinedCancel single order
取消单个订单
exchange.cancel_order(order_id, 'BTC/USDT')
exchange.cancel_order(order_id, 'BTC/USDT')
Cancel all orders for a symbol
取消某交易对的所有订单
exchange.cancel_all_orders('BTC/USDT')
undefinedexchange.cancel_all_orders('BTC/USDT')
undefinedWebSocket Operations (Real-time)
WebSocket实时操作
Watching Ticker (Live Price Updates)
监控行情(实时价格更新)
python
import asyncio
import ccxt.pro as ccxtpro
async def main():
exchange = ccxtpro.binance()
while True:
ticker = await exchange.watch_ticker('BTC/USDT')
print(ticker['last'], ticker['timestamp'])
await exchange.close()
asyncio.run(main())python
import asyncio
import ccxt.pro as ccxtpro
async def main():
exchange = ccxtpro.binance()
while True:
ticker = await exchange.watch_ticker('BTC/USDT')
print(ticker['last'], ticker['timestamp'])
await exchange.close()
asyncio.run(main())Watching Order Book (Live Depth Updates)
监控订单簿(实时深度更新)
python
async def main():
exchange = ccxtpro.binance()
while True:
orderbook = await exchange.watch_order_book('BTC/USDT')
print('Best bid:', orderbook['bids'][0])
print('Best ask:', orderbook['asks'][0])
await exchange.close()
asyncio.run(main())python
async def main():
exchange = ccxtpro.binance()
while True:
orderbook = await exchange.watch_order_book('BTC/USDT')
print('最优买价:', orderbook['bids'][0])
print('最优卖价:', orderbook['asks'][0])
await exchange.close()
asyncio.run(main())Watching Trades (Live Trade Stream)
监控交易记录(实时交易流)
python
async def main():
exchange = ccxtpro.binance()
while True:
trades = await exchange.watch_trades('BTC/USDT')
for trade in trades:
print(trade['price'], trade['amount'], trade['side'])
await exchange.close()
asyncio.run(main())python
async def main():
exchange = ccxtpro.binance()
while True:
trades = await exchange.watch_trades('BTC/USDT')
for trade in trades:
print(trade['price'], trade['amount'], trade['side'])
await exchange.close()
asyncio.run(main())Watching Your Orders (Live Order Updates)
监控个人订单(实时订单更新)
python
async def main():
exchange = ccxtpro.binance({
'apiKey': 'YOUR_API_KEY',
'secret': 'YOUR_SECRET'
})
while True:
orders = await exchange.watch_orders('BTC/USDT')
for order in orders:
print(order['id'], order['status'], order['filled'])
await exchange.close()
asyncio.run(main())python
async def main():
exchange = ccxtpro.binance({
'apiKey': 'YOUR_API_KEY',
'secret': 'YOUR_SECRET'
})
while True:
orders = await exchange.watch_orders('BTC/USDT')
for order in orders:
print(order['id'], order['status'], order['filled'])
await exchange.close()
asyncio.run(main())Watching Balance (Live Balance Updates)
监控账户余额(实时余额更新)
python
async def main():
exchange = ccxtpro.binance({
'apiKey': 'YOUR_API_KEY',
'secret': 'YOUR_SECRET'
})
while True:
balance = await exchange.watch_balance()
print('BTC:', balance['BTC'])
print('USDT:', balance['USDT'])
await exchange.close()
asyncio.run(main())python
async def main():
exchange = ccxtpro.binance({
'apiKey': 'YOUR_API_KEY',
'secret': 'YOUR_SECRET'
})
while True:
balance = await exchange.watch_balance()
print('BTC:', balance['BTC'])
print('USDT:', balance['USDT'])
await exchange.close()
asyncio.run(main())Watching Multiple Symbols
监控多个交易对
python
async def main():
exchange = ccxtpro.binance()
symbols = ['BTC/USDT', 'ETH/USDT', 'SOL/USDT']
while True:
# Watch all symbols concurrently
tickers = await exchange.watch_tickers(symbols)
for symbol, ticker in tickers.items():
print(symbol, ticker['last'])
await exchange.close()
asyncio.run(main())python
async def main():
exchange = ccxtpro.binance()
symbols = ['BTC/USDT', 'ETH/USDT', 'SOL/USDT']
while True:
# 并发监控所有交易对
tickers = await exchange.watch_tickers(symbols)
for symbol, ticker in tickers.items():
print(symbol, ticker['last'])
await exchange.close()
asyncio.run(main())Complete Method Reference
完整方法参考
Market Data Methods
市场数据方法
Tickers & Prices
行情与价格
- - Fetch ticker for one symbol
fetchTicker(symbol) - - Fetch multiple tickers at once
fetchTickers([symbols]) - - Fetch best bid/ask for multiple symbols
fetchBidsAsks([symbols]) - - Fetch last prices
fetchLastPrices([symbols]) - - Fetch mark prices (derivatives)
fetchMarkPrices([symbols])
- - 获取单个交易对行情
fetchTicker(symbol) - - 批量获取多个交易对行情
fetchTickers([symbols]) - - 获取多个交易对的最优买卖价
fetchBidsAsks([symbols]) - - 获取多个交易对的最新成交价
fetchLastPrices([symbols]) - - 获取标记价格(衍生品)
fetchMarkPrices([symbols])
Order Books
订单簿
- - Fetch order book
fetchOrderBook(symbol, limit) - - Fetch multiple order books
fetchOrderBooks([symbols]) - - Fetch level 2 order book
fetchL2OrderBook(symbol) - - Fetch level 3 order book (if supported)
fetchL3OrderBook(symbol)
- - 获取订单簿
fetchOrderBook(symbol, limit) - - 批量获取多个订单簿
fetchOrderBooks([symbols]) - - 获取Level 2订单簿
fetchL2OrderBook(symbol) - - 获取Level 3订单簿(若交易所支持)
fetchL3OrderBook(symbol)
Trades
交易记录
- - Fetch public trades
fetchTrades(symbol, since, limit) - - Fetch your trades (auth required)
fetchMyTrades(symbol, since, limit) - - Fetch trades for specific order
fetchOrderTrades(orderId, symbol)
- - 获取公开交易记录
fetchTrades(symbol, since, limit) - - 获取个人交易记录(需身份验证)
fetchMyTrades(symbol, since, limit) - - 获取指定订单的交易明细
fetchOrderTrades(orderId, symbol)
OHLCV (Candlesticks)
K线数据(蜡烛图)
- - Fetch candlestick data
fetchOHLCV(symbol, timeframe, since, limit) - - Fetch index price OHLCV
fetchIndexOHLCV(symbol, timeframe) - - Fetch mark price OHLCV
fetchMarkOHLCV(symbol, timeframe) - - Fetch premium index OHLCV
fetchPremiumIndexOHLCV(symbol, timeframe)
- - 获取K线数据
fetchOHLCV(symbol, timeframe, since, limit) - - 获取指数价格K线
fetchIndexOHLCV(symbol, timeframe) - - 获取标记价格K线
fetchMarkOHLCV(symbol, timeframe) - - 获取溢价指数K线
fetchPremiumIndexOHLCV(symbol, timeframe)
Account & Balance
账户与余额
- - Fetch account balance (auth required)
fetchBalance() - - Fetch sub-accounts
fetchAccounts() - - Fetch ledger history
fetchLedger(code, since, limit) - - Fetch specific ledger entry
fetchLedgerEntry(id, code) - - Fetch transactions
fetchTransactions(code, since, limit) - - Fetch deposit history
fetchDeposits(code, since, limit) - - Fetch withdrawal history
fetchWithdrawals(code, since, limit) - - Fetch both deposits and withdrawals
fetchDepositsWithdrawals(code, since, limit)
- - 获取账户余额(需身份验证)
fetchBalance() - - 获取子账户信息
fetchAccounts() - - 获取账户流水
fetchLedger(code, since, limit) - - 获取指定流水记录
fetchLedgerEntry(id, code) - - 获取交易记录
fetchTransactions(code, since, limit) - - 获取充值记录
fetchDeposits(code, since, limit) - - 获取提现记录
fetchWithdrawals(code, since, limit) - - 同时获取充值和提现记录
fetchDepositsWithdrawals(code, since, limit)
Trading Methods
交易方法
Creating Orders
创建订单
- - Create order (generic)
createOrder(symbol, type, side, amount, price, params) - - Create limit order
createLimitOrder(symbol, side, amount, price) - - Create market order
createMarketOrder(symbol, side, amount) - - Buy limit order
createLimitBuyOrder(symbol, amount, price) - - Sell limit order
createLimitSellOrder(symbol, amount, price) - - Buy market order
createMarketBuyOrder(symbol, amount) - - Sell market order
createMarketSellOrder(symbol, amount) - - Buy with specific cost
createMarketBuyOrderWithCost(symbol, cost) - - Stop-limit order
createStopLimitOrder(symbol, side, amount, price, stopPrice) - - Stop-market order
createStopMarketOrder(symbol, side, amount, stopPrice) - - Stop-loss order
createStopLossOrder(symbol, side, amount, stopPrice) - - Take-profit order
createTakeProfitOrder(symbol, side, amount, takeProfitPrice) - - Trailing stop
createTrailingAmountOrder(symbol, side, amount, trailingAmount) - - Trailing stop %
createTrailingPercentOrder(symbol, side, amount, trailingPercent) - - Trigger order
createTriggerOrder(symbol, side, amount, triggerPrice) - - Post-only order
createPostOnlyOrder(symbol, side, amount, price) - - Reduce-only order
createReduceOnlyOrder(symbol, side, amount, price) - - Create multiple orders at once
createOrders([orders]) - - OCO order
createOrderWithTakeProfitAndStopLoss(symbol, type, side, amount, price, tpPrice, slPrice)
- - 通用创建订单方法
createOrder(symbol, type, side, amount, price, params) - - 创建限价单
createLimitOrder(symbol, side, amount, price) - - 创建市价单
createMarketOrder(symbol, side, amount) - - 创建买入限价单
createLimitBuyOrder(symbol, amount, price) - - 创建卖出限价单
createLimitSellOrder(symbol, amount, price) - - 创建买入市价单
createMarketBuyOrder(symbol, amount) - - 创建卖出市价单
createMarketSellOrder(symbol, amount) - - 按指定金额买入
createMarketBuyOrderWithCost(symbol, cost) - - 创建止损限价单
createStopLimitOrder(symbol, side, amount, price, stopPrice) - - 创建止损市价单
createStopMarketOrder(symbol, side, amount, stopPrice) - - 创建止损单
createStopLossOrder(symbol, side, amount, stopPrice) - - 创建止盈单
createTakeProfitOrder(symbol, side, amount, takeProfitPrice) - - 创建追踪止损单(固定金额)
createTrailingAmountOrder(symbol, side, amount, trailingAmount) - - 创建追踪止损单(百分比)
createTrailingPercentOrder(symbol, side, amount, trailingPercent) - - 创建触发单
createTriggerOrder(symbol, side, amount, triggerPrice) - - 创建只做市单
createPostOnlyOrder(symbol, side, amount, price) - - 创建只减仓单
createReduceOnlyOrder(symbol, side, amount, price) - - 批量创建订单
createOrders([orders]) - - 创建OCO订单(止盈止损单)
createOrderWithTakeProfitAndStopLoss(symbol, type, side, amount, price, tpPrice, slPrice)
Managing Orders
订单管理
- - Fetch single order
fetchOrder(orderId, symbol) - - Fetch all orders
fetchOrders(symbol, since, limit) - - Fetch open orders
fetchOpenOrders(symbol, since, limit) - - Fetch closed orders
fetchClosedOrders(symbol, since, limit) - - Fetch canceled orders
fetchCanceledOrders(symbol, since, limit) - - Fetch specific open order
fetchOpenOrder(orderId, symbol) - - Fetch orders by status
fetchOrdersByStatus(status, symbol) - - Cancel single order
cancelOrder(orderId, symbol) - - Cancel multiple orders
cancelOrders([orderIds], symbol) - - Cancel all orders for symbol
cancelAllOrders(symbol) - - Modify order
editOrder(orderId, symbol, type, side, amount, price)
- - 查询单个订单
fetchOrder(orderId, symbol) - - 查询所有订单
fetchOrders(symbol, since, limit) - - 查询未成交订单
fetchOpenOrders(symbol, since, limit) - - 查询已成交订单
fetchClosedOrders(symbol, since, limit) - - 查询已取消订单
fetchCanceledOrders(symbol, since, limit) - - 查询单个未成交订单
fetchOpenOrder(orderId, symbol) - - 按状态查询订单
fetchOrdersByStatus(status, symbol) - - 取消单个订单
cancelOrder(orderId, symbol) - - 批量取消订单
cancelOrders([orderIds], symbol) - - 取消某交易对的所有订单
cancelAllOrders(symbol) - - 修改订单
editOrder(orderId, symbol, type, side, amount, price)
Margin & Leverage
保证金与杠杆
- - Fetch borrow rate for margin
fetchBorrowRate(code) - - Fetch multiple borrow rates
fetchBorrowRates([codes]) - - Historical borrow rates
fetchBorrowRateHistory(code, since, limit) - - Cross margin borrow rate
fetchCrossBorrowRate(code) - - Isolated margin borrow rate
fetchIsolatedBorrowRate(symbol, code) - - Borrow margin
borrowMargin(code, amount, symbol) - - Repay margin
repayMargin(code, amount, symbol) - - Fetch leverage
fetchLeverage(symbol) - - Set leverage
setLeverage(leverage, symbol) - - Fetch leverage tiers
fetchLeverageTiers(symbols) - - Leverage tiers for market
fetchMarketLeverageTiers(symbol) - - Set margin mode (cross/isolated)
setMarginMode(marginMode, symbol) - - Fetch margin mode
fetchMarginMode(symbol)
- - 获取保证金借贷利率
fetchBorrowRate(code) - - 批量获取多个币种的借贷利率
fetchBorrowRates([codes]) - - 获取借贷利率历史数据
fetchBorrowRateHistory(code, since, limit) - - 获取全仓保证金借贷利率
fetchCrossBorrowRate(code) - - 获取逐仓保证金借贷利率
fetchIsolatedBorrowRate(symbol, code) - - 借贷保证金
borrowMargin(code, amount, symbol) - - 归还保证金
repayMargin(code, amount, symbol) - - 获取杠杆倍数
fetchLeverage(symbol) - - 设置杠杆倍数
setLeverage(leverage, symbol) - - 获取杠杆 tiers 信息
fetchLeverageTiers(symbols) - - 获取指定交易对的杠杆 tiers 信息
fetchMarketLeverageTiers(symbol) - - 设置保证金模式(全仓/逐仓)
setMarginMode(marginMode, symbol) - - 查询保证金模式
fetchMarginMode(symbol)
Derivatives & Futures
衍生品与期货
Positions
仓位管理
- - Fetch single position
fetchPosition(symbol) - - Fetch all positions
fetchPositions([symbols]) - - Fetch positions for symbol
fetchPositionsForSymbol(symbol) - - Position history
fetchPositionHistory(symbol, since, limit) - - Multiple position history
fetchPositionsHistory(symbols, since, limit) - - Fetch position mode (one-way/hedge)
fetchPositionMode(symbol) - - Set position mode
setPositionMode(hedged, symbol) - - Close position
closePosition(symbol, side) - - Close all positions
closeAllPositions()
- - 获取单个仓位
fetchPosition(symbol) - - 获取所有仓位
fetchPositions([symbols]) - - 获取指定交易对的仓位
fetchPositionsForSymbol(symbol) - - 获取仓位历史记录
fetchPositionHistory(symbol, since, limit) - - 批量获取仓位历史记录
fetchPositionsHistory(symbols, since, limit) - - 查询仓位模式(单向/双向)
fetchPositionMode(symbol) - - 设置仓位模式
setPositionMode(hedged, symbol) - - 平仓
closePosition(symbol, side) - - 全部平仓
closeAllPositions()
Funding & Settlement
资金费用与结算
- - Current funding rate
fetchFundingRate(symbol) - - Multiple funding rates
fetchFundingRates([symbols]) - - Funding rate history
fetchFundingRateHistory(symbol, since, limit) - - Your funding payments
fetchFundingHistory(symbol, since, limit) - - Funding interval
fetchFundingInterval(symbol) - - Settlement history
fetchSettlementHistory(symbol, since, limit) - - Your settlement history
fetchMySettlementHistory(symbol, since, limit)
- - 获取当前资金费率
fetchFundingRate(symbol) - - 批量获取多个交易对的资金费率
fetchFundingRates([symbols]) - - 获取资金费率历史数据
fetchFundingRateHistory(symbol, since, limit) - - 获取个人资金费用记录
fetchFundingHistory(symbol, since, limit) - - 获取资金费用结算间隔
fetchFundingInterval(symbol) - - 获取结算历史记录
fetchSettlementHistory(symbol, since, limit) - - 获取个人结算历史记录
fetchMySettlementHistory(symbol, since, limit)
Open Interest & Liquidations
持仓量与强平记录
- - Open interest for symbol
fetchOpenInterest(symbol) - - Multiple open interests
fetchOpenInterests([symbols]) - - OI history
fetchOpenInterestHistory(symbol, timeframe, since, limit) - - Public liquidations
fetchLiquidations(symbol, since, limit) - - Your liquidations
fetchMyLiquidations(symbol, since, limit)
- - 获取持仓量
fetchOpenInterest(symbol) - - 批量获取多个交易对的持仓量
fetchOpenInterests([symbols]) - - 获取持仓量历史数据
fetchOpenInterestHistory(symbol, timeframe, since, limit) - - 获取公开强平记录
fetchLiquidations(symbol, since, limit) - - 获取个人强平记录
fetchMyLiquidations(symbol, since, limit)
Options
期权
- - Fetch option info
fetchOption(symbol) - - Fetch option chain
fetchOptionChain(code) - - Fetch option greeks
fetchGreeks(symbol) - - Volatility history
fetchVolatilityHistory(code, since, limit) - - Fetch underlying assets
fetchUnderlyingAssets()
- - 获取期权信息
fetchOption(symbol) - - 获取期权链
fetchOptionChain(code) - - 获取期权希腊值
fetchGreeks(symbol) - - 获取波动率历史数据
fetchVolatilityHistory(code, since, limit) - - 获取标的资产信息
fetchUnderlyingAssets()
Fees & Limits
手续费与限制
- - Trading fee for symbol
fetchTradingFee(symbol) - - Trading fees for multiple symbols
fetchTradingFees([symbols]) - - Trading limits
fetchTradingLimits([symbols]) - - Transaction/withdrawal fee
fetchTransactionFee(code) - - Multiple transaction fees
fetchTransactionFees([codes]) - - Deposit/withdrawal fee
fetchDepositWithdrawFee(code) - - Multiple deposit/withdraw fees
fetchDepositWithdrawFees([codes])
- - 获取交易手续费
fetchTradingFee(symbol) - - 批量获取多个交易对的手续费
fetchTradingFees([symbols]) - - 获取交易限制
fetchTradingLimits([symbols]) - - 获取转账/提现手续费
fetchTransactionFee(code) - - 批量获取多个币种的转账/提现手续费
fetchTransactionFees([codes]) - - 获取充值/提现手续费
fetchDepositWithdrawFee(code) - - 批量获取多个币种的充值/提现手续费
fetchDepositWithdrawFees([codes])
Deposits & Withdrawals
充值与提现
- - Get deposit address
fetchDepositAddress(code, params) - - Multiple deposit addresses
fetchDepositAddresses([codes]) - - Addresses by network
fetchDepositAddressesByNetwork(code) - - Create new deposit address
createDepositAddress(code, params) - - Fetch single deposit
fetchDeposit(id, code) - - Fetch single withdrawal
fetchWithdrawal(id, code) - - Fetch withdrawal addresses
fetchWithdrawAddresses(code) - - Fetch whitelist
fetchWithdrawalWhitelist(code) - - Withdraw funds
withdraw(code, amount, address, tag, params) - - Deposit funds (if supported)
deposit(code, amount, params)
- - 获取充值地址
fetchDepositAddress(code, params) - - 批量获取多个币种的充值地址
fetchDepositAddresses([codes]) - - 获取按网络分类的充值地址
fetchDepositAddressesByNetwork(code) - - 创建新的充值地址
createDepositAddress(code, params) - - 查询单个充值记录
fetchDeposit(id, code) - - 查询单个提现记录
fetchWithdrawal(id, code) - - 获取提现地址
fetchWithdrawAddresses(code) - - 获取提现白名单
fetchWithdrawalWhitelist(code) - - 提现
withdraw(code, amount, address, tag, params) - - 充值(若交易所支持)
deposit(code, amount, params)
Transfer & Convert
转账与兑换
- - Internal transfer
transfer(code, amount, fromAccount, toAccount) - - Fetch transfer info
fetchTransfer(id, code) - - Fetch transfer history
fetchTransfers(code, since, limit) - - Currencies available for convert
fetchConvertCurrencies() - - Get conversion quote
fetchConvertQuote(fromCode, toCode, amount) - - Execute conversion
createConvertTrade(fromCode, toCode, amount) - - Fetch convert trade
fetchConvertTrade(id) - - Convert history
fetchConvertTradeHistory(code, since, limit)
- - 内部转账
transfer(code, amount, fromAccount, toAccount) - - 查询转账记录
fetchTransfer(id, code) - - 获取转账历史记录
fetchTransfers(code, since, limit) - - 获取支持兑换的币种
fetchConvertCurrencies() - - 获取兑换报价
fetchConvertQuote(fromCode, toCode, amount) - - 执行兑换
createConvertTrade(fromCode, toCode, amount) - - 查询兑换记录
fetchConvertTrade(id) - - 获取兑换历史记录
fetchConvertTradeHistory(code, since, limit)
Market Info
市场信息
- - Fetch all markets
fetchMarkets() - - Fetch all currencies
fetchCurrencies() - - Fetch exchange server time
fetchTime() - - Fetch exchange status
fetchStatus() - - Borrow interest paid
fetchBorrowInterest(code, symbol, since, limit) - - Long/short ratio
fetchLongShortRatio(symbol, timeframe, since, limit) - - L/S ratio history
fetchLongShortRatioHistory(symbol, timeframe, since, limit)
- - 获取所有交易对信息
fetchMarkets() - - 获取所有币种信息
fetchCurrencies() - - 获取交易所服务器时间
fetchTime() - - 获取交易所状态
fetchStatus() - - 获取借贷利息记录
fetchBorrowInterest(code, symbol, since, limit) - - 获取多空比
fetchLongShortRatio(symbol, timeframe, since, limit) - - 获取多空比历史数据
fetchLongShortRatioHistory(symbol, timeframe, since, limit)
WebSocket Methods (ccxt.pro)
WebSocket方法(ccxt.pro)
All REST methods have WebSocket equivalents with prefix:
watch*所有REST方法都有对应的WebSocket方法,前缀为:
watch*Real-time Market Data
实时市场数据
- - Watch single ticker
watchTicker(symbol) - - Watch multiple tickers
watchTickers([symbols]) - - Watch order book updates
watchOrderBook(symbol) - - Watch multiple order books
watchOrderBookForSymbols([symbols]) - - Watch public trades
watchTrades(symbol) - - Watch candlestick updates
watchOHLCV(symbol, timeframe) - - Watch best bid/ask
watchBidsAsks([symbols])
- - 监控单个交易对行情
watchTicker(symbol) - - 批量监控多个交易对行情
watchTickers([symbols]) - - 监控订单簿更新
watchOrderBook(symbol) - - 批量监控多个订单簿
watchOrderBookForSymbols([symbols]) - - 监控公开交易记录
watchTrades(symbol) - - 监控K线更新
watchOHLCV(symbol, timeframe) - - 监控最优买卖价
watchBidsAsks([symbols])
Real-time Account Data (Auth Required)
实时账户数据(需身份验证)
- - Watch balance updates
watchBalance() - - Watch your order updates
watchOrders(symbol) - - Watch your trade updates
watchMyTrades(symbol) - - Watch position updates
watchPositions([symbols]) - - Watch positions for symbol
watchPositionsForSymbol(symbol)
- - 监控账户余额更新
watchBalance() - - 监控个人订单更新
watchOrders(symbol) - - 监控个人交易记录更新
watchMyTrades(symbol) - - 监控仓位更新
watchPositions([symbols]) - - 监控指定交易对的仓位
watchPositionsForSymbol(symbol)
Authentication Required
需身份验证的方法
Methods marked with 🔒 require API credentials:
- All methods (creating orders, addresses)
create* - All methods (canceling orders)
cancel* - All methods (modifying orders)
edit* - All methods (your trades, orders)
fetchMy* - ,
fetchBalance,fetchLedgerfetchAccounts - ,
withdraw,transferdeposit - Margin/leverage methods
- Position methods
- ,
watchBalance,watchOrders,watchMyTradeswatchPositions
标记为🔒的方法需要API凭证:
- 所有方法(创建订单、地址等)
create* - 所有方法(取消订单等)
cancel* - 所有方法(修改订单等)
edit* - 所有方法(个人交易、订单等)
fetchMy* - ,
fetchBalance,fetchLedgerfetchAccounts - ,
withdraw,transferdeposit - 保证金/杠杆相关方法
- 仓位相关方法
- ,
watchBalance,watchOrders,watchMyTradeswatchPositions
Checking Method Availability
检查方法可用性
Not all exchanges support all methods. Check before using:
// Check if method is supported
if (exchange.has['fetchOHLCV']) {
const candles = await exchange.fetchOHLCV('BTC/USDT', '1h')
}
// Check multiple capabilities
console.log(exchange.has)
// {
// fetchTicker: true,
// fetchOHLCV: true,
// fetchMyTrades: true,
// fetchPositions: false,
// ...
// }并非所有交易所都支持所有方法,使用前请检查:
// 检查方法是否支持
if (exchange.has['fetchOHLCV']) {
const candles = await exchange.fetchOHLCV('BTC/USDT', '1h')
}
// 检查多个功能支持情况
console.log(exchange.has)
// {
// fetchTicker: true,
// fetchOHLCV: true,
// fetchMyTrades: true,
// fetchPositions: false,
// ...
// }Method Naming Convention
方法命名规范
- - REST API methods (HTTP requests)
fetch* - - WebSocket methods (real-time streams)
watch* - - Create new resources (orders, addresses)
create* - - Cancel existing resources
cancel* - - Modify existing resources
edit* - - Configure settings (leverage, margin mode)
set* - suffix - WebSocket variant (some exchanges)
*Ws
- - REST API方法(HTTP请求)
fetch* - - WebSocket方法(实时流)
watch* - - 创建新资源(订单、地址等)
create* - - 取消现有资源
cancel* - - 修改现有资源
edit* - - 配置设置(杠杆、保证金模式等)
set* - 后缀 - WebSocket变体(部分交易所支持)
*Ws
Proxy Configuration
代理配置
CCXT supports HTTP, HTTPS, and SOCKS proxies for both REST and WebSocket connections.
CCXT支持HTTP、HTTPS和SOCKS代理,适用于REST和WebSocket连接。
Setting Proxy
设置代理
// HTTP Proxy
exchange.httpProxy = 'http://your-proxy-host:port'
// HTTPS Proxy
exchange.httpsProxy = 'https://your-proxy-host:port'
// SOCKS Proxy
exchange.socksProxy = 'socks://your-proxy-host:port'
// Proxy with authentication
exchange.httpProxy = 'http://user:pass@proxy-host:port'// HTTP代理
exchange.httpProxy = 'http://your-proxy-host:port'
// HTTPS代理
exchange.httpsProxy = 'https://your-proxy-host:port'
// SOCKS代理
exchange.socksProxy = 'socks://your-proxy-host:port'
// 带身份验证的代理
exchange.httpProxy = 'http://user:pass@proxy-host:port'Proxy for WebSocket
WebSocket代理
WebSocket connections also respect proxy settings:
exchange.httpsProxy = 'https://proxy:8080'
// WebSocket connections will use this proxyWebSocket连接同样遵循代理设置:
exchange.httpsProxy = 'https://proxy:8080'
// WebSocket连接将使用该代理Testing Proxy Connection
测试代理连接
exchange.httpProxy = 'http://localhost:8080'
try {
await exchange.fetchTicker('BTC/USDT')
console.log('Proxy working!')
} catch (error) {
console.error('Proxy connection failed:', error)
}exchange.httpProxy = 'http://localhost:8080'
try {
await exchange.fetchTicker('BTC/USDT')
console.log('代理可用!')
} catch (error) {
console.error('代理连接失败:', error)
}WebSocket-Specific Methods
WebSocket专属方法
Some exchanges provide WebSocket variants of REST methods for faster order placement and management. These use the suffix:
*Ws部分交易所提供了REST方法的WebSocket变体,用于更快地下单和管理订单,这些方法以为后缀:
*WsTrading via WebSocket
通过WebSocket交易
Creating Orders:
- - Create order via WebSocket (faster than REST)
createOrderWs - - Create limit order via WebSocket
createLimitOrderWs - - Create market order via WebSocket
createMarketOrderWs - - Buy limit order via WebSocket
createLimitBuyOrderWs - - Sell limit order via WebSocket
createLimitSellOrderWs - - Buy market order via WebSocket
createMarketBuyOrderWs - - Sell market order via WebSocket
createMarketSellOrderWs - - Stop-limit order via WebSocket
createStopLimitOrderWs - - Stop-market order via WebSocket
createStopMarketOrderWs - - Stop-loss order via WebSocket
createStopLossOrderWs - - Take-profit order via WebSocket
createTakeProfitOrderWs - - Trailing stop via WebSocket
createTrailingAmountOrderWs - - Trailing stop % via WebSocket
createTrailingPercentOrderWs - - Post-only order via WebSocket
createPostOnlyOrderWs - - Reduce-only order via WebSocket
createReduceOnlyOrderWs
Managing Orders:
- - Edit order via WebSocket
editOrderWs - - Cancel order via WebSocket (faster than REST)
cancelOrderWs - - Cancel multiple orders via WebSocket
cancelOrdersWs - - Cancel all orders via WebSocket
cancelAllOrdersWs
Fetching Data:
- - Fetch order via WebSocket
fetchOrderWs - - Fetch orders via WebSocket
fetchOrdersWs - - Fetch open orders via WebSocket
fetchOpenOrdersWs - - Fetch closed orders via WebSocket
fetchClosedOrdersWs - - Fetch your trades via WebSocket
fetchMyTradesWs - - Fetch balance via WebSocket
fetchBalanceWs - - Fetch position via WebSocket
fetchPositionWs - - Fetch positions via WebSocket
fetchPositionsWs - - Fetch positions for symbol via WebSocket
fetchPositionsForSymbolWs - - Fetch trading fees via WebSocket
fetchTradingFeesWs
创建订单:
- - 通过WebSocket创建订单(比REST更快)
createOrderWs - - 通过WebSocket创建限价单
createLimitOrderWs - - 通过WebSocket创建市价单
createMarketOrderWs - - 通过WebSocket创建买入限价单
createLimitBuyOrderWs - - 通过WebSocket创建卖出限价单
createLimitSellOrderWs - - 通过WebSocket创建买入市价单
createMarketBuyOrderWs - - 通过WebSocket创建卖出市价单
createMarketSellOrderWs - - 通过WebSocket创建止损限价单
createStopLimitOrderWs - - 通过WebSocket创建止损市价单
createStopMarketOrderWs - - 通过WebSocket创建止损单
createStopLossOrderWs - - 通过WebSocket创建止盈单
createTakeProfitOrderWs - - 通过WebSocket创建追踪止损单(固定金额)
createTrailingAmountOrderWs - - 通过WebSocket创建追踪止损单(百分比)
createTrailingPercentOrderWs - - 通过WebSocket创建只做市单
createPostOnlyOrderWs - - 通过WebSocket创建只减仓单
createReduceOnlyOrderWs
订单管理:
- - 通过WebSocket修改订单
editOrderWs - - 通过WebSocket取消订单(比REST更快)
cancelOrderWs - - 通过WebSocket批量取消订单
cancelOrdersWs - - 通过WebSocket取消所有订单
cancelAllOrdersWs
数据查询:
- - 通过WebSocket查询订单
fetchOrderWs - - 通过WebSocket查询订单
fetchOrdersWs - - 通过WebSocket查询未成交订单
fetchOpenOrdersWs - - 通过WebSocket查询已成交订单
fetchClosedOrdersWs - - 通过WebSocket查询个人交易记录
fetchMyTradesWs - - 通过WebSocket查询账户余额
fetchBalanceWs - - 通过WebSocket查询仓位
fetchPositionWs - - 通过WebSocket查询所有仓位
fetchPositionsWs - - 通过WebSocket查询指定交易对的仓位
fetchPositionsForSymbolWs - - 通过WebSocket查询交易手续费
fetchTradingFeesWs
When to Use WebSocket Methods
何时使用WebSocket方法
Use methods when:
*Ws- You need faster order placement (lower latency)
- You're already connected via WebSocket
- You want to reduce REST API rate limit usage
- Trading strategies require sub-100ms latency
Use REST methods when:
- You need guaranteed execution confirmation
- You're making one-off requests
- The exchange doesn't support the WebSocket variant
- You need detailed error responses
使用方法的场景:
*Ws- 需要更快的下单速度(更低延迟)
- 已通过WebSocket连接到交易所
- 希望减少REST API的请求限制消耗
- 交易策略要求延迟低于100ms
使用REST方法的场景:
- 需要确保执行确认
- 仅需一次性请求
- 交易所不支持该方法的WebSocket变体
- 需要详细的错误响应
Example: Order Placement Comparison
示例:下单方式对比
REST API (slower, more reliable):
const order = await exchange.createOrder('BTC/USDT', 'limit', 'buy', 0.01, 50000)WebSocket API (faster, lower latency):
const order = await exchange.createOrderWs('BTC/USDT', 'limit', 'buy', 0.01, 50000)REST API(速度慢,可靠性高):
const order = await exchange.createOrder('BTC/USDT', 'limit', 'buy', 0.01, 50000)WebSocket API(速度快,延迟低):
const order = await exchange.createOrderWs('BTC/USDT', 'limit', 'buy', 0.01, 50000)Checking WebSocket Method Availability
检查WebSocket方法可用性
Not all exchanges support WebSocket trading methods:
if (exchange.has['createOrderWs']) {
// Exchange supports WebSocket order creation
const order = await exchange.createOrderWs('BTC/USDT', 'limit', 'buy', 0.01, 50000)
} else {
// Fall back to REST
const order = await exchange.createOrder('BTC/USDT', 'limit', 'buy', 0.01, 50000)
}并非所有交易所都支持WebSocket交易方法:
if (exchange.has['createOrderWs']) {
// 交易所支持WebSocket创建订单
const order = await exchange.createOrderWs('BTC/USDT', 'limit', 'buy', 0.01, 50000)
} else {
// 回退到REST方法
const order = await exchange.createOrder('BTC/USDT', 'limit', 'buy', 0.01, 50000)
}Authentication
身份验证
Setting API Keys
设置API密钥
python
import ospython
import osDuring instantiation (recommended)
实例化时设置(推荐)
exchange = ccxt.binance({
'apiKey': os.environ.get('BINANCE_API_KEY'),
'secret': os.environ.get('BINANCE_SECRET'),
'enableRateLimit': True
})
exchange = ccxt.binance({
'apiKey': os.environ.get('BINANCE_API_KEY'),
'secret': os.environ.get('BINANCE_SECRET'),
'enableRateLimit': True
})
After instantiation
实例化后设置
exchange.apiKey = os.environ.get('BINANCE_API_KEY')
exchange.secret = os.environ.get('BINANCE_SECRET')
undefinedexchange.apiKey = os.environ.get('BINANCE_API_KEY')
exchange.secret = os.environ.get('BINANCE_SECRET')
undefinedTesting Authentication
测试身份验证
python
try:
balance = exchange.fetch_balance()
print('Authentication successful!')
except ccxt.AuthenticationError:
print('Invalid API credentials')python
try:
balance = exchange.fetch_balance()
print('身份验证成功!')
except ccxt.AuthenticationError:
print('API凭证无效')Error Handling
错误处理
Exception Hierarchy
异常层级
BaseError
├─ NetworkError (recoverable - retry)
│ ├─ RequestTimeout
│ ├─ ExchangeNotAvailable
│ ├─ RateLimitExceeded
│ └─ DDoSProtection
└─ ExchangeError (non-recoverable - don't retry)
├─ AuthenticationError
├─ InsufficientFunds
├─ InvalidOrder
└─ NotSupportedBaseError
├─ NetworkError(可恢复 - 可重试)
│ ├─ RequestTimeout
│ ├─ ExchangeNotAvailable
│ ├─ RateLimitExceeded
│ └─ DDoSProtection
└─ ExchangeError(不可恢复 - 请勿重试)
├─ AuthenticationError
├─ InsufficientFunds
├─ InvalidOrder
└─ NotSupportedBasic Error Handling
基础错误处理
python
import ccxt
try:
ticker = exchange.fetch_ticker('BTC/USDT')
except ccxt.NetworkError as e:
print('Network error - retry:', str(e))
except ccxt.ExchangeError as e:
print('Exchange error - do not retry:', str(e))
except Exception as e:
print('Unknown error:', str(e))python
import ccxt
try:
ticker = exchange.fetch_ticker('BTC/USDT')
except ccxt.NetworkError as e:
print('网络错误 - 可重试:', str(e))
except ccxt.ExchangeError as e:
print('交易所错误 - 请勿重试:', str(e))
except Exception as e:
print('未知错误:', str(e))Specific Exception Handling
特定异常处理
python
try:
order = exchange.create_order('BTC/USDT', 'limit', 'buy', 0.01, 50000)
except ccxt.InsufficientFunds:
print('Not enough balance')
except ccxt.InvalidOrder:
print('Invalid order parameters')
except ccxt.RateLimitExceeded:
print('Rate limit hit - wait before retrying')
exchange.sleep(1000) # Wait 1 second
except ccxt.AuthenticationError:
print('Check your API credentials')python
try:
order = exchange.create_order('BTC/USDT', 'limit', 'buy', 0.01, 50000)
except ccxt.InsufficientFunds:
print('余额不足')
except ccxt.InvalidOrder:
print('订单参数无效')
except ccxt.RateLimitExceeded:
print('触发请求限制 - 请等待后重试')
exchange.sleep(1000) # 等待1秒
except ccxt.AuthenticationError:
print('请检查API凭证')Retry Logic for Network Errors
网络错误重试逻辑
python
def fetch_with_retry(max_retries=3):
for i in range(max_retries):
try:
return exchange.fetch_ticker('BTC/USDT')
except ccxt.NetworkError:
if i < max_retries - 1:
print(f'Retry {i + 1}/{max_retries}')
exchange.sleep(1000 * (i + 1)) # Exponential backoff
else:
raisepython
def fetch_with_retry(max_retries=3):
for i in range(max_retries):
try:
return exchange.fetch_ticker('BTC/USDT')
except ccxt.NetworkError:
if i < max_retries - 1:
print(f'重试 {i + 1}/{max_retries}')
exchange.sleep(1000 * (i + 1)) # 指数退避
else:
raiseAsync vs Sync
同步与异步对比
When to Use Sync
何时使用同步
- Simple scripts
- Single exchange operations
- Jupyter notebooks
- Quick testing
- 简单脚本
- 单个交易所操作
- Jupyter笔记本
- 快速测试
When to Use Async
何时使用异步
- Multiple concurrent operations
- WebSocket connections (required)
- High-performance trading bots
- Multiple exchange monitoring
- 多个并发操作
- WebSocket连接(必须使用异步)
- 高性能交易机器人
- 多交易所监控
Sync Example
同步示例
python
import ccxt
exchange = ccxt.binance({'enableRateLimit': True})
ticker = exchange.fetch_ticker('BTC/USDT')
print(ticker['last'])python
import ccxt
exchange = ccxt.binance({'enableRateLimit': True})
ticker = exchange.fetch_ticker('BTC/USDT')
print(ticker['last'])Async Example
异步示例
python
import asyncio
import ccxt.async_support as ccxt
async def main():
exchange = ccxt.binance({'enableRateLimit': True})
ticker = await exchange.fetch_ticker('BTC/USDT')
print(ticker['last'])
await exchange.close()
asyncio.run(main())python
import asyncio
import ccxt.async_support as ccxt
async def main():
exchange = ccxt.binance({'enableRateLimit': True})
ticker = await exchange.fetch_ticker('BTC/USDT')
print(ticker['last'])
await exchange.close()
asyncio.run(main())Multiple Exchanges Async
多交易所异步示例
python
async def fetch_all():
exchanges = [
ccxt.binance({'enableRateLimit': True}),
ccxt.coinbase({'enableRateLimit': True}),
ccxt.kraken({'enableRateLimit': True})
]
# Fetch concurrently
tasks = [ex.fetch_ticker('BTC/USDT') for ex in exchanges]
tickers = await asyncio.gather(*tasks, return_exceptions=True)
for ex, ticker in zip(exchanges, tickers):
if isinstance(ticker, Exception):
print(f'{ex.id}: ERROR - {ticker}')
else:
print(f'{ex.id}: ${ticker["last"]}')
await ex.close()
asyncio.run(fetch_all())python
async def fetch_all():
exchanges = [
ccxt.binance({'enableRateLimit': True}),
ccxt.coinbase({'enableRateLimit': True}),
ccxt.kraken({'enableRateLimit': True})
]
# 并发获取
tasks = [ex.fetch_ticker('BTC/USDT') for ex in exchanges]
tickers = await asyncio.gather(*tasks, return_exceptions=True)
for ex, ticker in zip(exchanges, tickers):
if isinstance(ticker, Exception):
print(f'{ex.id}: 错误 - {ticker}')
else:
print(f'{ex.id}: ${ticker["last"]}')
await ex.close()
asyncio.run(fetch_all())Rate Limiting
请求限制
Built-in Rate Limiter (Recommended)
内置请求限制器(推荐)
python
exchange = ccxt.binance({
'enableRateLimit': True # Automatically throttles requests
})python
exchange = ccxt.binance({
'enableRateLimit': True # 自动节流请求
})Manual Delays
手动延迟
python
exchange.fetch_ticker('BTC/USDT')
exchange.sleep(1000) # Wait 1 second (milliseconds)
exchange.fetch_ticker('ETH/USDT')python
exchange.fetch_ticker('BTC/USDT')
exchange.sleep(1000) # 等待1秒(毫秒单位)
exchange.fetch_ticker('ETH/USDT')Checking Rate Limit
查看请求限制
python
print(exchange.rateLimit) # Milliseconds between requestspython
print(exchange.rateLimit) # 请求间隔(毫秒)Common Pitfalls
常见陷阱
Forgetting await
in Async Mode
await异步模式下忘记使用await
awaitpython
undefinedpython
undefinedWrong - returns coroutine, not data
错误 - 返回协程对象,而非数据
async def wrong():
ticker = exchange.fetch_ticker('BTC/USDT') # Missing await!
print(ticker['last']) # ERROR
async def wrong():
ticker = exchange.fetch_ticker('BTC/USDT') # 缺少await!
print(ticker['last']) # 错误
Correct
正确
async def correct():
ticker = await exchange.fetch_ticker('BTC/USDT')
print(ticker['last']) # Works!
undefinedasync def correct():
ticker = await exchange.fetch_ticker('BTC/USDT')
print(ticker['last']) # 正常运行
undefinedUsing Sync for WebSocket
使用同步方式处理WebSocket
python
undefinedpython
undefinedWrong - WebSocket requires async
错误 - WebSocket必须使用异步
import ccxt.pro as ccxtpro
exchange = ccxtpro.binance()
ticker = exchange.watch_ticker('BTC/USDT') # ERROR: Need await!
import ccxt.pro as ccxtpro
exchange = ccxtpro.binance()
ticker = exchange.watch_ticker('BTC/USDT') # 错误:需要await!
Correct
正确
import asyncio
import ccxt.pro as ccxtpro
async def main():
exchange = ccxtpro.binance()
ticker = await exchange.watch_ticker('BTC/USDT')
await exchange.close()
asyncio.run(main())
undefinedimport asyncio
import ccxt.pro as ccxtpro
async def main():
exchange = ccxtpro.binance()
ticker = await exchange.watch_ticker('BTC/USDT')
await exchange.close()
asyncio.run(main())
undefinedNot Closing Async Exchange
异步实例未关闭
python
undefinedpython
undefinedWrong - resource leak
错误 - 资源泄漏
async def wrong():
exchange = ccxt.binance()
await exchange.fetch_ticker('BTC/USDT')
# Forgot to close!
async def wrong():
exchange = ccxt.binance()
await exchange.fetch_ticker('BTC/USDT')
# 忘记关闭!
Correct
正确
async def correct():
exchange = ccxt.binance()
try:
await exchange.fetch_ticker('BTC/USDT')
finally:
await exchange.close()
undefinedasync def correct():
exchange = ccxt.binance()
try:
await exchange.fetch_ticker('BTC/USDT')
finally:
await exchange.close()
undefinedUsing Sync in Async Code
异步代码中使用同步实例
python
undefinedpython
undefinedWrong - blocks event loop
错误 - 阻塞事件循环
async def wrong():
exchange = ccxt.binance() # Sync import!
ticker = exchange.fetch_ticker('BTC/USDT') # Blocking!
async def wrong():
exchange = ccxt.binance() # 同步导入!
ticker = exchange.fetch_ticker('BTC/USDT') # 阻塞操作!
Correct
正确
import ccxt.async_support as ccxt
async def correct():
exchange = ccxt.binance()
ticker = await exchange.fetch_ticker('BTC/USDT')
await exchange.close()
undefinedimport ccxt.async_support as ccxt
async def correct():
exchange = ccxt.binance()
ticker = await exchange.fetch_ticker('BTC/USDT')
await exchange.close()
undefinedUsing REST for Real-time Monitoring
使用REST进行实时监控
python
undefinedpython
undefinedWrong - wastes rate limits
错误 - 浪费请求限制
while True:
ticker = exchange.fetch_ticker('BTC/USDT') # REST
print(ticker['last'])
exchange.sleep(1000)
while True:
ticker = exchange.fetch_ticker('BTC/USDT') # REST请求
print(ticker['last'])
exchange.sleep(1000)
Correct - use WebSocket
正确 - 使用WebSocket
import ccxt.pro as ccxtpro
async def correct():
exchange = ccxtpro.binance()
while True:
ticker = await exchange.watch_ticker('BTC/USDT') # WebSocket
print(ticker['last'])
await exchange.close()
undefinedimport ccxt.pro as ccxtpro
async def correct():
exchange = ccxtpro.binance()
while True:
ticker = await exchange.watch_ticker('BTC/USDT') # WebSocket
print(ticker['last'])
await exchange.close()
undefinedTroubleshooting
故障排除
Common Issues
常见问题
1. "ModuleNotFoundError: No module named 'ccxt'"
- Solution: Run
pip install ccxt
2. "RateLimitExceeded"
- Solution: Enable rate limiter:
'enableRateLimit': True - Or add manual delays between requests
3. "AuthenticationError"
- Solution: Check API key and secret
- Verify API key permissions on exchange
- Check system clock is synced (use NTP)
4. "InvalidNonce"
- Solution: Sync system clock
- Use only one exchange instance per API key
5. "InsufficientFunds"
- Solution: Check available balance ()
balance['BTC']['free'] - Account for trading fees
6. "ExchangeNotAvailable"
- Solution: Check exchange status/maintenance
- Retry after a delay
7. SSL/Certificate errors
- Solution: Update certifi:
pip install --upgrade certifi
8. Slow performance
- Solution: Install performance enhancements:
- (faster JSON)
pip install orjson - (faster signing)
pip install coincurve
1. "ModuleNotFoundError: No module named 'ccxt'"
- 解决方案:执行
pip install ccxt
2. "RateLimitExceeded"
- 解决方案:启用请求限制器:
'enableRateLimit': True - 或在请求之间添加手动延迟
3. "AuthenticationError"
- 解决方案:检查API密钥和密钥
- 验证API密钥在交易所的权限
- 检查系统时钟是否同步(使用NTP)
4. "InvalidNonce"
- 解决方案:同步系统时钟
- 每个API密钥仅使用一个交易所实例
5. "InsufficientFunds"
- 解决方案:检查可用余额()
balance['BTC']['free'] - 考虑交易手续费
6. "ExchangeNotAvailable"
- 解决方案:检查交易所状态/维护公告
- 延迟后重试
7. SSL/证书错误
- 解决方案:更新certifi:
pip install --upgrade certifi
8. 性能缓慢
- 解决方案:安装性能增强包:
- (更快的JSON解析)
pip install orjson - (更快的签名)
pip install coincurve
Debugging
调试
python
undefinedpython
undefinedEnable verbose logging
启用详细日志
exchange.verbose = True
exchange.verbose = True
Check exchange capabilities
检查交易所功能支持
print(exchange.has)
print(exchange.has)
{
{
'fetchTicker': True,
'fetchTicker': True,
'fetchOrderBook': True,
'fetchOrderBook': True,
'createOrder': True,
'createOrder': True,
...
...
}
}
Check market information
检查市场信息
print(exchange.markets['BTC/USDT'])
print(exchange.markets['BTC/USDT'])
Check last request/response
检查最后一次请求/响应
print(exchange.last_http_response)
print(exchange.last_json_response)
undefinedprint(exchange.last_http_response)
print(exchange.last_json_response)
undefined