crypto_exc_all
统一加密货币交易所 SDK facade。外部业务只依赖 crypto_exc_all,由根 crate 自动加载不同交易所的 API key,并在内部转成对应的 okx_rs / binance_rs / bitget_rs client。
发布结构
本项目按三层发布:
okx_rs: OKX 交易所 SDK crate。binance_rs: Binance USDⓈ-M Futures SDK crate。bitget_rs: Bitget V2 Futures SDK crate。crypto_exc_all: 统一入口 crate,通过版本依赖引用各交易所 SDK。
本地开发使用 path + version 依赖;发布时先发布子交易所 crate,再发布 crypto_exc_all。
[]
= "0.1"
当前根 crate 的默认 feature 会启用 OKX、Binance 和 Bitget:
= { = "0.1", = true }
只启用 Binance:
= { = "0.1", = false, = ["binance"] }
只启用 Bitget:
= { = "0.1", = false, = ["bitget"] }
环境变量
OKX:
OKX_API_KEY=...
OKX_API_SECRET=...
OKX_PASSPHRASE=...
OKX_SIMULATED_TRADING=1
也支持 OKX 模拟盘变量:
OKX_SIMULATED_API_KEY=...
OKX_SIMULATED_API_SECRET=...
OKX_SIMULATED_PASSPHRASE=...
Binance:
BINANCE_API_KEY=...
BINANCE_API_SECRET=...
BINANCE_PROXY_URL=socks5h://127.0.0.1:7897
BINANCE_PROXY_URL 可省略;如果传入 socks5://,SDK 会自动规范化成 socks5h://。
Bitget:
BITGET_API_KEY=...
BITGET_API_SECRET=...
BITGET_PASSPHRASE=...
BITGET_PRODUCT_TYPE=USDT-FUTURES
BITGET_PROXY_URL=socks5h://127.0.0.1:7897
BITGET_WS_PUBLIC_URL=wss://ws.bitget.com/v2/ws/public
BITGET_WS_PRIVATE_URL=wss://ws.bitget.com/v2/ws/private
BITGET_PRODUCT_TYPE 可省略,根 adapter 默认使用 USDT-FUTURES。也支持 .env 中的小写/既有混合大小写变量名:bitget_api_key、bitget_api_secret、bitget_passphrase、bitget_PASSPHRASE。
BITGET_WS_PUBLIC_URL / BITGET_WS_PRIVATE_URL 可省略,bitget_rs 会默认使用 Bitget V2 public/private WebSocket 主域名。
统一调用
use ;
async
遍历所有已配置交易所:
use ;
async
运行示例:
统一持仓、交易和订单查询入口:
use ;
async
当前统一能力
- 自动读取 OKX / Binance / Bitget 凭证。
CryptoSdk::from_env()/CryptoSdk::from_config()。sdk.configured_exchanges()。- 统一
Instrument,自动映射交易所 symbol:- Binance 永续:
BTCUSDT - OKX 永续:
BTC-USDT-SWAP - Bitget USDT 永续:
BTCUSDT
- Binance 永续:
- 统一 market ticker:
sdk.market(exchange)?.ticker(&instrument).await
- 统一 market orderbook 和 candles:
sdk.market(exchange)?.orderbook(query).awaitsdk.market(exchange)?.candles(query).await
- 统一 derivatives market metrics:
sdk.market(exchange)?.funding_rate(&instrument).awaitsdk.market(exchange)?.funding_rate_history(query).awaitsdk.market(exchange)?.mark_price(&instrument).awaitsdk.market(exchange)?.open_interest(&instrument).await
- 统一 market sentiment stats:
sdk.market(exchange)?.long_short_ratio(query).awaitsdk.market(exchange)?.taker_buy_sell_volume(query).await
- 统一 account balances:
sdk.account(exchange)?.balances().await
- 统一账户交易设置:
sdk.account(exchange)?.capabilities()sdk.account(exchange)?.set_leverage(request).awaitsdk.account(exchange)?.set_position_mode(request).awaitsdk.account(exchange)?.set_symbol_margin_mode(request).awaitsdk.account(exchange)?.ensure_order_margin_mode(request).awaitsdk.account(exchange)?.prepare_order_settings(request).await
- 统一 positions:
sdk.positions(exchange)?.list(Some(&instrument)).await
- 统一基础下单/撤单:
sdk.trade(exchange)?.place_order(request).awaitsdk.trade(exchange)?.cancel_order(request).await
- 统一订单查询:
sdk.orders(exchange)?.get(query).awaitsdk.orders(exchange)?.open(query).awaitsdk.orders(exchange)?.history(query).await
- 统一成交明细查询:
sdk.fills(exchange)?.list(query).await
- 统一事件流:
sdk.events(exchange)?.connect(subscriptions).await- 当前先支持 Bitget,OKX/Binance 事件流会明确返回
Unsupported
- 统一错误入口
crypto_exc_all::Error。 raw逃生口:crypto_exc_all::raw::okxcrypto_exc_all::raw::binancecrypto_exc_all::raw::bitget
crypto_exc_all::raw::bitget 暴露 bitget_rs 的原生 V2 REST/WebSocket wrapper,覆盖 Bitget Futures market/account/trade、计划单/条件单/TPSL、历史持仓、VIP fee rate、子账户合约资产、Spot wallet/asset、public notices、common trade-rate,以及 V2 public/private WebSocket URL、login、ping/pong、subscribe/unsubscribe、place-order/cancel-order trade helper、trade ack parser、ticker/orders/account/positions/books/trade/candle/fill/orders-algo/adl-noti/positions-history typed event parser、运行中动态订阅/取消订阅、私有连接登录重放和 ack gate、入站消息超时重连、连接内失败重连次数限制、基础重连订阅重放、public/private manager 分层、统一事件转发、pending/active 订阅 registry 和细分连接状态。统一 facade 当前稳定暴露跨交易所 ticker / orderbook / candles / funding rate / funding rate history / mark price / open interest / long-short ratio / taker buy-sell volume / balances / set leverage / set position mode / set symbol margin mode / ensure order margin mode / prepare order settings / positions / place_order / cancel_order / order detail / open orders / order history / fills,并先为 Bitget 暴露统一 event stream,把 ticker/orderbook/trades/orders/account/positions/fills 推送映射为统一事件且保留 raw;不同交易所的账户配置语义通过 capabilities() 暴露,OKX 这类没有 symbol 级独立 margin-mode switch 的交易所会返回 Unsupported,策略层可优先使用 prepare_order_settings 一次性处理持仓模式、保证金模式和杠杆预配置。
测试
根 crate 包含外部调用场景集成测试:测试代码只引入 crypto_exc_all,通过 mock HTTP 同时调用 OKX、Binance 和 Bitget 的统一 ticker、orderbook、candles、funding rate、funding rate history、mark price、open interest、long-short ratio、taker buy-sell volume、balances、set leverage、set position mode、set symbol margin mode、ensure order margin mode、prepare order settings、positions、place_order、cancel_order、order detail、open orders、order history 和 fills 接口,并通过本地 mock WebSocket 覆盖 Bitget 统一 event stream。
继续接入交易所
新增 Bybit、Hyperliquid 等交易所时,按 Exchange Integration Playbook 执行。该文档记录了本轮迭代沉淀下来的 crate 命名、dependency alias、adapter、测试、发布和安全检查流程。