npx skills add https://github.com/ccxt/ccxt --skill ccxt-python在 Python 项目中集成加密货币交易所的 CCXT 使用综合指南。
pip install ccxt
pip install ccxt
pip install orjson # 更快的 JSON 解析
pip install coincurve # 更快的 ECDSA 签名 (45ms → 0.05ms)
REST 和 WebSocket API 都包含在同一个包中。
import ccxt
exchange = ccxt.binance()
exchange.load_markets()
ticker = exchange.fetch_ticker('BTC/USDT')
print(ticker)
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())
广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
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 | 用于 WebSocket |
|---|---|---|
| 同步 | import ccxt | (WebSocket 需要异步) |
| 异步 | import ccxt.async_support as ccxt | import ccxt.pro as ccxtpro |
| 特性 | REST API | WebSocket API |
| --- | --- | --- |
| 用途 | 一次性查询,下单 | 实时监控,实时价格推送 |
| 方法前缀 | fetch_* (fetch_ticker, fetch_order_book) | watch_* (watch_ticker, watch_order_book) |
| 速度 | 较慢 (HTTP 请求/响应) | 较快 (持久连接) |
| 频率限制 | 严格 (1-2 次请求/秒) | 更宽松 (连续流) |
| 最适合 | 交易,账户管理 | 价格监控,套利检测 |
何时使用 REST:
何时使用 WebSocket:
import ccxt
# 公共 API (无需认证)
exchange = ccxt.binance({
'enableRateLimit': True # 推荐!
})
# 私有 API (带认证)
exchange = ccxt.binance({
'apiKey': 'YOUR_API_KEY',
'secret': 'YOUR_SECRET',
'enableRateLimit': True
})
import ccxt.async_support as ccxt
exchange = ccxt.binance({
'apiKey': 'YOUR_API_KEY',
'secret': 'YOUR_SECRET',
'enableRateLimit': True
})
# 完成后务必关闭
await exchange.close()
import ccxt.pro as ccxtpro
# 公共 WebSocket
exchange = ccxtpro.binance()
# 私有 WebSocket (带认证)
exchange = ccxtpro.binance({
'apiKey': 'YOUR_API_KEY',
'secret': 'YOUR_SECRET'
})
# 完成后务必关闭
await exchange.close()
# 加载所有可用的交易对
exchange.load_markets()
# 访问市场信息
btc_market = exchange.market('BTC/USDT')
print(btc_market['limits']['amount']['min']) # 最小订单数量
# 单个行情
ticker = exchange.fetch_ticker('BTC/USDT')
print(ticker['last']) # 最新价格
print(ticker['bid']) # 最佳买价
print(ticker['ask']) # 最佳卖价
print(ticker['volume']) # 24小时交易量
# 多个行情 (如果支持)
tickers = exchange.fetch_tickers(['BTC/USDT', 'ETH/USDT'])
# 完整订单簿
orderbook = exchange.fetch_order_book('BTC/USDT')
print(orderbook['bids'][0]) # [价格, 数量]
print(orderbook['asks'][0]) # [价格, 数量]
# 限制深度
orderbook = exchange.fetch_order_book('BTC/USDT', 5) # 前 5 档
# 限价买入订单
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)
# 市价买入订单
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)
balance = exchange.fetch_balance()
print(balance['BTC']['free']) # 可用余额
print(balance['BTC']['used']) # 订单占用余额
print(balance['BTC']['total']) # 总余额
# 未成交订单
open_orders = exchange.fetch_open_orders('BTC/USDT')
# 已成交订单
closed_orders = exchange.fetch_closed_orders('BTC/USDT')
# 所有订单 (未成交 + 已成交)
all_orders = exchange.fetch_orders('BTC/USDT')
# 通过 ID 获取单个订单
order = exchange.fetch_order(order_id, 'BTC/USDT')
# 最近的公共交易
trades = exchange.fetch_trades('BTC/USDT', limit=10)
# 您的交易 (需要认证)
my_trades = exchange.fetch_my_trades('BTC/USDT')
# 取消单个订单
exchange.cancel_order(order_id, 'BTC/USDT')
# 取消某个交易对的所有订单
exchange.cancel_all_orders('BTC/USDT')
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())
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())
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())
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())
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())
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())
fetchTicker(symbol) - 获取单个交易对的行情fetchTickers([symbols]) - 一次性获取多个行情fetchBidsAsks([symbols]) - 获取多个交易对的最佳买/卖价fetchLastPrices([symbols]) - 获取最新价格fetchMarkPrices([symbols]) - 获取标记价格 (衍生品)fetchOrderBook(symbol, limit) - 获取订单簿fetchOrderBooks([symbols]) - 获取多个订单簿fetchL2OrderBook(symbol) - 获取二级订单簿fetchL3OrderBook(symbol) - 获取三级订单簿 (如果支持)fetchTrades(symbol, since, limit) - 获取公共交易记录fetchMyTrades(symbol, since, limit) - 获取您的交易记录 (需要认证)fetchOrderTrades(orderId, symbol) - 获取特定订单的交易记录fetchOHLCV(symbol, timeframe, since, limit) - 获取K线数据fetchIndexOHLCV(symbol, timeframe) - 获取指数价格 OHLCVfetchMarkOHLCV(symbol, timeframe) - 获取标记价格 OHLCVfetchPremiumIndexOHLCV(symbol, timeframe) - 获取溢价指数 OHLCVfetchBalance() - 获取账户余额 (需要认证)fetchAccounts() - 获取子账户fetchLedger(code, since, limit) - 获取账本历史fetchLedgerEntry(id, code) - 获取特定账本条目fetchTransactions(code, since, limit) - 获取交易记录fetchDeposits(code, since, limit) - 获取存款历史fetchWithdrawals(code, since, limit) - 获取提款历史fetchDepositsWithdrawals(code, since, limit) - 同时获取存款和提款记录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]) - 一次性创建多个订单createOrderWithTakeProfitAndStopLoss(symbol, type, side, amount, price, tpPrice, slPrice) - OCO 订单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) - 修改订单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) - 设置杠杆fetchLeverageTiers(symbols) - 获取杠杆层级fetchMarketLeverageTiers(symbol) - 市场的杠杆层级setMarginMode(marginMode, symbol) - 设置保证金模式 (全仓/逐仓)fetchMarginMode(symbol) - 获取保证金模式fetchPosition(symbol) - 获取单个持仓fetchPositions([symbols]) - 获取所有持仓fetchPositionsForSymbol(symbol) - 获取某个交易对的持仓fetchPositionHistory(symbol, since, limit) - 持仓历史fetchPositionsHistory(symbols, since, limit) - 多个持仓历史fetchPositionMode(symbol) - 获取持仓模式 (单向/对冲)setPositionMode(hedged, symbol) - 设置持仓模式closePosition(symbol, side) - 平仓closeAllPositions() - 平掉所有仓位fetchFundingRate(symbol) - 当前资金费率fetchFundingRates([symbols]) - 多个资金费率fetchFundingRateHistory(symbol, since, limit) - 资金费率历史fetchFundingHistory(symbol, since, limit) - 您的资金费支付记录fetchFundingInterval(symbol) - 资金费间隔fetchSettlementHistory(symbol, since, limit) - 结算历史fetchMySettlementHistory(symbol, since, limit) - 您的结算历史fetchOpenInterest(symbol) - 交易对的未平仓合约fetchOpenInterests([symbols]) - 多个未平仓合约fetchOpenInterestHistory(symbol, timeframe, since, limit) - 未平仓合约历史fetchLiquidations(symbol, since, limit) - 公共强平记录fetchMyLiquidations(symbol, since, limit) - 您的强平记录fetchOption(symbol) - 获取期权信息fetchOptionChain(code) - 获取期权链fetchGreeks(symbol) - 获取期权希腊值fetchVolatilityHistory(code, since, limit) - 波动率历史fetchUnderlyingAssets() - 获取标的资产fetchTradingFee(symbol) - 交易对的交易手续费fetchTradingFees([symbols]) - 多个交易对的交易手续费fetchTradingLimits([symbols]) - 交易限制fetchTransactionFee(code) - 交易/提款手续费fetchTransactionFees([codes]) - 多个交易手续费fetchDepositWithdrawFee(code) - 存款/提款手续费fetchDepositWithdrawFees([codes]) - 多个存款/提款手续费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(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) - 兑换历史fetchMarkets() - 获取所有市场fetchCurrencies() - 获取所有货币fetchTime() - 获取交易所服务器时间fetchStatus() - 获取交易所状态fetchBorrowInterest(code, symbol, since, limit) - 已支付的借贷利息fetchLongShortRatio(symbol, timeframe, since, limit) - 多空比率fetchLongShortRatioHistory(symbol, timeframe, since, limit) - 多空比率历史所有 REST 方法都有对应的 WebSocket 版本,使用 watch* 前缀:
watchTicker(symbol) - 监听单个行情watchTickers([symbols]) - 监听多个行情watchOrderBook(symbol) - 监听订单簿更新watchOrderBookForSymbols([symbols]) - 监听多个订单簿watchTrades(symbol) - 监听公共交易watchOHLCV(symbol, timeframe) - 监听K线图更新watchBidsAsks([symbols]) - 监听最佳买/卖价watchBalance() - 监听余额更新watchOrders(symbol) - 监听您的订单更新watchMyTrades(symbol) - 监听您的交易更新watchPositions([symbols]) - 监听持仓更新watchPositionsForSymbol(symbol) - 监听某个交易对的持仓标记为 🔒 的方法需要 API 凭证:
create* 方法 (创建订单,地址)cancel* 方法 (取消订单)edit* 方法 (修改订单)fetchMy* 方法 (您的交易,订单)fetchBalance, fetchLedger, fetchAccountswithdraw, transfer, depositwatchBalance, watchOrders, watchMyTrades, watchPositions并非所有交易所都支持所有方法。使用前请检查:
// 检查方法是否受支持
if (exchange.has['fetchOHLCV']) {
const candles = await exchange.fetchOHLCV('BTC/USDT', '1h')
}
// 检查多项功能
console.log(exchange.has)
// {
// fetchTicker: true,
// fetchOHLCV: true,
// fetchMyTrades: true,
// fetchPositions: false,
// ...
// }
fetch* - REST API 方法 (HTTP 请求)watch* - WebSocket 方法 (实时流)create* - 创建新资源 (订单,地址)cancel* - 取消现有资源edit* - 修改现有资源set* - 配置设置 (杠杆,保证金模式)*Ws 后缀 - WebSocket 变体 (某些交易所)CCXT 支持 HTTP、HTTPS 和 SOCKS 代理,适用于 REST 和 WebSocket 连接。
// 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'
WebSocket 连接也遵循代理设置:
exchange.httpsProxy = 'https://proxy:8080'
// WebSocket 连接将使用此代理
exchange.httpProxy = 'http://localhost:8080'
try {
await exchange.fetchTicker('BTC/USDT')
console.log('代理工作正常!')
} catch (error) {
console.error('代理连接失败:', error)
}
一些交易所提供了 REST 方法的 WebSocket 变体,用于更快的下单和管理。这些方法使用 *Ws 后缀:
创建订单:
createOrderWs - 通过 WebSocket 创建订单 (比 REST 更快)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 修改订单cancelOrderWs - 通过 WebSocket 取消订单 (比 REST 更快)cancelOrdersWs - 通过 WebSocket 取消多个订单cancelAllOrdersWs - 通过 WebSocket 取消所有订单获取数据:
fetchOrderWs - 通过 WebSocket 获取订单fetchOrdersWs - 通过 WebSocket 获取订单fetchOpenOrdersWs - 通过 WebSocket 获取未成交订单fetchClosedOrdersWs - 通过 WebSocket 获取已成交订单fetchMyTradesWs - 通过 WebSocket 获取您的交易记录fetchBalanceWs - 通过 WebSocket 获取余额fetchPositionWs - 通过 WebSocket 获取持仓fetchPositionsWs - 通过 WebSocket 获取持仓fetchPositionsForSymbolWs - 通过 WebSocket 获取某个交易对的持仓fetchTradingFeesWs - 通过 WebSocket 获取交易手续费使用 *Ws 方法当:
使用 REST 方法当:
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)
并非所有交易所都支持 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)
}
import os
# 在实例化期间 (推荐)
exchange = ccxt.binance({
'apiKey': os.environ.get('BINANCE_API_KEY'),
'secret': os.environ.get('BINANCE_SECRET'),
'enableRateLimit': True
})
# 实例化之后
exchange.apiKey = os.environ.get('BINANCE_API_KEY')
exchange.secret = os.environ.get('BINANCE_SECRET')
try:
balance = exchange.fetch_balance()
print('认证成功!')
except ccxt.AuthenticationError:
print('无效的 API 凭证')
BaseError
├─ NetworkError (可恢复 - 重试)
│ ├─ RequestTimeout
│ ├─ ExchangeNotAvailable
│ ├─ RateLimitExceeded
│ └─ DDoSProtection
└─ ExchangeError (不可恢复 - 不要重试)
├─ AuthenticationError
├─ InsufficientFunds
├─ InvalidOrder
└─ NotSupported
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))
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 凭证')
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:
raise
import ccxt
exchange = ccxt.binance({'enableRateLimit': True})
ticker = exchange.fetch_ticker('BTC/USDT')
print(ticker['last'])
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())
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())
exchange = ccxt.binance({
'enableRateLimit': True # 自动限制请求频率
})
exchange.fetch_ticker('BTC/USDT')
exchange.sleep(1000) # 等待 1 秒 (毫秒)
exchange.fetch_ticker('ETH/USDT')
print(exchange.rateLimit) # 请求之间的毫秒数
await# 错误 - 返回协程,而不是数据
async def wrong():
ticker = exchange.fetch_ticker('BTC/USDT') # 缺少 await!
print(ticker['last']) # 错误
# 正确
async def correct():
ticker = await exchange.fetch_ticker('BTC/USDT')
print(ticker['last']) # 正常工作!
# 错误 - WebSocket 需要异步
import ccxt.pro as ccxtpro
exchange = ccxtpro.binance()
ticker = exchange.watch_ticker('BTC/USDT') # 错误:需要 await!
# 正确
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())
# 错误 - 资源泄漏
async def wrong():
exchange = ccxt.binance()
await exchange.fetch_ticker('BTC/USDT')
# 忘记关闭!
# 正确
async def correct():
exchange = ccxt.binance()
try:
await exchange.fetch_ticker('BTC/USDT')
finally:
await exchange.close()
# 错误 - 阻塞事件循环
async def wrong():
exchange = ccxt.binance() # 同步导入!
ticker = exchange.fetch_ticker('BTC/USDT') # 阻塞!
# 正确
import ccxt.async_support as ccxt
async def correct():
exchange = ccxt.binance()
ticker = await exchange.fetch_ticker('BTC/USDT')
await exchange.close()
# 错误 - 浪费频率限制
while True:
ticker = exchange.fetch_ticker('BTC/USDT') # REST
print(ticker['last'])
exchange.sleep(1000)
# 正确 - 使用 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()
**1. "ModuleNotFoundError: No module named 'cc
A comprehensive guide to using CCXT in Python projects for cryptocurrency exchange integration.
pip install ccxt
pip install ccxt
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.
import ccxt
exchange = ccxt.binance()
exchange.load_markets()
ticker = exchange.fetch_ticker('BTC/USDT')
print(ticker)
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())
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())
| 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_ticker, fetch_order_book) |
When to use REST:
When to use WebSocket:
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
})
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()
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()
# 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
# 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'])
# 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
# 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)
# 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)
balance = exchange.fetch_balance()
print(balance['BTC']['free']) # Available balance
print(balance['BTC']['used']) # Balance in orders
print(balance['BTC']['total']) # Total balance
# 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')
# Recent public trades
trades = exchange.fetch_trades('BTC/USDT', limit=10)
# Your trades (requires authentication)
my_trades = exchange.fetch_my_trades('BTC/USDT')
# Cancel single order
exchange.cancel_order(order_id, 'BTC/USDT')
# Cancel all orders for a symbol
exchange.cancel_all_orders('BTC/USDT')
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())
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())
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())
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())
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())
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())
fetchTicker(symbol) - Fetch ticker for one symbolfetchTickers([symbols]) - Fetch multiple tickers at oncefetchBidsAsks([symbols]) - Fetch best bid/ask for multiple symbolsfetchLastPrices([symbols]) - Fetch last pricesfetchMarkPrices([symbols]) - Fetch mark prices (derivatives)fetchOrderBook(symbol, limit) - Fetch order bookfetchOrderBooks([symbols]) - Fetch multiple order booksfetchL2OrderBook(symbol) - Fetch level 2 order bookfetchL3OrderBook(symbol) - Fetch level 3 order book (if supported)fetchTrades(symbol, since, limit) - Fetch public tradesfetchMyTrades(symbol, since, limit) - Fetch your trades (auth required)fetchOrderTrades(orderId, symbol) - Fetch trades for specific orderfetchOHLCV(symbol, timeframe, since, limit) - Fetch candlestick datafetchIndexOHLCV(symbol, timeframe) - Fetch index price OHLCVfetchMarkOHLCV(symbol, timeframe) - Fetch mark price OHLCVfetchPremiumIndexOHLCV(symbol, timeframe) - Fetch premium index OHLCVfetchBalance() - Fetch account balance (auth required)fetchAccounts() - Fetch sub-accountsfetchLedger(code, since, limit) - Fetch ledger historyfetchLedgerEntry(id, code) - Fetch specific ledger entryfetchTransactions(code, since, limit) - Fetch transactionsfetchDeposits(code, since, limit) - Fetch deposit historyfetchWithdrawals(code, since, limit) - Fetch withdrawal historyfetchDepositsWithdrawals(code, since, limit) - Fetch both deposits and withdrawalscreateOrder(symbol, type, side, amount, price, params) - Create order (generic)createLimitOrder(symbol, side, amount, price) - Create limit ordercreateMarketOrder(symbol, side, amount) - Create market ordercreateLimitBuyOrder(symbol, amount, price) - Buy limit ordercreateLimitSellOrder(symbol, amount, price) - Sell limit ordercreateMarketBuyOrder(symbol, amount) - Buy market ordercreateMarketSellOrder(symbol, amount) - Sell market ordercreateMarketBuyOrderWithCost(symbol, cost) - Buy with specific costfetchOrder(orderId, symbol) - Fetch single orderfetchOrders(symbol, since, limit) - Fetch all ordersfetchOpenOrders(symbol, since, limit) - Fetch open ordersfetchClosedOrders(symbol, since, limit) - Fetch closed ordersfetchCanceledOrders(symbol, since, limit) - Fetch canceled ordersfetchOpenOrder(orderId, symbol) - Fetch specific open orderfetchOrdersByStatus(status, symbol) - Fetch orders by statuscancelOrder(orderId, symbol) - Cancel single ordercancelOrders([orderIds], symbol) - Cancel multiple ordersfetchBorrowRate(code) - Fetch borrow rate for marginfetchBorrowRates([codes]) - Fetch multiple borrow ratesfetchBorrowRateHistory(code, since, limit) - Historical borrow ratesfetchCrossBorrowRate(code) - Cross margin borrow ratefetchIsolatedBorrowRate(symbol, code) - Isolated margin borrow rateborrowMargin(code, amount, symbol) - Borrow marginrepayMargin(code, amount, symbol) - Repay marginfetchLeverage(symbol) - Fetch leveragesetLeverage(leverage, symbol) - Set leveragefetchPosition(symbol) - Fetch single positionfetchPositions([symbols]) - Fetch all positionsfetchPositionsForSymbol(symbol) - Fetch positions for symbolfetchPositionHistory(symbol, since, limit) - Position historyfetchPositionsHistory(symbols, since, limit) - Multiple position historyfetchPositionMode(symbol) - Fetch position mode (one-way/hedge)setPositionMode(hedged, symbol) - Set position modeclosePosition(symbol, side) - Close positioncloseAllPositions() - Close all positionsfetchFundingRate(symbol) - Current funding ratefetchFundingRates([symbols]) - Multiple funding ratesfetchFundingRateHistory(symbol, since, limit) - Funding rate historyfetchFundingHistory(symbol, since, limit) - Your funding paymentsfetchFundingInterval(symbol) - Funding intervalfetchSettlementHistory(symbol, since, limit) - Settlement historyfetchMySettlementHistory(symbol, since, limit) - Your settlement historyfetchOpenInterest(symbol) - Open interest for symbolfetchOpenInterests([symbols]) - Multiple open interestsfetchOpenInterestHistory(symbol, timeframe, since, limit) - OI historyfetchLiquidations(symbol, since, limit) - Public liquidationsfetchMyLiquidations(symbol, since, limit) - Your liquidationsfetchOption(symbol) - Fetch option infofetchOptionChain(code) - Fetch option chainfetchGreeks(symbol) - Fetch option greeksfetchVolatilityHistory(code, since, limit) - Volatility historyfetchUnderlyingAssets() - Fetch underlying assetsfetchTradingFee(symbol) - Trading fee for symbolfetchTradingFees([symbols]) - Trading fees for multiple symbolsfetchTradingLimits([symbols]) - Trading limitsfetchTransactionFee(code) - Transaction/withdrawal feefetchTransactionFees([codes]) - Multiple transaction feesfetchDepositWithdrawFee(code) - Deposit/withdrawal feefetchDepositWithdrawFees([codes]) - Multiple deposit/withdraw feesfetchDepositAddress(code, params) - Get deposit addressfetchDepositAddresses([codes]) - Multiple deposit addressesfetchDepositAddressesByNetwork(code) - Addresses by networkcreateDepositAddress(code, params) - Create new deposit addressfetchDeposit(id, code) - Fetch single depositfetchWithdrawal(id, code) - Fetch single withdrawalfetchWithdrawAddresses(code) - Fetch withdrawal addressesfetchWithdrawalWhitelist(code) - Fetch whitelistwithdraw(code, amount, address, tag, params) - Withdraw fundstransfer(code, amount, fromAccount, toAccount) - Internal transferfetchTransfer(id, code) - Fetch transfer infofetchTransfers(code, since, limit) - Fetch transfer historyfetchConvertCurrencies() - Currencies available for convertfetchConvertQuote(fromCode, toCode, amount) - Get conversion quotecreateConvertTrade(fromCode, toCode, amount) - Execute conversionfetchConvertTrade(id) - Fetch convert tradefetchConvertTradeHistory(code, since, limit) - Convert historyfetchMarkets() - Fetch all marketsfetchCurrencies() - Fetch all currenciesfetchTime() - Fetch exchange server timefetchStatus() - Fetch exchange statusfetchBorrowInterest(code, symbol, since, limit) - Borrow interest paidfetchLongShortRatio(symbol, timeframe, since, limit) - Long/short ratiofetchLongShortRatioHistory(symbol, timeframe, since, limit) - L/S ratio historyAll REST methods have WebSocket equivalents with watch* prefix:
watchTicker(symbol) - Watch single tickerwatchTickers([symbols]) - Watch multiple tickerswatchOrderBook(symbol) - Watch order book updateswatchOrderBookForSymbols([symbols]) - Watch multiple order bookswatchTrades(symbol) - Watch public tradeswatchOHLCV(symbol, timeframe) - Watch candlestick updateswatchBidsAsks([symbols]) - Watch best bid/askwatchBalance() - Watch balance updateswatchOrders(symbol) - Watch your order updateswatchMyTrades(symbol) - Watch your trade updateswatchPositions([symbols]) - Watch position updateswatchPositionsForSymbol(symbol) - Watch positions for symbolMethods marked with 🔒 require API credentials:
create* methods (creating orders, addresses)cancel* methods (canceling orders)edit* methods (modifying orders)fetchMy* methods (your trades, orders)fetchBalance, fetchLedger, fetchAccountswithdraw, transfer, depositNot 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,
// ...
// }
fetch* - REST API methods (HTTP requests)watch* - WebSocket methods (real-time streams)create* - Create new resources (orders, addresses)cancel* - Cancel existing resourcesedit* - Modify existing resourcesset* - Configure settings (leverage, margin mode)*Ws suffix - WebSocket variant (some exchanges)CCXT supports HTTP, HTTPS, and SOCKS proxies for both REST and WebSocket connections.
// 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'
WebSocket connections also respect proxy settings:
exchange.httpsProxy = 'https://proxy:8080'
// WebSocket connections will use this proxy
exchange.httpProxy = 'http://localhost:8080'
try {
await exchange.fetchTicker('BTC/USDT')
console.log('Proxy working!')
} catch (error) {
console.error('Proxy connection failed:', error)
}
Some exchanges provide WebSocket variants of REST methods for faster order placement and management. These use the *Ws suffix:
Creating Orders:
createOrderWs - Create order via WebSocket (faster than REST)createLimitOrderWs - Create limit order via WebSocketcreateMarketOrderWs - Create market order via WebSocketcreateLimitBuyOrderWs - Buy limit order via WebSocketcreateLimitSellOrderWs - Sell limit order via WebSocketcreateMarketBuyOrderWs - Buy market order via WebSocketcreateMarketSellOrderWs - Sell market order via WebSocketcreateStopLimitOrderWs - Stop-limit order via WebSocketcreateStopMarketOrderWs - Stop-market order via WebSocketManaging Orders:
editOrderWs - Edit order via WebSocketcancelOrderWs - Cancel order via WebSocket (faster than REST)cancelOrdersWs - Cancel multiple orders via WebSocketcancelAllOrdersWs - Cancel all orders via WebSocketFetching Data:
fetchOrderWs - Fetch order via WebSocketfetchOrdersWs - Fetch orders via WebSocketfetchOpenOrdersWs - Fetch open orders via WebSocketfetchClosedOrdersWs - Fetch closed orders via WebSocketfetchMyTradesWs - Fetch your trades via WebSocketfetchBalanceWs - Fetch balance via WebSocketfetchPositionWs - Fetch position via WebSocketfetchPositionsWs - Fetch positions via WebSocketfetchPositionsForSymbolWs - Fetch positions for symbol via WebSocketUse*Ws methods when:
Use REST methods when:
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)
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)
}
import os
# During instantiation (recommended)
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')
try:
balance = exchange.fetch_balance()
print('Authentication successful!')
except ccxt.AuthenticationError:
print('Invalid API credentials')
BaseError
├─ NetworkError (recoverable - retry)
│ ├─ RequestTimeout
│ ├─ ExchangeNotAvailable
│ ├─ RateLimitExceeded
│ └─ DDoSProtection
└─ ExchangeError (non-recoverable - don't retry)
├─ AuthenticationError
├─ InsufficientFunds
├─ InvalidOrder
└─ NotSupported
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))
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')
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:
raise
import ccxt
exchange = ccxt.binance({'enableRateLimit': True})
ticker = exchange.fetch_ticker('BTC/USDT')
print(ticker['last'])
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())
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())
exchange = ccxt.binance({
'enableRateLimit': True # Automatically throttles requests
})
exchange.fetch_ticker('BTC/USDT')
exchange.sleep(1000) # Wait 1 second (milliseconds)
exchange.fetch_ticker('ETH/USDT')
print(exchange.rateLimit) # Milliseconds between requests
await in Async Mode# Wrong - returns coroutine, not data
async def wrong():
ticker = exchange.fetch_ticker('BTC/USDT') # Missing await!
print(ticker['last']) # ERROR
# Correct
async def correct():
ticker = await exchange.fetch_ticker('BTC/USDT')
print(ticker['last']) # Works!
# Wrong - WebSocket requires async
import ccxt.pro as ccxtpro
exchange = ccxtpro.binance()
ticker = exchange.watch_ticker('BTC/USDT') # ERROR: Need 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())
# Wrong - resource leak
async def wrong():
exchange = ccxt.binance()
await exchange.fetch_ticker('BTC/USDT')
# Forgot to close!
# Correct
async def correct():
exchange = ccxt.binance()
try:
await exchange.fetch_ticker('BTC/USDT')
finally:
await exchange.close()
# Wrong - blocks event loop
async def wrong():
exchange = ccxt.binance() # Sync import!
ticker = exchange.fetch_ticker('BTC/USDT') # Blocking!
# Correct
import ccxt.async_support as ccxt
async def correct():
exchange = ccxt.binance()
ticker = await exchange.fetch_ticker('BTC/USDT')
await exchange.close()
# Wrong - wastes rate limits
while True:
ticker = exchange.fetch_ticker('BTC/USDT') # REST
print(ticker['last'])
exchange.sleep(1000)
# Correct - use 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()
1. "ModuleNotFoundError: No module named 'ccxt'"
pip install ccxt2. "RateLimitExceeded"
'enableRateLimit': True3. "AuthenticationError"
4. "InvalidNonce"
5. "InsufficientFunds"
balance['BTC']['free'])6. "ExchangeNotAvailable"
7. SSL/Certificate errors
pip install --upgrade certifi8. Slow performance
pip install orjson (faster JSON)pip install coincurve (faster signing)# Enable verbose logging
exchange.verbose = True
# Check exchange capabilities
print(exchange.has)
# {
# 'fetchTicker': True,
# 'fetchOrderBook': True,
# 'createOrder': True,
# ...
# }
# Check market information
print(exchange.markets['BTC/USDT'])
# Check last request/response
print(exchange.last_http_response)
print(exchange.last_json_response)
Weekly Installs
159
Repository
GitHub Stars
41.3K
First Seen
Feb 4, 2026
Security Audits
Gen Agent Trust HubPassSocketPassSnykWarn
Installed on
opencode133
gemini-cli127
github-copilot126
cursor123
codex122
kimi-cli113
Lark Drive API 使用指南:飞书云文档、Wiki、表格 Token 处理与文件管理
23,400 周安装
fetch_*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 |
createStopLimitOrder(symbol, side, amount, price, stopPrice) - Stop-limit ordercreateStopMarketOrder(symbol, side, amount, stopPrice) - Stop-market ordercreateStopLossOrder(symbol, side, amount, stopPrice) - Stop-loss ordercreateTakeProfitOrder(symbol, side, amount, takeProfitPrice) - Take-profit ordercreateTrailingAmountOrder(symbol, side, amount, trailingAmount) - Trailing stopcreateTrailingPercentOrder(symbol, side, amount, trailingPercent) - Trailing stop %createTriggerOrder(symbol, side, amount, triggerPrice) - Trigger ordercreatePostOnlyOrder(symbol, side, amount, price) - Post-only ordercreateReduceOnlyOrder(symbol, side, amount, price) - Reduce-only ordercreateOrders([orders]) - Create multiple orders at oncecreateOrderWithTakeProfitAndStopLoss(symbol, type, side, amount, price, tpPrice, slPrice) - OCO ordercancelAllOrders(symbol) - Cancel all orders for symboleditOrder(orderId, symbol, type, side, amount, price) - Modify orderfetchLeverageTiers(symbols) - Fetch leverage tiersfetchMarketLeverageTiers(symbol) - Leverage tiers for marketsetMarginMode(marginMode, symbol) - Set margin mode (cross/isolated)fetchMarginMode(symbol) - Fetch margin modedeposit(code, amount, params) - Deposit funds (if supported)watchBalance, watchOrders, watchMyTrades, watchPositionscreateStopLossOrderWs - Stop-loss order via WebSocketcreateTakeProfitOrderWs - Take-profit order via WebSocketcreateTrailingAmountOrderWs - Trailing stop via WebSocketcreateTrailingPercentOrderWs - Trailing stop % via WebSocketcreatePostOnlyOrderWs - Post-only order via WebSocketcreateReduceOnlyOrderWs - Reduce-only order via WebSocketfetchTradingFeesWs - Fetch trading fees via WebSocket