| name | ccxt-python |
| description | CCXT cryptocurrency exchange library for Python developers. Covers both REST API (standard) and WebSocket API (real-time). Helps install CCXT, connect to exchanges, fetch market data, place orders, stream live tickers/orderbooks, handle authentication, and manage errors in Python. Use when working with crypto exchanges in Python projects, trading bots, data analysis, or portfolio management. Supports both sync and async (asyncio) usage. Use when this capability is needed. |
| metadata | {"author":"ccxt"} |
CCXT for Python
A comprehensive guide to using CCXT in Python projects for cryptocurrency exchange integration.
Installation
REST API (Standard)
pip install ccxt
WebSocket API (Real-time, ccxt.pro)
pip install ccxt
Optional Performance Enhancements
pip install orjson
pip install coincurve
Both REST and WebSocket APIs are included in the same package.
Quick Start
REST API - Synchronous
import ccxt
exchange = ccxt.binance()
exchange.load_markets()
ticker = exchange.fetch_ticker('BTC/USDT')
print(ticker)
REST API - Asynchronous
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
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
| Import | For REST | For WebSocket |
|---|
| Sync | import ccxt | (WebSocket requires async) |
| Async | import ccxt.async_support as ccxt | import ccxt.pro as ccxtpro |
| Feature | REST API | WebSocket API |
|---|
| Use for | One-time queries, placing orders | Real-time monitoring, live price feeds |
| Method prefix | fetch_* (fetch_ticker, fetch_order_book) | watch_* (watch_ticker, watch_order_book) |
| 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
Creating Exchange Instance
REST API - Synchronous
import ccxt
exchange = ccxt.binance({
'enableRateLimit': True
})
exchange = ccxt.binance({
'apiKey': 'YOUR_API_KEY',
'secret': 'YOUR_SECRET',
'enableRateLimit': True
})
REST API - Asynchronous
import ccxt.async_support as ccxt
exchange = ccxt.binance({
'apiKey': 'YOUR_API_KEY',
'secret': 'YOUR_SECRET',
'enableRateLimit': True
})
await exchange.close()
WebSocket API
import ccxt.pro as ccxtpro
exchange = ccxtpro.binance()
exchange = ccxtpro.binance({
'apiKey': 'YOUR_API_KEY',
'secret': 'YOUR_SECRET'
})
await exchange.close()
Common REST Operations
Loading Markets
exchange.load_markets()
btc_market = exchange.market('BTC/USDT')
print(btc_market['limits']['amount']['min'])
Fetching Ticker
ticker = exchange.fetch_ticker('BTC/USDT')
print(ticker['last'])
print(ticker['bid'])
print(ticker['ask'])
print(ticker['volume'])
tickers = exchange.fetch_tickers(['BTC/USDT', 'ETH/USDT'])
Fetching Order Book
orderbook = exchange.fetch_order_book('BTC/USDT')
print(orderbook['bids'][0])
print(orderbook['asks'][0])
orderbook = exchange.fetch_order_book('BTC/USDT', 5)
Creating Orders
Limit Order
order = exchange.create_limit_buy_order('BTC/USDT', 0.01, 50000)
print(order['id'])
order = exchange.create_limit_sell_order('BTC/USDT', 0.01, 60000)
order = exchange.create_order('BTC/USDT', 'limit', 'buy', 0.01, 50000)
Market Order
order = exchange.create_market_buy_order('BTC/USDT', 0.01)
order = exchange.create_market_sell_order('BTC/USDT', 0.01)
order = exchange.create_order('BTC/USDT', 'market', 'sell', 0.01)
Fetching Balance
balance = exchange.fetch_balance()
print(balance['BTC']['free'])
print(balance['BTC']['used'])
print(balance['BTC']['total'])
Fetching Orders
open_orders = exchange.fetch_open_orders('BTC/USDT')
closed_orders = exchange.fetch_closed_orders('BTC/USDT')
all_orders = exchange.fetch_orders('BTC/USDT')
order = exchange.fetch_order(order_id, 'BTC/USDT')
Fetching Trades
trades = exchange.fetch_trades('BTC/USDT', limit=10)
my_trades = exchange.fetch_my_trades('BTC/USDT')
Canceling Orders
exchange.cancel_order(order_id, 'BTC/USDT')
exchange.cancel_all_orders('BTC/USDT')
WebSocket Operations (Real-time)
Watching Ticker (Live Price Updates)
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)
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())
Watching Trades (Live Trade Stream)
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)
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)
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
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
fetchTicker(symbol) - Fetch ticker for one symbol
fetchTickers([symbols]) - Fetch multiple tickers at once
fetchBidsAsks([symbols]) - Fetch best bid/ask for multiple symbols
fetchLastPrices([symbols]) - Fetch last prices
fetchMarkPrices([symbols]) - Fetch mark prices (derivatives)
Order Books
fetchOrderBook(symbol, limit) - Fetch order book
fetchOrderBooks([symbols]) - Fetch multiple order books
fetchL2OrderBook(symbol) - Fetch level 2 order book
fetchL3OrderBook(symbol) - Fetch level 3 order book (if supported)
Trades
fetchTrades(symbol, since, limit) - Fetch public trades
fetchMyTrades(symbol, since, limit) - Fetch your trades (auth required)
fetchOrderTrades(orderId, symbol) - Fetch trades for specific order
OHLCV (Candlesticks)
fetchOHLCV(symbol, timeframe, since, limit) - Fetch candlestick data
fetchIndexOHLCV(symbol, timeframe) - Fetch index price OHLCV
fetchMarkOHLCV(symbol, timeframe) - Fetch mark price OHLCV
fetchPremiumIndexOHLCV(symbol, timeframe) - Fetch premium index OHLCV
Account & Balance
fetchBalance() - Fetch account balance (auth required)
fetchAccounts() - Fetch sub-accounts
fetchLedger(code, since, limit) - Fetch ledger history
fetchLedgerEntry(id, code) - Fetch specific ledger entry
fetchTransactions(code, since, limit) - Fetch transactions
fetchDeposits(code, since, limit) - Fetch deposit history
fetchWithdrawals(code, since, limit) - Fetch withdrawal history
fetchDepositsWithdrawals(code, since, limit) - Fetch both deposits and withdrawals
Trading Methods
Creating Orders
createOrder(symbol, type, side, amount, price, params) - Create order (generic)
createLimitOrder(symbol, side, amount, price) - Create limit order
createMarketOrder(symbol, side, amount) - Create market order
createLimitBuyOrder(symbol, amount, price) - Buy limit order
createLimitSellOrder(symbol, amount, price) - Sell limit order
createMarketBuyOrder(symbol, amount) - Buy market order
createMarketSellOrder(symbol, amount) - Sell market order
createMarketBuyOrderWithCost(symbol, cost) - Buy with specific cost
createStopLimitOrder(symbol, side, amount, price, stopPrice) - Stop-limit order