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

An unlocked padlock rests on a computer keyboard.

Binance API 是量化交易的起点。如果你想让策略自动执行——自动买入、自动止损、自动监控仓位——都需要通过 API 实现。

这篇文章从零开始,覆盖申请 API Key、安全配置、Python 环境搭建,到发出第一个查询和第一笔(测试)订单。不假设你有量化经验,跟着做能跑通。

准备工作

  1. 已完成 Binance 账号 KYC 实名认证
  2. Python 3.8+(python --version 确认)
  3. 已完成双重验证(2FA),建议用 Google Authenticator

Binance 注册:→ 注册 Binance(通过推荐链接注册可享手续费返佣)

申请 API Key

步骤

  1. 登录 Binance,点击右上角头像 → API 管理
  2. 点击"创建 API"
  3. 选择"系统生成(推荐)"
  4. 输入 API 标签(名称),点击下一步
  5. 完成 2FA 验证
  6. 保存 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:

  1. 进入 testnet.binance.vision
  2. 用 GitHub 账号登录
  3. 创建测试网 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 品牌风格