Skip to main content

ccxt-python

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.

Jump to install

Source facts

Repository
ccxt/ccxt
Last source activity
July 15, 2026 at 08:19
Detected SKILL.md language
English
Stars
44,008
Forks
8,835

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
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.
# CCXT for Python A comprehensive guide to using CCXT in Python projects for cryptocurrency exchange integration. ## Installation ### REST API (Standard) ```bash pip install ccxt ``` ### WebSocket API (Real-time, ccxt.pro) ```bash pip install ccxt ``` ### Optional 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. ## Quick Start ### REST API - Synchronous ```python import ccxt exchange = ccxt.binance() exchange.load_markets() ticker = exchange.fetch_ticker('BTC/USDT') print(ticker) ``` ### REST API - Asynchronous ```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()) ``` ### WebSocket API - Real-time 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) # Live updates! 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 ```python import ccxt # Public API (no authentication) exchange = ccxt.binance({ 'enableRateLimit': True # Recommended! }) # Private API (with authentication) exchange = ccxt.binance({ 'apiKey': 'YOUR_API_KEY', 'secret': 'YOUR_SECRET', 'enableRateLimit': True }) ``` ### REST API - Asynchronous ```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() ``` ### WebSocket API ```python import ccxt.pro as ccxtpro # Public WebSocket exchange = ccxtpro.binance() # Private WebSocket (with authentication) exchange = ccxtpro.binance({ 'apiKey': 'YOUR_API_KEY', 'secret': 'YOUR_SECRET' }) # Always close when done await exchange.close() ``` ## Common REST Operations ### Loading Markets ```python # Load all available trading pairs exchange.load_markets() # Access market information btc_market = exchange.market('BTC/USDT') print(btc_market['limits']['amount']['min']) # Minimum order amount ``` ### Fetching Ticker ```python # Single 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 # Multiple tickers (if supported) tickers = exchange.fetch_tickers(['BTC/USDT', 'ETH/USDT']) ``` ### Fetching Order Book ```python # Full orderbook orderbook = exchange.fetch_order_book('BTC/USDT') print(orderbook['bids'][0]) # [price, amount] print(orderbook['asks'][0]) # [price, amount] # Limited depth orderbook = exchange.fetch_order_book('BTC/USDT', 5) # Top 5 levels ``` ### Creating Orders #### Limit Order ```python # Buy limit order 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) # Generic limit order order = exchange.create_order('BTC/USDT', 'limit', 'buy', 0.01, 50000) ``` #### Market Order ```python # Buy market order order = exchange.create_market_buy_order('BTC/USDT', 0.01) # Sell market order order = exchange.create_market_sell_order('BTC/USDT', 0.01) # Generic market order order = exchange.create_order('BTC/USDT', 'market', 'sell', 0.01) ``` ### Fetching Balance ```python balance = exchange.fetch_balance() print(balance['BTC']['free']) # Available balance print(balance['BTC']['used']) # Balance in orders print(balance['BTC']['total']) # Total balance ``` ### Fetching Orders ```python # Open orders open_orders = exchange.fetch_open_orders('BTC/USDT') # Closed orders closed_orders = exchange.fetch_closed_orders('BTC/USDT') # All orders (open + closed) all_orders = exchange.fetch_orders('BTC/USDT') # Single order by ID order = exchange.fetch_order(order_id, 'BTC/USDT') ``` ### Fetching Trades ```python # Recent public trades trades = exchange.fetch_trades('BTC/USDT', limit=10) # Your trades (requires authentication) my_trades = exchange.fetch_my_trades('BTC/USDT') ``` ### Canceling Orders ```python # Cancel single order exchange.cancel_order(order_id, 'BTC/USDT') # Cancel all orders for a symbol exchange.cancel_all_orders('BTC/USDT') ``` ## WebSocket Operations (Real-time) ### 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()) ``` ### 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()) ``` ### 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()) ``` ### 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()) ``` ### 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()) ``` ### 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()) ``` ## 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
View on GitHub
This SKILL.md is very large, so SkillsMP previews the first section here. View on GitHub