Core API Reference¶
BtApi - Main Interface¶
The unified API for all exchanges.
Initialization¶
api = BtApi(exchange_kwargs={
"BINANCE___SPOT": {
"api_key": "key",
"secret": "secret",
"testnet": True
}
})
Market Data Methods¶
Get Ticker¶
ticker = api.get_tick("BINANCE___SPOT", "BTCUSDT")
ticker.init_data()
price = ticker.get_last_price()
volume = ticker.get_volume()
Get Order Book¶
depth = api.get_depth("BINANCE___SPOT", "BTCUSDT", limit=10)
depth.init_data()
best_bid = depth.get_bids()[0]
best_ask = depth.get_asks()[0]
Get Kline Data¶
bars = api.get_kline("BINANCE___SPOT", "BTCUSDT", "1h", limit=24)
for bar in bars:
bar.init_data()
print(f"{bar.get_timestamp()}: O={bar.get_open()}, C={bar.get_close()}")
Trading Methods¶
Place Order¶
# Market order
order = api.make_order(
exchange_name="BINANCE___SPOT",
symbol="BTCUSDT",
volume=0.001,
order_type="market",
side="buy"
)
# Limit order
order = api.make_order(
exchange_name="BINANCE___SPOT",
symbol="BTCUSDT",
volume=0.001,
price=50000,
order_type="limit",
side="sell"
)
Cancel Order¶
Query Order¶
Account Methods¶
Get Balance¶
balance = api.get_balance("BINANCE___SPOT", "USDT")
balance.init_data()
print(f"Available: {balance.get_free_balance()}")
Get Account Info¶
WebSocket Methods¶
Stream Ticker¶
async for ticker in api.stream_ticker("BINANCE___SPOT", "BTCUSDT"):
ticker.init_data()
print(f"Price: {ticker.get_last_price()}")
Stream Order Book¶
async for depth in api.stream_depth("BINANCE___SPOT", "BTCUSDT"):
depth.init_data()
print(f"Spread: {depth.get_asks()[0][0] - depth.get_bids()[0][0]}")
Stream Trades¶
async for trade in api.stream_trades("BINANCE___SPOT", "BTCUSDT"):
trade.init_data()
print(f"Trade: {trade.get_price()} @ {trade.get_quantity()}")
Multi-Exchange Methods¶
Get All Tickers¶
all_prices = api.get_all_ticks("BTCUSDT")
for exchange, ticker in all_prices.items():
ticker.init_data()
print(f"{exchange}: ${ticker.get_last_price()}")
Async Methods¶
All methods have async versions:
ticker = await api.async_get_tick("BINANCE___SPOT", "BTCUSDT")
order = await api.async_make_order(...)
balance = await api.async_get_balance("BINANCE___SPOT", "USDT")
Data Containers¶
TickerData¶
get_symbol()- Trading symbolget_last_price()- Last priceget_bid_price()- Best bidget_ask_price()- Best askget_volume()- 24h volumeget_price_change()- 24h change %
OrderData¶
get_order_id()- Order IDget_symbol()- Symbolget_order_type()- Order typeget_side()- Buy/Sellget_quantity()- Quantityget_price()- Priceget_filled_quantity()- Filled amountget_status()- Order status
BalanceData¶
get_asset()- Asset nameget_free_balance()- Available balanceget_locked_balance()- Locked balanceget_total_balance()- Total balance
Error Handling¶
Common Exceptions¶
BtApiError- Base exceptionExchangeNotFoundError- Exchange not foundOrderError- Order operation failedInsufficientBalanceError- Insufficient fundsRateLimitError- Rate limit exceededWebSocketError- WebSocket connection failed
Error Handling Pattern¶
try:
ticker = api.get_tick("BINANCE___SPOT", "BTCUSDT")
except ExchangeNotFoundError:
print("Exchange not supported")
except RateLimitError:
print("Rate limit exceeded")
except Exception as e:
print(f"Error: {e}")
Exchange Names¶
Follow the pattern: EXCHANGE___TYPE
Examples: - BINANCE___SPOT - Binance Spot - BINANCE___USDM_SWAP - Binance USDT Futures - OKX___SPOT - OKX Spot - CTP___FUTURE - CTP Futures - IB_WEB___STK - Interactive Brokers Stocks
Need more details? Check our complete examples.