Skip to content

Repository files navigation

bt_api_binance

PyPI VersionPython VersionsLicenseCIDocs


bt_api_binance

Binance exchange plugin for bt_api — Unified REST and WebSocket API for Spot, Futures, Margin, Options, and more.

bt_api_binance is a runtime plugin for bt_api that connects to Binance exchange. It depends on bt_api_base for core infrastructure. It also ships BinanceDirectClient for standalone use without the full bt_api framework.

ResourceLink
English Docshttps://bt-api-binance.readthedocs.io/
Chinese Docshttps://bt-api-binance.readthedocs.io/zh/latest/
GitHubhttps://github.com/cloudQuant/bt_api_binance
PyPIhttps://pypi.org/project/bt_api_binance/
Issueshttps://github.com/cloudQuant/bt_api_binance/issues
bt_api_basehttps://bt-api-base.readthedocs.io/
Main Projecthttps://github.com/cloudQuant/bt_api_py

Features

13 Asset Types

Asset TypeCodeRESTWebSocketDescription
SpotBINANCE___SPOTSpot trading
USDT-M FuturesBINANCE___SWAPUSDT-margined perpetual futures
COIN-M FuturesBINANCE___COIN_MCoin-margined perpetual futures
Cross/Isolated MarginBINANCE___MARGINMargin trading
OptionsBINANCE___OPTIONVanilla options
TWAP / VWAPBINANCE___ALGOAlgo orders
Grid TradingBINANCE___GRIDGrid trading strategies
Staking / LDEXBINANCE___STAKINGStaking and leveraged staking
MiningBINANCE___MININGMining pool API
VIP LoansBINANCE___VIP_LOANVIP lending
WalletBINANCE___WALLETAsset management
Sub-AccountsBINANCE___SUB_ACCOUNTSub-account management
Portfolio MarginBINANCE___PORTFOLIOPortfolio margin

Dual API Modes

  • REST API — Synchronous polling for order management, balance queries, historical data
  • WebSocket API — Real-time streaming for ticker, order book, k-lines, trades, account updates

Plugin Architecture

Auto-registers at import time via ExchangeRegistry. Works seamlessly with BtApi:

frombt_api_pyimportBtApiapi=BtApi(exchange_kwargs={
"BINANCE___SPOT": {
"api_key": "your_key",
"secret": "your_secret",
"testnet": True,
}
})
ticker=api.get_tick("BINANCE___SPOT", "BTCUSDT")
balance=api.get_balance("BINANCE___SPOT")
order=api.make_order(exchange_name="BINANCE___SPOT", symbol="BTCUSDT", volume=0.001, price=50000, order_type="limit")

Standalone Direct Client

frombt_api_binanceimportBinanceApiclient=BinanceApi(
api_key="your_api_key",
secret_key="your_secret",
asset_type="SPOT",
testnet=True,
)
client.connect()
client.subscribe_symbols(["BTCUSDT", "ETHUSDT"])
whileTrue:
channel, data=client.poll_output(timeout=1.0)
ifchannel=="market":
print(f"{data['symbol']}: {data['price']}")

Unified Data Containers

All exchange responses normalized to bt_api_base container types:

  • TickContainer — 24hr rolling ticker
  • OrderBookContainer — Order book depth
  • BarContainer — K-line/candlestick
  • TradeContainer — Individual trades
  • OrderContainer — Order status and fills
  • PositionContainer — Futures/margin positions
  • AccountBalanceContainer — Asset balances
  • FundingRateContainer / MarkPriceContainer — Perpetual futures
  • IncomeContainer — PnL, funding fees, commissions

Installation

From PyPI (Recommended)

pip install bt_api_binance

From Source

git clone https://github.com/cloudQuant/bt_api_binance
cd bt_api_binance
pip install -e .

Requirements

  • Python 3.93.14
  • bt_api_base >= 0.15
  • httpx for HTTP client
  • websockets for WebSocket client

Quick Start

1. Install

pip install bt_api_binance

2. Get ticker (public — no API key needed)

frombt_api_binanceimportBinanceApiclient=BinanceApi(asset_type="SPOT")
client.connect()
btc=client.get_ticker("BTCUSDT")
print(f"BTCUSDT price: {btc['price']}")

3. Place an order (requires API key)

frombt_api_binanceimportBinanceApiclient=BinanceApi(
api_key="your_api_key",
secret_key="your_secret",
asset_type="SWAP", # USDT-M futurestestnet=True,
)
client.connect()
client.set_leverage("BTCUSDT", leverage=10)
order=client.make_order(
symbol="BTCUSDT",
side="BUY",
order_type="LIMIT",
price=67000,
qty=0.001,
)
print(f"Order placed: {order['order_id']}")

4. Real-time WebSocket

frombt_api_binanceimportBinanceApiclient=BinanceApi(asset_type="SPOT", testnet=True)
client.connect()
client.subscribe_symbols(["BTCUSDT", "ETHUSDT"], topics=["ticker", "kline_1m"])
whileTrue:
channel, data=client.poll_output(timeout=1.0)
ifchannel=="market":
if"interval"indata:
print(f"Kline {data['interval']}: close={data['close']}")
else:
print(f"Ticker: {data['price']}")

5. bt_api Plugin Integration

frombt_api_pyimportBtApiapi=BtApi(exchange_kwargs={
"BINANCE___SPOT": {"api_key": "key", "secret": "secret", "testnet": True}
})
# REST callsticker=api.get_tick("BINANCE___SPOT", "BTCUSDT")
balance=api.get_balance("BINANCE___SPOT")
# WebSocket subscriptionapi.subscribe("BINANCE___SPOT___BTCUSDT", [
{"topic": "ticker", "symbol": "BTCUSDT"},
{"topic": "depth", "symbol": "BTCUSDT", "depth": 20},
])
queue=api.get_data_queue("BINANCE___SPOT")
msg=queue.get(timeout=10)

Architecture

bt_api_binance/
├── client.py # BinanceDirectClient — standalone REST + WebSocket client
├── plugin.py # register_plugin() — bt_api plugin entry point
├── registry_registration.py # register_binance() — feeds / exchange_data / balance_handler registration
├── exchange_data/
│ └── binance_exchange_data.py # BinanceExchangeData (base) + 13 asset-type subclasses
├── feeds/
│ ├── spot.py # BinanceRequestDataSpot, BinanceMarketWssDataSpot, BinanceAccountWssDataSpot
│ ├── swap.py # USDT-M futures feeds
│ ├── coin_m.py # COIN-M futures feeds
│ ├── margin.py # Margin feeds
│ ├── option.py # Options feeds
│ ├── algo.py # Algo order feeds (REST-only)
│ ├── grid.py # Grid trading feeds (REST-only)
│ ├── staking.py # Staking feeds (REST-only)
│ ├── mining.py # Mining feeds (REST-only)
│ ├── vip_loan.py # VIP loan feeds (REST-only)
│ ├── wallet.py # Wallet feeds (REST-only)
│ ├── sub_account.py # Sub-account feeds (REST-only)
│ ├── portfolio.py # Portfolio margin feeds (REST-only)
│ ├── request_base.py # RequestData base class
│ ├── market_wss_base.py # MarketWssData base class
│ └── account_wss_base.py # AccountWssData base class
├── containers/ # 12 normalized data container types
├── gateway/
│ └── adapter.py # BinanceGatewayAdapter(PluginGatewayAdapter)
├── errors/
│ └── binance_translator.py # BinanceErrorTranslator → bt_api_base.ApiError
└── configs/
└── binance.yaml # Full YAML config (REST/WSS paths, rate limits, for all 13 asset types)

Supported Operations

CategoryOperationNotes
Market Dataget_ticker24hr rolling ticker
get_orderbookDepth: 5/10/20/50/100/500/1000/5000
get_barsIntervals: 1m–1M
get_tradesRecent trade history
get_funding_rateFutures only
get_mark_priceFutures only
Accountget_balanceAll asset balances
get_accountFull account info
get_positionFutures/margin positions
get_open_ordersAll open orders
get_orderSingle order by ID
Tradingmake_orderLIMIT/MARKET/STOP/TAKE_PROFIT and variants
cancel_orderCancel single order
cancel_ordersCancel all open orders
set_leverageFutures only
set_margin_typeCross/isolated
add_marginAdd position margin
WebSocketsubscribe_symbolsMarket data streams
poll_outputBlocking/non-blocking output poll
get_data_queueRaw Queue access

Supported Binance Symbols

All Binance trading pairs are supported, including:

  • Spot: BTCUSDT, ETHUSDT, BNBUSDT, SOLUSDT, XRPUSDT ...
  • USDT-M Futures: BTCUSDT, ETHUSDT, SOLUSDT, BNBUSDT ... (200+ pairs)
  • COIN-M Futures: BTCUSD, ETHUSD, SOLUSD ... (100+ pairs)
  • Options: All listed option contracts
  • Margin: All cross and isolated margin pairs

Error Handling

All Binance API errors are translated to bt_api_base ApiError subclasses:

Binance CodeErrorDescription
-1000API_ERRORUnknown error
-1003RATE_LIMITRate limit exceeded
-1013INVALID_PARAMETERInvalid quantity
-1021TIMESTAMP_INVALIDInvalid timestamp
-1022SIGNATURE_INVALIDInvalid signature
-1102API_KEY_MISSINGAPI key not provided
-2013ORDER_NOT_FOUNDOrder does not exist
-2014API_KEY_INVALIDInvalid API key
-2019MARGIN_INSUFFICIENTInsufficient margin
-2020BALANCE_INSUFFICIENTInsufficient balance
-2026LEVERAGE_INVALIDInvalid leverage
-9000RATE_LIMITExchange rate limit

Rate Limits

Asset TypeRequests/secOrders/sec
SPOT1200100
SWAP2400150
COIN_M2400150
MARGIN1200100
OPTION120050
ALGO1200100
GRID20020
Others20020

Documentation

DocLink
Englishhttps://bt-api-binance.readthedocs.io/
中文https://bt-api-binance.readthedocs.io/zh/latest/
API Referencehttps://bt-api-binance.readthedocs.io/api/client/
bt_api_basehttps://bt-api-base.readthedocs.io/
Main Projecthttps://cloudquant.github.io/bt_api_py/

License

MIT — see LICENSE.


Support



中文

bt_api 的 Binance 交易所插件 — 为现货合约杠杆期权等提供统一的 REST 和 WebSocket API。

bt_api_binancebt_api 的运行时插件,连接 Binance 交易所。依赖 bt_api_base 提供核心基础设施。同时提供 BinanceDirectClient,可独立使用无需完整 bt_api 框架。

资源链接
英文文档https://bt-api-binance.readthedocs.io/
中文文档https://bt-api-binance.readthedocs.io/zh/latest/
GitHubhttps://github.com/cloudQuant/bt_api_binance
PyPIhttps://pypi.org/project/bt_api_binance/
问题反馈https://github.com/cloudQuant/bt_api_binance/issues
bt_api_basehttps://bt-api-base.readthedocs.io/
主项目https://github.com/cloudQuant/bt_api_py

功能特点

13 种资产类型

资产类型代码RESTWebSocket说明
现货BINANCE___SPOT现货交易
U本位永续BINANCE___SWAPUSDT 保证金永续合约
币本位永续BINANCE___COIN_M币种保证金永续合约
全仓/逐仓杠杆BINANCE___MARGIN杠杆交易
期权BINANCE___OPTION欧式期权
TWAP / VWAPBINANCE___ALGO算法单
网格交易BINANCE___GRID网格策略
质押理财BINANCE___STAKING活期/定期质押
矿池BINANCE___MINING挖矿API
VIP借贷BINANCE___VIP_LOANVIP借币
钱包BINANCE___WALLET资产管理
子账户BINANCE___SUB_ACCOUNT子账户管理
组合保证金BINANCE___PORTFOLIO组合保证金账户

双 API 模式

  • REST API — 同步轮询:订单管理、余额查询、历史数据
  • WebSocket API — 实时流:行情、订单簿、K线、交易、账户更新

插件架构

通过 ExchangeRegistry 在导入时自动注册,与 BtApi 无缝协作:

frombt_api_pyimportBtApiapi=BtApi(exchange_kwargs={
"BINANCE___SPOT": {
"api_key": "your_key",
"secret": "your_secret",
"testnet": True,
}
})
ticker=api.get_tick("BINANCE___SPOT", "BTCUSDT")
balance=api.get_balance("BINANCE___SPOT")
order=api.make_order(exchange_name="BINANCE___SPOT", symbol="BTCUSDT", volume=0.001, price=50000, order_type="limit")

独立直接客户端

frombt_api_binanceimportBinanceApiclient=BinanceApi(
api_key="your_api_key",
secret_key="your_secret",
asset_type="SPOT",
testnet=True,
)
client.connect()
client.subscribe_symbols(["BTCUSDT", "ETHUSDT"])
whileTrue:
channel, data=client.poll_output(timeout=1.0)
ifchannel=="market":
print(f"{data['symbol']}: {data['price']}")

统一数据容器

所有交易所响应规范化为 bt_api_base 容器类型:

  • TickContainer — 24小时滚动行情
  • OrderBookContainer — 订单簿深度
  • BarContainer — K线/蜡烛图
  • TradeContainer — 逐笔成交
  • OrderContainer — 订单状态和成交
  • PositionContainer — 合约/杠杆持仓
  • AccountBalanceContainer — 资产余额
  • FundingRateContainer / MarkPriceContainer — 永续合约
  • IncomeContainer — 收益、资金费、佣金

安装

从 PyPI 安装(推荐)

pip install bt_api_binance

从源码安装

git clone https://github.com/cloudQuant/bt_api_binance
cd bt_api_binance
pip install -e .

系统要求

  • Python 3.93.14
  • bt_api_base >= 0.15
  • httpx HTTP 客户端
  • websockets WebSocket 客户端

快速开始

1. 安装

pip install bt_api_binance

2. 获取行情(公开接口,无需 API key)

frombt_api_binanceimportBinanceApiclient=BinanceApi(asset_type="SPOT")
client.connect()
btc=client.get_ticker("BTCUSDT")
print(f"BTCUSDT 价格: {btc['price']}")

3. 下单交易(需要 API key)

frombt_api_binanceimportBinanceApiclient=BinanceApi(
api_key="your_api_key",
secret_key="your_secret",
asset_type="SWAP", # U本位永续testnet=True,
)
client.connect()
client.set_leverage("BTCUSDT", leverage=10)
order=client.make_order(
symbol="BTCUSDT",
side="BUY",
order_type="LIMIT",
price=67000,
qty=0.001,
)
print(f"订单已下单: {order['order_id']}")

4. 实时 WebSocket

frombt_api_binanceimportBinanceApiclient=BinanceApi(asset_type="SPOT", testnet=True)
client.connect()
client.subscribe_symbols(["BTCUSDT", "ETHUSDT"], topics=["ticker", "kline_1m"])
whileTrue:
channel, data=client.poll_output(timeout=1.0)
ifchannel=="market":
if"interval"indata:
print(f"K线 {data['interval']}: close={data['close']}")
else:
print(f"行情: {data['price']}")

5. bt_api 插件集成

frombt_api_pyimportBtApiapi=BtApi(exchange_kwargs={
"BINANCE___SPOT": {"api_key": "key", "secret": "secret", "testnet": True}
})
# REST 调用ticker=api.get_tick("BINANCE___SPOT", "BTCUSDT")
balance=api.get_balance("BINANCE___SPOT")
# WebSocket 订阅api.subscribe("BINANCE___SPOT___BTCUSDT", [
{"topic": "ticker", "symbol": "BTCUSDT"},
{"topic": "depth", "symbol": "BTCUSDT", "depth": 20},
])
queue=api.get_data_queue("BINANCE___SPOT")
msg=queue.get(timeout=10)

架构

bt_api_binance/
├── client.py # BinanceDirectClient — 独立 REST + WebSocket 客户端
├── plugin.py # register_plugin() — bt_api 插件入口
├── registry_registration.py # register_binance() — feeds / exchange_data / balance_handler 注册
├── exchange_data/
│ └── binance_exchange_data.py # BinanceExchangeData(基类)+ 13 个资产类型子类
├── feeds/
│ ├── spot.py # BinanceRequestDataSpot, BinanceMarketWssDataSpot, BinanceAccountWssDataSpot
│ ├── swap.py # U本位合约 feeds
│ ├── coin_m.py # 币本位合约 feeds
│ ├── margin.py # 杠杆 feeds
│ ├── option.py # 期权 feeds
│ ├── algo.py # 算法单 feeds(仅REST)
│ ├── grid.py # 网格交易 feeds(仅REST)
│ ├── staking.py # 质押 feeds(仅REST)
│ ├── mining.py # 矿池 feeds(仅REST)
│ ├── vip_loan.py # VIP借贷 feeds(仅REST)
│ ├── wallet.py # 钱包 feeds(仅REST)
│ ├── sub_account.py # 子账户 feeds(仅REST)
│ ├── portfolio.py # 组合保证金 feeds(仅REST)
│ ├── request_base.py # RequestData 基类
│ ├── market_wss_base.py # MarketWssData 基类
│ └── account_wss_base.py # AccountWssData 基类
├── containers/ # 12 种规范化数据容器类型
├── gateway/
│ └── adapter.py # BinanceGatewayAdapter(PluginGatewayAdapter)
├── errors/
│ └── binance_translator.py # BinanceErrorTranslator → bt_api_base.ApiError
└── configs/
└── binance.yaml # 完整 YAML 配置(13 种资产类型的 REST/WSS 路径、限流)

支持的操作

类别操作说明
行情数据get_ticker24小时滚动行情
get_orderbook深度: 5/10/20/50/100/500/1000/5000
get_bars周期: 1m–1M
get_trades近期成交历史
get_funding_rate仅合约
get_mark_price仅合约
账户get_balance所有资产余额
get_account完整账户信息
get_position合约/杠杆持仓
get_open_orders所有挂单
get_order按ID查询单笔订单
交易make_order限价/市价/止损/止盈及其市价变体
cancel_order撤销单笔订单
cancel_orders撤销所有挂单
set_leverage仅合约
set_margin_type全仓/逐仓
add_margin增加持仓保证金
WebSocketsubscribe_symbols行情数据流订阅
poll_output阻塞/非阻塞输出轮询
get_data_queue原始 Queue 访问

支持的 Binance 交易对

全部 Binance 交易对均支持,包括:

  • 现货: BTCUSDT, ETHUSDT, BNBUSDT, SOLUSDT, XRPUSDT ...
  • U本位合约: BTCUSDT, ETHUSDT, SOLUSDT, BNBUSDT ... (200+ 对)
  • 币本位合约: BTCUSD, ETHUSD, SOLUSD ... (100+ 对)
  • 期权: 所有上市期权合约
  • 杠杆: 所有全仓和逐仓交易对

错误处理

所有 Binance API 错误均翻译为 bt_api_base ApiError 子类:

Binance 错误码错误类型说明
-1000API_ERROR未知错误
-1003RATE_LIMIT请求过于频繁
-1013INVALID_PARAMETER无效数量
-1021TIMESTAMP_INVALID无效时间戳
-1022SIGNATURE_INVALID无效签名
-1102API_KEY_MISSING未提供 API key
-2013ORDER_NOT_FOUND订单不存在
-2014API_KEY_INVALIDAPI key 无效
-2019MARGIN_INSUFFICIENT保证金不足
-2020BALANCE_INSUFFICIENT余额不足
-2026LEVERAGE_INVALID无效杠杆
-9000RATE_LIMIT交易所限流

限流配置

资产类型请求/秒订单/秒
现货1200100
U本位永续2400150
币本位永续2400150
杠杆1200100
期权120050
算法单1200100
网格交易20020
其他20020

文档

文档链接
英文文档https://bt-api-binance.readthedocs.io/
中文文档https://bt-api-binance.readthedocs.io/zh/latest/
API 参考https://bt-api-binance.readthedocs.io/api/client/
bt_api_basehttps://bt-api-base.readthedocs.io/
主项目https://cloudquant.github.io/bt_api_py/

许可证

MIT — 详见 LICENSE


技术支持

About

binance api for bt_api_py

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages