1. API 基础速览
API(应用程序编程接口)是撮合高频行情与自动化交易的桥梁。所有主流交易所都会把行情、账户、下单、杠杆/合约等核心能力抽象成
现货 API、合约 API、WebSocket API、REST API 四大类:
- 公共 API 免费开放:盘口深度、最新价、K 线…任何人可调用,无 APIKey 要求。
- 私有 API 需校验:查询余额、下单、止盈止损。携带 APIKey + SecretKey,且服务器 IP 需列入白名单。
整体调用方式
| 协议 | 适用场景 | 优势 | 限制 |
|------|----------|------|------|
| HTTP REST | 查询快照型数据 | 简单直观 | 每 IP 每分钟 6000~18000 次 |
| WebSocket | 实时推送 | 毫秒级延迟、更省流量 | 每 IP 限 20~60 条并发 |
常用 SDK
| 交易所 | SDK 语言支持 | 推荐版本 | pip 指令 |
|----|-----------|-------|--------|
| 币安 | Python/Node/Java/Go/C# | binance-connector | pip install binance-connector|
| 欧易 | 无官方,推荐「Python-OKX」三方库 | Python 3.7–3.11 | pip install python-okx|
一次「策略 - 撮合 - 清算」的微秒级流程:
- WebSocket 订阅
depth@100ms→ 得到实时盘口 - 策略使用 NumPy 计算信号
- REST 调用
new_order→ 交易执行 - 回调
query_order确认成交均价
下文用实际 Python 代码带你过一遍现货 → 合约链路。
2. 币安 API 实战
2.1 初始化与鉴权
新建 config.ini 节能减排:
[keys]
apiKey=正式环境key
apiSecret=正式环境secret
testKey=测试环境key
testSecret=测试环境secret统一读取工具 env.py:
from configparser import ConfigParser, RawConfigParser
import pathlib, os
config = RawConfigParser()
config.read(pathlib.Path(__file__).with_name('config.ini'))
def getApiKey(k='apiKey', s='apiSecret'):
return config['keys'][k], config['keys'][s]2.2 现货 REST 三件套
查询余额 - get_balance.py
from binance.spot import Spot
key, secret = getApiKey(test=True)
client = Spot(key, secret, base_url='https://testnet.binance.vision')
balance = float(client.user_asset(asset='USDT')[0]['free'])
print('现货 USDT 余额:', balance)读取深度 - get_depth.py
depth = client.depth(symbol='BTCUSDT', limit=20)
print('买一', depth['bids'][0][0], '卖一', depth['asks'][0][0])挂单 - limit_order.py
order = client.new_order(
symbol='BTCUSDT',
side='BUY',
type='LIMIT',
timeInForce='GTC',
quantity='0.001',
price='60000'
)
print('订单号', order['orderId'], '状态', order['status'])2.3 现货 WebSocket 轻享实时流
price_feed.py
from binance.websocket.spot.websocket_stream import SpotWebsocketStreamClient
import json, time
def handler(_, msg):
tick = json.loads(msg)['data']
print("买一", tick['b'][0][0], "卖一", tick['a'][0][0])
client = SpotWebsocketStreamClient(on_message=handler)
client.partial_book_depth(symbol='btcusdt', level=5, speed=100)2.4 现货综合案例:无人工跟单
- 以低于市价 0.3 的价格挂限价买入
- 成交后挂高 0.5 的止盈卖单
过程全流程参见 buy_sell_strategy.py。如果想直接体验高频亲测的更低延迟方案,👉 跟着这篇10分钟部署心跳Ping-Pong策略。
3. 币安合约 API 进阶
3.1 合约模块搬家
from binance.um_futures import UMFutures
client = UMFutures(key, secret, base_url='https://testnet.binancefuture.com')
client.change_leverage(symbol='BTCUSDT', leverage=10)3.2 限价开仓 + 止盈/止损
- 做多:
side='BUY',positionSide='LONG' - 做空:
side='SELL',positionSide='SHORT'
开仓后新增止盈单(type 为 TAKE_PROFIT),止损单(type 为 STOP_MARKET),核心范例:
client.new_order(
symbol='BTCUSDT',
side='SELL',
type='TAKE_PROFIT_MARKET',
stopPrice=64000,
quantity=0.01,
positionSide='LONG'
)平仓即相反方向压倒原仓位。
4. 欧易 API 速通
4.1 SDK 与环境初始化
pip install python-okxok.env.py
def getOkApiKey():
return (cfg['okApiKey'], cfg['okApiSecret'], cfg['passphrase'])4.2 常用 API 范式对比
| 场景 | 欧易写法 | 币安写法 |
|---|---|---|
| 查询余额 | AccountAPI().get_account_balance(ccy='USDT') | client.user_asset(asset='USDT') |
| 下市价单 | TradeAPI.place_order(instId, side='buy', ordType='market', sz='20') | client.new_order(..., type='MARKET') |
| 合约开仓 | side='buy' + posSide='long'(与现货同一接口) | UMFutures 独立模块 |
5. 常见问题(FAQ)
Q1: API 中断后连接断开怎么办?
A: REST 接口可使用指数退避重试;WebSocket 监听 on_close 回调后自动重连,推荐三档间隔:1s → 5s → 30s。
Q2: 为何下单遇到 Filter failure: PRICE_FILTER?
A: 价格精度错误。代码中需对接官方交易对规则表,利用 Decimal 或 round 截取合适小数。
Q3: 测试网 USDT 不够用?
A: 在币安测试网直接访问水龙头 $ curl https://testnet.binance.vision/api/v3/faucet;欧易模拟盘初始自带虚拟本金 1 万 USDT。
Q4: 如何同时多个交易所对冲?
A: 多线程/协程:线程一监听欧易永续合约深度,线程二监听币安现货深度,策略核心使用 asyncio.Queue 交换价差信息。
Q5: need meta 数据榜单(币对精度、杠杆阶梯)?
A: 使用公共接口 /api/v3/exchangeInfo(币安),或欧易 GET /public/instruments ;本地缓存 1 天一次即可。
6. 写在最后
掌握交易所 API 的三把钥匙:
- 用 SDK,减少重复造轮子
- 先在测试网实盘回测
- 把配置逐仓 / 全仓、杠杆倍数、风控止损写死在策略头文件
当 WebSocket 的高频 tick 声与止损单触发音同时响起,你就拥有了最丝滑的「水电煤」基础设施。祝你搬砖顺利、少踩告警!