💡 国内提示:Binance 官网在中国大陆无法直连,访问需自备网络工具;法币入金不支持银行卡,主要走 C2C(USDT↔CNY)通道完成。

Binance API 是量化交易的起点。如果你想让策略自动执行——自动买入、自动止损、自动监控仓位——都需要通过 API 实现。
这篇文章从零开始,覆盖申请 API Key、安全配置、Python 环境搭建,到发出第一个查询和第一笔(测试)订单。不假设你有量化经验,跟着做能跑通。
准备工作
- 已完成 Binance 账号 KYC 实名认证
- Python 3.8+(
python --version确认) - 已完成双重验证(2FA),建议用 Google Authenticator
Binance 注册:→ 注册 Binance(通过推荐链接注册可享手续费返佣)
申请 API Key
步骤
- 登录 Binance,点击右上角头像 → API 管理
- 点击"创建 API"
- 选择"系统生成(推荐)"
- 输入 API 标签(名称),点击下一步
- 完成 2FA 验证
- 保存 API Key 和 Secret Key
重要:Secret Key 只显示一次,页面关闭后无法再次查看。必须立即保存到安全位置(密码管理器)。
权限配置
创建完 API 后,在 API 管理页设置权限:
| 权限 | 是否需要开启 | 说明 |
|---|---|---|
| 读取 | ✓(默认开启) | 查询账户信息、K 线数据 |
| 现货交易 | 按需 | 下现货订单 |
| 合约交易 | 按需 | 下期货订单 |
| 提现 | 绝对不开 | 量化策略不需要,开了有安全风险 |
IP 白名单(强烈建议):在 API 设置里绑定你的服务器 IP,只有这个 IP 才能用这个 API Key。即使 Key 泄露,其他 IP 也无法使用。
安全原则
- 每个策略用单独的 API Key,不要多个策略共用一个
- 量化策略服务器和个人电脑用不同的 Key
- 定期轮换 Key(建议每 3-6 个月换一次)
- 永远不要把 Key 提交到 GitHub 或发给别人
Python 环境搭建
安装官方 SDK:
pip install python-binance
第一个 API 调用:查询账户余额
from binance.client import Client
# API Key 建议从环境变量读取,不要硬编码
import os
api_key = os.environ["BINANCE_API_KEY"]
api_secret = os.environ["BINANCE_API_SECRET"]
client = Client(api_key, api_secret)
# 查询账户信息
account = client.get_account()
# 显示非零余额
print("当前余额:")
for asset in account["balances"]:
free = float(asset["free"])
locked = float(asset["locked"])
if free > 0 or locked > 0:
print(f" {asset['asset']}: 可用 {free}, 锁定 {locked}")
运行后如果能看到你的余额,说明 API 配置成功了。
查询市场数据
# 查询 BTC/USDT 当前价格
ticker = client.get_symbol_ticker(symbol="BTCUSDT")
print(f"BTC 当前价:{ticker['price']}")
# 查询 24 小时行情
stats = client.get_ticker(symbol="BTCUSDT")
print(f"24h 最高:{stats['highPrice']}")
print(f"24h 最低:{stats['lowPrice']}")
print(f"24h 成交量:{stats['volume']} BTC")
# 查询 K 线数据(最近 10 根 1小时 K 线)
klines = client.get_klines(
symbol="BTCUSDT",
interval=Client.KLINE_INTERVAL_1HOUR,
limit=10
)
for k in klines:
timestamp = k[0]
open_price = float(k[1])
close_price = float(k[4])
volume = float(k[5])
print(f"开盘:{open_price:.2f},收盘:{close_price:.2f},成交量:{volume:.2f}")
在测试网下单
强烈建议先在测试网练手,不会消耗真实资金。
申请测试网 API Key:
- 进入 testnet.binance.vision
- 用 GitHub 账号登录
- 创建测试网 API Key
from binance.client import Client
# 测试网 API Key
client = Client(
api_key="你的测试网API_KEY",
api_secret="你的测试网SECRET",
testnet=True # 关键参数,指向测试环境
)
# 下限价买单(BTC/USDT,买 0.001 BTC,价格 20000 USDT)
order = client.create_order(
symbol="BTCUSDT",
side=Client.SIDE_BUY,
type=Client.ORDER_TYPE_LIMIT,
timeInForce=Client.TIME_IN_FORCE_GTC,
quantity=0.001,
price="20000"
)
print(f"订单 ID:{order['orderId']}")
print(f"状态:{order['status']}")
# 查询订单状态
status = client.get_order(
symbol="BTCUSDT",
orderId=order['orderId']
)
print(f"当前状态:{status['status']}")
# 取消订单
client.cancel_order(
symbol="BTCUSDT",
orderId=order['orderId']
)
print("订单已取消")
WebSocket 实时数据流
API 的 REST 接口用于下单和查询,实时数据用 WebSocket 更高效:
from binance import ThreadedWebsocketManager
def handle_ticker(msg):
"""处理实时价格推送"""
if msg['e'] == 'error':
print(f"错误:{msg['m']}")
return
price = float(msg['c']) # 最新成交价
volume = float(msg['v']) # 24h 成交量
print(f"BTC 价格:{price:.2f},24h 成交量:{volume:.2f}")
# 启动 WebSocket 管理器
twm = ThreadedWebsocketManager(api_key=api_key, api_secret=api_secret)
twm.start()
# 订阅 BTC/USDT 实时 ticker
twm.start_symbol_ticker_socket(callback=handle_ticker, symbol="BTCUSDT")
# 运行 30 秒后停止
import time
time.sleep(30)
twm.stop()
频率限制(Rate Limit)
Binance API 有频率限制,超限会被临时封禁:
| 类型 | 限制 |
|---|---|
| 请求权重 | 1200 权重/分钟 |
| 下单次数 | 10 次/秒,100000 次/24h |
| WebSocket 连接 | 最多 1024 个 |
常用接口的权重:
GET /api/v3/ticker/price:2 权重GET /api/v3/klines:2 权重POST /api/v3/order(下单):1 权重
查询最新价格每 5 秒一次,一分钟 12 次,权重 24,远低于限制。
实时数据尽量用 WebSocket,不要用轮询 REST 接口。
下一步
跑通了基础之后:
- 了解 K 线数据结构,开始构建你的第一个策略逻辑
- 学习资金管理:每笔下单金额怎么控制
- 配置 Prometheus 监控策略运行状态
→ 查看 Binance 手续费省钱方法 → 查看 Binance API 安全配置 → 查看 量化工具栈:从策略到监控
📷 封面图 · Flux Schnell AI 生成 · panshi.io 品牌风格