ccxt-go
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseCCXT for Go
CCXT for Go
A comprehensive guide to using CCXT in Go projects for cryptocurrency exchange integration.
一份关于在Go项目中使用CCXT集成加密货币交易所的综合指南。
Installation
安装
REST API
REST API
bash
go get github.com/ccxt/ccxt/go/v4bash
go get github.com/ccxt/ccxt/go/v4WebSocket API (ccxt.pro)
WebSocket API (ccxt.pro)
bash
go get github.com/ccxt/ccxt/go/v4/probash
go get github.com/ccxt/ccxt/go/v4/proQuick Start
快速入门
REST API
REST API
go
package main
import (
"fmt"
"github.com/ccxt/ccxt/go/v4/binance"
)
func main() {
exchange := binance.New()
markets, err := exchange.LoadMarkets()
if err != nil {
panic(err)
}
ticker, err := exchange.FetchTicker("BTC/USDT")
if err != nil {
panic(err)
}
fmt.Println(ticker)
}go
package main
import (
"fmt"
"github.com/ccxt/ccxt/go/v4/binance"
)
func main() {
exchange := binance.New()
markets, err := exchange.LoadMarkets()
if err != nil {
panic(err)
}
ticker, err := exchange.FetchTicker("BTC/USDT")
if err != nil {
panic(err)
}
fmt.Println(ticker)
}WebSocket API - Real-time Updates
WebSocket API - 实时更新
go
package main
import (
"fmt"
"github.com/ccxt/ccxt/go/v4/pro/binance"
)
func main() {
exchange := binance.New()
defer exchange.Close()
for {
ticker, err := exchange.WatchTicker("BTC/USDT")
if err != nil {
panic(err)
}
fmt.Println(ticker.Last) // Live updates!
}
}go
package main
import (
"fmt"
"github.com/ccxt/ccxt/go/v4/pro/binance"
)
func main() {
exchange := binance.New()
defer exchange.Close()
for {
ticker, err := exchange.WatchTicker("BTC/USDT")
if err != nil {
panic(err)
}
fmt.Println(ticker.Last) // Live updates!
}
}REST vs WebSocket
REST与WebSocket对比
| Feature | REST API | WebSocket API |
|---|---|---|
| Use for | One-time queries, placing orders | Real-time monitoring, live price feeds |
| Import | | |
| Methods | | |
| 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 |
Important: All methods return - always check errors!
(result, error)| 特性 | REST API | WebSocket API |
|---|---|---|
| 适用场景 | 一次性查询、下单 | 实时监控、实时价格推送 |
| 导入路径 | | |
| 方法前缀 | | |
| 速度 | 较慢(HTTP请求/响应模式) | 更快(持久连接) |
| 速率限制 | 严格(1-2次请求/秒) | 更宽松(持续流) |
| 最佳用途 | 交易、账户管理 | 价格监控、套利检测 |
重要提示: 所有方法均返回 - 务必检查错误!
(result, error)Creating Exchange Instance
创建交易所实例
REST API
REST API
go
import "github.com/ccxt/ccxt/go/v4/binance"
// Public API (no authentication)
exchange := binance.New()
exchange.EnableRateLimit = true // Recommended!
// Private API (with authentication)
exchange := binance.New()
exchange.ApiKey = "YOUR_API_KEY"
exchange.Secret = "YOUR_SECRET"
exchange.EnableRateLimit = truego
import "github.com/ccxt/ccxt/go/v4/binance"
// Public API (no authentication)
exchange := binance.New()
exchange.EnableRateLimit = true // Recommended!
// Private API (with authentication)
exchange := binance.New()
exchange.ApiKey = "YOUR_API_KEY"
exchange.Secret = "YOUR_SECRET"
exchange.EnableRateLimit = trueWebSocket API
WebSocket API
go
import "github.com/ccxt/ccxt/go/v4/pro/binance"
// Public WebSocket
exchange := binance.New()
defer exchange.Close()
// Private WebSocket (with authentication)
exchange := binance.New()
exchange.ApiKey = "YOUR_API_KEY"
exchange.Secret = "YOUR_SECRET"
defer exchange.Close()go
import "github.com/ccxt/ccxt/go/v4/pro/binance"
// Public WebSocket
exchange := binance.New()
defer exchange.Close()
// Private WebSocket (with authentication)
exchange := binance.New()
exchange.ApiKey = "YOUR_API_KEY"
exchange.Secret = "YOUR_SECRET"
defer exchange.Close()Common REST Operations
常见REST操作
Loading Markets
加载市场信息
go
// Load all available trading pairs
markets, err := exchange.LoadMarkets()
if err != nil {
panic(err)
}
// Access market information
btcMarket := exchange.Market("BTC/USDT")
fmt.Println(btcMarket.Limits.Amount.Min) // Minimum order amountgo
// Load all available trading pairs
markets, err := exchange.LoadMarkets()
if err != nil {
panic(err)
}
// Access market information
btcMarket := exchange.Market("BTC/USDT")
fmt.Println(btcMarket.Limits.Amount.Min) // Minimum order amountFetching Ticker
获取行情数据
go
// Single ticker
ticker, err := exchange.FetchTicker("BTC/USDT")
if err != nil {
panic(err)
}
fmt.Println(ticker.Last) // Last price
fmt.Println(ticker.Bid) // Best bid
fmt.Println(ticker.Ask) // Best ask
fmt.Println(ticker.Volume) // 24h volume
// Multiple tickers (if supported)
tickers, err := exchange.FetchTickers([]string{"BTC/USDT", "ETH/USDT"})go
// Single ticker
ticker, err := exchange.FetchTicker("BTC/USDT")
if err != nil {
panic(err)
}
fmt.Println(ticker.Last) // Last price
fmt.Println(ticker.Bid) // Best bid
fmt.Println(ticker.Ask) // Best ask
fmt.Println(ticker.Volume) // 24h volume
// Multiple tickers (if supported)
tickers, err := exchange.FetchTickers([]string{"BTC/USDT", "ETH/USDT"})Fetching Order Book
获取订单簿
go
// Full orderbook
orderbook, err := exchange.FetchOrderBook("BTC/USDT", nil)
if err != nil {
panic(err)
}
fmt.Println(orderbook.Bids[0]) // [price, amount]
fmt.Println(orderbook.Asks[0]) // [price, amount]
// Limited depth
limit := 5
orderbook, err := exchange.FetchOrderBook("BTC/USDT", &limit)go
// Full orderbook
orderbook, err := exchange.FetchOrderBook("BTC/USDT", nil)
if err != nil {
panic(err)
}
fmt.Println(orderbook.Bids[0]) // [price, amount]
fmt.Println(orderbook.Asks[0]) // [price, amount]
// Limited depth
limit := 5
orderbook, err := exchange.FetchOrderBook("BTC/USDT", &limit)Creating Orders
创建订单
Limit Order
限价单
go
// Buy limit order
order, err := exchange.CreateLimitBuyOrder("BTC/USDT", 0.01, 50000, nil)
if err != nil {
panic(err)
}
fmt.Println(order.Id)
// Sell limit order
order, err := exchange.CreateLimitSellOrder("BTC/USDT", 0.01, 60000, nil)
// Generic limit order
order, err := exchange.CreateOrder("BTC/USDT", "limit", "buy", 0.01, 50000, nil)go
// Buy limit order
order, err := exchange.CreateLimitBuyOrder("BTC/USDT", 0.01, 50000, nil)
if err != nil {
panic(err)
}
fmt.Println(order.Id)
// Sell limit order
order, err := exchange.CreateLimitSellOrder("BTC/USDT", 0.01, 60000, nil)
// Generic limit order
order, err := exchange.CreateOrder("BTC/USDT", "limit", "buy", 0.01, 50000, nil)Market Order
市价单
go
// Buy market order
order, err := exchange.CreateMarketBuyOrder("BTC/USDT", 0.01, nil)
// Sell market order
order, err := exchange.CreateMarketSellOrder("BTC/USDT", 0.01, nil)
// Generic market order
order, err := exchange.CreateOrder("BTC/USDT", "market", "sell", 0.01, nil, nil)go
// Buy market order
order, err := exchange.CreateMarketBuyOrder("BTC/USDT", 0.01, nil)
// Sell market order
order, err := exchange.CreateMarketSellOrder("BTC/USDT", 0.01, nil)
// Generic market order
order, err := exchange.CreateOrder("BTC/USDT", "market", "sell", 0.01, nil, nil)Fetching Balance
获取账户余额
go
balance, err := exchange.FetchBalance()
if err != nil {
panic(err)
}
fmt.Println(balance["BTC"].Free) // Available balance
fmt.Println(balance["BTC"].Used) // Balance in orders
fmt.Println(balance["BTC"].Total) // Total balancego
balance, err := exchange.FetchBalance()
if err != nil {
panic(err)
}
fmt.Println(balance["BTC"].Free) // Available balance
fmt.Println(balance["BTC"].Used) // Balance in orders
fmt.Println(balance["BTC"].Total) // Total balanceFetching Orders
获取订单信息
go
// Open orders
openOrders, err := exchange.FetchOpenOrders("BTC/USDT", nil, nil, nil)
// Closed orders
closedOrders, err := exchange.FetchClosedOrders("BTC/USDT", nil, nil, nil)
// All orders (open + closed)
allOrders, err := exchange.FetchOrders("BTC/USDT", nil, nil, nil)
// Single order by ID
order, err := exchange.FetchOrder(orderId, "BTC/USDT", nil)go
// Open orders
openOrders, err := exchange.FetchOpenOrders("BTC/USDT", nil, nil, nil)
// Closed orders
closedOrders, err := exchange.FetchClosedOrders("BTC/USDT", nil, nil, nil)
// All orders (open + closed)
allOrders, err := exchange.FetchOrders("BTC/USDT", nil, nil, nil)
// Single order by ID
order, err := exchange.FetchOrder(orderId, "BTC/USDT", nil)Fetching Trades
获取交易记录
go
// Recent public trades
limit := 10
trades, err := exchange.FetchTrades("BTC/USDT", nil, &limit, nil)
// Your trades (requires authentication)
myTrades, err := exchange.FetchMyTrades("BTC/USDT", nil, nil, nil)go
// Recent public trades
limit := 10
trades, err := exchange.FetchTrades("BTC/USDT", nil, &limit, nil)
// Your trades (requires authentication)
myTrades, err := exchange.FetchMyTrades("BTC/USDT", nil, nil, nil)Canceling Orders
取消订单
go
// Cancel single order
err := exchange.CancelOrder(orderId, "BTC/USDT", nil)
// Cancel all orders for a symbol
err := exchange.CancelAllOrders("BTC/USDT", nil)go
// Cancel single order
err := exchange.CancelOrder(orderId, "BTC/USDT", nil)
// Cancel all orders for a symbol
err := exchange.CancelAllOrders("BTC/USDT", nil)WebSocket Operations (Real-time)
WebSocket实时操作
Watching Ticker (Live Price Updates)
监控行情(实时价格更新)
go
import "github.com/ccxt/ccxt/go/v4/pro/binance"
exchange := binance.New()
defer exchange.Close()
for {
ticker, err := exchange.WatchTicker("BTC/USDT")
if err != nil {
panic(err)
}
fmt.Println(ticker.Last, ticker.Timestamp)
}go
import "github.com/ccxt/ccxt/go/v4/pro/binance"
exchange := binance.New()
defer exchange.Close()
for {
ticker, err := exchange.WatchTicker("BTC/USDT")
if err != nil {
panic(err)
}
fmt.Println(ticker.Last, ticker.Timestamp)
}Watching Order Book (Live Depth Updates)
监控订单簿(实时深度更新)
go
exchange := binance.New()
defer exchange.Close()
for {
orderbook, err := exchange.WatchOrderBook("BTC/USDT", nil)
if err != nil {
panic(err)
}
fmt.Println("Best bid:", orderbook.Bids[0])
fmt.Println("Best ask:", orderbook.Asks[0])
}go
exchange := binance.New()
defer exchange.Close()
for {
orderbook, err := exchange.WatchOrderBook("BTC/USDT", nil)
if err != nil {
panic(err)
}
fmt.Println("Best bid:", orderbook.Bids[0])
fmt.Println("Best ask:", orderbook.Asks[0])
}Watching Trades (Live Trade Stream)
监控交易(实时交易流)
go
exchange := binance.New()
defer exchange.Close()
for {
trades, err := exchange.WatchTrades("BTC/USDT", nil, nil, nil)
if err != nil {
panic(err)
}
for _, trade := range trades {
fmt.Println(trade.Price, trade.Amount, trade.Side)
}
}go
exchange := binance.New()
defer exchange.Close()
for {
trades, err := exchange.WatchTrades("BTC/USDT", nil, nil, nil)
if err != nil {
panic(err)
}
for _, trade := range trades {
fmt.Println(trade.Price, trade.Amount, trade.Side)
}
}Watching Your Orders (Live Order Updates)
监控个人订单(实时订单更新)
go
exchange := binance.New()
exchange.ApiKey = "YOUR_API_KEY"
exchange.Secret = "YOUR_SECRET"
defer exchange.Close()
for {
orders, err := exchange.WatchOrders("BTC/USDT", nil, nil, nil)
if err != nil {
panic(err)
}
for _, order := range orders {
fmt.Println(order.Id, order.Status, order.Filled)
}
}go
exchange := binance.New()
exchange.ApiKey = "YOUR_API_KEY"
exchange.Secret = "YOUR_SECRET"
defer exchange.Close()
for {
orders, err := exchange.WatchOrders("BTC/USDT", nil, nil, nil)
if err != nil {
panic(err)
}
for _, order := range orders {
fmt.Println(order.Id, order.Status, order.Filled)
}
}Watching Balance (Live Balance Updates)
监控账户余额(实时余额更新)
go
exchange := binance.New()
exchange.ApiKey = "YOUR_API_KEY"
exchange.Secret = "YOUR_SECRET"
defer exchange.Close()
for {
balance, err := exchange.WatchBalance()
if err != nil {
panic(err)
}
fmt.Println("BTC:", balance["BTC"])
fmt.Println("USDT:", balance["USDT"])
}go
exchange := binance.New()
exchange.ApiKey = "YOUR_API_KEY"
exchange.Secret = "YOUR_SECRET"
defer exchange.Close()
for {
balance, err := exchange.WatchBalance()
if err != nil {
panic(err)
}
fmt.Println("BTC:", balance["BTC"])
fmt.Println("USDT:", balance["USDT"])
}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) - - 获取杠杆层级
fetchLeverageTiers(symbols) - - 获取指定交易对的杠杆层级
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,
// ...
// }并非所有交易所都支持所有方法,使用前请检查:
// 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,
// ...
// }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 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'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 connections will use this proxyTesting 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('Proxy working!')
} catch (error) {
console.error('Proxy connection failed:', 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的速率限制消耗
- 交易策略要求延迟低于100毫秒
使用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']) {
// 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)
}Authentication
身份验证
Setting API Keys
设置API密钥
go
import "os"
// During instantiation
exchange := binance.New()
exchange.ApiKey = os.Getenv("BINANCE_API_KEY")
exchange.Secret = os.Getenv("BINANCE_SECRET")
exchange.EnableRateLimit = truego
import "os"
// During instantiation
exchange := binance.New()
exchange.ApiKey = os.Getenv("BINANCE_API_KEY")
exchange.Secret = os.Getenv("BINANCE_SECRET")
exchange.EnableRateLimit = trueTesting Authentication
测试身份验证
go
balance, err := exchange.FetchBalance()
if err != nil {
if _, ok := err.(*ccxt.AuthenticationError); ok {
fmt.Println("Invalid API credentials")
} else {
panic(err)
}
} else {
fmt.Println("Authentication successful!")
}go
balance, err := exchange.FetchBalance()
if err != nil {
if _, ok := err.(*ccxt.AuthenticationError); ok {
fmt.Println("Invalid API credentials")
} else {
panic(err)
}
} else {
fmt.Println("Authentication successful!")
}Error Handling
错误处理
Error Types
错误类型
BaseError
├─ NetworkError (recoverable - retry)
│ ├─ RequestTimeout
│ ├─ ExchangeNotAvailable
│ ├─ RateLimitExceeded
│ └─ DDoSProtection
└─ ExchangeError (non-recoverable - don't retry)
├─ AuthenticationError
├─ InsufficientFunds
├─ InvalidOrder
└─ NotSupportedBaseError
├─ NetworkError (recoverable - retry)
│ ├─ RequestTimeout
│ ├─ ExchangeNotAvailable
│ ├─ RateLimitExceeded
│ └─ DDoSProtection
└─ ExchangeError (non-recoverable - don't retry)
├─ AuthenticationError
├─ InsufficientFunds
├─ InvalidOrder
└─ NotSupportedBasic Error Handling
基础错误处理
go
import "github.com/ccxt/ccxt/go/v4/ccxt"
ticker, err := exchange.FetchTicker("BTC/USDT")
if err != nil {
switch e := err.(type) {
case *ccxt.NetworkError:
fmt.Println("Network error - retry:", e.Message)
case *ccxt.ExchangeError:
fmt.Println("Exchange error - do not retry:", e.Message)
default:
fmt.Println("Unknown error:", err)
}
}go
import "github.com/ccxt/ccxt/go/v4/ccxt"
ticker, err := exchange.FetchTicker("BTC/USDT")
if err != nil {
switch e := err.(type) {
case *ccxt.NetworkError:
fmt.Println("Network error - retry:", e.Message)
case *ccxt.ExchangeError:
fmt.Println("Exchange error - do not retry:", e.Message)
default:
fmt.Println("Unknown error:", err)
}
}Specific Error Handling
特定错误处理
go
order, err := exchange.CreateOrder("BTC/USDT", "limit", "buy", 0.01, 50000, nil)
if err != nil {
switch err.(type) {
case *ccxt.InsufficientFunds:
fmt.Println("Not enough balance")
case *ccxt.InvalidOrder:
fmt.Println("Invalid order parameters")
case *ccxt.RateLimitExceeded:
fmt.Println("Rate limit hit - wait before retrying")
time.Sleep(1 * time.Second)
case *ccxt.AuthenticationError:
fmt.Println("Check your API credentials")
default:
panic(err)
}
}go
order, err := exchange.CreateOrder("BTC/USDT", "limit", "buy", 0.01, 50000, nil)
if err != nil {
switch err.(type) {
case *ccxt.InsufficientFunds:
fmt.Println("Not enough balance")
case *ccxt.InvalidOrder:
fmt.Println("Invalid order parameters")
case *ccxt.RateLimitExceeded:
fmt.Println("Rate limit hit - wait before retrying")
time.Sleep(1 * time.Second)
case *ccxt.AuthenticationError:
fmt.Println("Check your API credentials")
default:
panic(err)
}
}Retry Logic for Network Errors
网络错误重试逻辑
go
import "time"
func fetchWithRetry(exchange *binance.Exchange, maxRetries int) (*ccxt.Ticker, error) {
for i := 0; i < maxRetries; i++ {
ticker, err := exchange.FetchTicker("BTC/USDT")
if err == nil {
return ticker, nil
}
if _, ok := err.(*ccxt.NetworkError); ok && i < maxRetries-1 {
fmt.Printf("Retry %d/%d\n", i+1, maxRetries)
time.Sleep(time.Duration(i+1) * time.Second) // Exponential backoff
} else {
return nil, err
}
}
return nil, fmt.Errorf("all retries failed")
}go
import "time"
func fetchWithRetry(exchange *binance.Exchange, maxRetries int) (*ccxt.Ticker, error) {
for i := 0; i < maxRetries; i++ {
ticker, err := exchange.FetchTicker("BTC/USDT")
if err == nil {
return ticker, nil
}
if _, ok := err.(*ccxt.NetworkError); ok && i < maxRetries-1 {
fmt.Printf("Retry %d/%d\n", i+1, maxRetries)
time.Sleep(time.Duration(i+1) * time.Second) // Exponential backoff
} else {
return nil, err
}
}
return nil, fmt.Errorf("all retries failed")
}Rate Limiting
速率限制
Built-in Rate Limiter (Recommended)
内置速率限制器(推荐)
go
exchange := binance.New()
exchange.EnableRateLimit = true // Automatically throttles requestsgo
exchange := binance.New()
exchange.EnableRateLimit = true // Automatically throttles requestsManual Delays
手动延迟
go
import "time"
exchange.FetchTicker("BTC/USDT")
time.Sleep(time.Duration(exchange.RateLimit) * time.Millisecond)
exchange.FetchTicker("ETH/USDT")go
import "time"
exchange.FetchTicker("BTC/USDT")
time.Sleep(time.Duration(exchange.RateLimit) * time.Millisecond)
exchange.FetchTicker("ETH/USDT")Checking Rate Limit
检查速率限制
go
fmt.Println(exchange.RateLimit) // Milliseconds between requestsgo
fmt.Println(exchange.RateLimit) // Milliseconds between requestsCommon Pitfalls
常见陷阱
Not Checking Error Returns
未检查错误返回
go
// Wrong - ignores errors
ticker, _ := exchange.FetchTicker("BTC/USDT")
fmt.Println(ticker.Last) // May panic if ticker is nil!
// Correct - check errors
ticker, err := exchange.FetchTicker("BTC/USDT")
if err != nil {
panic(err)
}
fmt.Println(ticker.Last)go
// Wrong - ignores errors
ticker, _ := exchange.FetchTicker("BTC/USDT")
fmt.Println(ticker.Last) // May panic if ticker is nil!
// Correct - check errors
ticker, err := exchange.FetchTicker("BTC/USDT")
if err != nil {
panic(err)
}
fmt.Println(ticker.Last)Wrong Import Path
错误的导入路径
go
// Wrong - missing /v4
import "github.com/ccxt/ccxt/go/binance" // ERROR!
// Correct - must include /v4
import "github.com/ccxt/ccxt/go/v4/binance"
// Correct - WebSocket with /v4/pro
import "github.com/ccxt/ccxt/go/v4/pro/binance"go
// Wrong - missing /v4
import "github.com/ccxt/ccxt/go/binance" // ERROR!
// Correct - must include /v4
import "github.com/ccxt/ccxt/go/v4/binance"
// Correct - WebSocket with /v4/pro
import "github.com/ccxt/ccxt/go/v4/pro/binance"Using REST for Real-time Monitoring
使用REST进行实时监控
go
// Wrong - wastes rate limits
for {
ticker, _ := exchange.FetchTicker("BTC/USDT") // REST
fmt.Println(ticker.Last)
time.Sleep(1 * time.Second)
}
// Correct - use WebSocket
import "github.com/ccxt/ccxt/go/v4/pro/binance"
exchange := binance.New()
defer exchange.Close()
for {
ticker, err := exchange.WatchTicker("BTC/USDT") // WebSocket
if err != nil {
panic(err)
}
fmt.Println(ticker.Last)
}go
// Wrong - wastes rate limits
for {
ticker, _ := exchange.FetchTicker("BTC/USDT") // REST
fmt.Println(ticker.Last)
time.Sleep(1 * time.Second)
}
// Correct - use WebSocket
import "github.com/ccxt/ccxt/go/v4/pro/binance"
exchange := binance.New()
defer exchange.Close()
for {
ticker, err := exchange.WatchTicker("BTC/USDT") // WebSocket
if err != nil {
panic(err)
}
fmt.Println(ticker.Last)
}Not Closing WebSocket Connections
未关闭WebSocket连接
go
// Wrong - memory leak
exchange := binance.New()
ticker, _ := exchange.WatchTicker("BTC/USDT")
// Forgot to close!
// Correct - always defer Close()
exchange := binance.New()
defer exchange.Close()
for {
ticker, err := exchange.WatchTicker("BTC/USDT")
if err != nil {
break
}
fmt.Println(ticker.Last)
}go
// Wrong - memory leak
exchange := binance.New()
ticker, _ := exchange.WatchTicker("BTC/USDT")
// Forgot to close!
// Correct - always defer Close()
exchange := binance.New()
defer exchange.Close()
for {
ticker, err := exchange.WatchTicker("BTC/USDT")
if err != nil {
break
}
fmt.Println(ticker.Last)
}Incorrect Symbol Format
错误的交易对格式
go
// Wrong symbol formats
"BTCUSDT" // Wrong - no separator
"BTC-USDT" // Wrong - dash separator
"btc/usdt" // Wrong - lowercase
// Correct symbol format
"BTC/USDT" // Unified CCXT formatgo
// Wrong symbol formats
"BTCUSDT" // Wrong - no separator
"BTC-USDT" // Wrong - dash separator
"btc/usdt" // Wrong - lowercase
// Correct symbol format
"BTC/USDT" // Unified CCXT formatTroubleshooting
故障排查
Common Issues
常见问题
1. "package github.com/ccxt/ccxt/go/v4/binance: cannot find package"
- Solution: Run
go get github.com/ccxt/ccxt/go/v4
2. "RateLimitExceeded"
- Solution: Set
exchange.EnableRateLimit = true
3. "AuthenticationError"
- Solution: Check API key and secret
- Verify API key permissions on exchange
- Check system clock is synced
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
1. "package github.com/ccxt/ccxt/go/v4/binance: cannot find package"
- 解决方案:执行
go get github.com/ccxt/ccxt/go/v4
2. "RateLimitExceeded"
- 解决方案:设置
exchange.EnableRateLimit = true
3. "AuthenticationError"
- 解决方案:检查API密钥和密钥
- 验证API密钥在交易所的权限
- 检查系统时钟是否同步
4. "InvalidNonce"
- 解决方案:同步系统时钟
- 每个API密钥仅使用一个交易所实例
5. "InsufficientFunds"
- 解决方案:检查可用余额()
balance["BTC"].Free - 考虑交易手续费
6. "ExchangeNotAvailable"
- 解决方案:检查交易所状态/维护情况
- 延迟后重试
Debugging
调试
go
// Enable verbose logging
exchange.Verbose = true
// Check exchange capabilities
fmt.Println(exchange.Has)
// map[string]bool{
// "fetchTicker": true,
// "fetchOrderBook": true,
// "createOrder": true,
// ...
// }
// Check market information
market := exchange.Markets["BTC/USDT"]
fmt.Println(market)
// Check last request/response
fmt.Println(exchange.LastHttpResponse)
fmt.Println(exchange.LastJsonResponse)go
// Enable verbose logging
exchange.Verbose = true
// Check exchange capabilities
fmt.Println(exchange.Has)
// map[string]bool{
// "fetchTicker": true,
// "fetchOrderBook": true,
// "createOrder": true,
// ...
// }
// Check market information
market := exchange.Markets["BTC/USDT"]
fmt.Println(market)
// Check last request/response
fmt.Println(exchange.LastHttpResponse)
fmt.Println(exchange.LastJsonResponse)