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

量化实盘最大的风险之一不是策略亏损,而是 API Key 泄露导致账户被盗。写代码时不小心把 Key 推到 GitHub、VPS 被入侵、日志文件泄露——任何一个失误都可能让账户资产瞬间清零。
这篇文章覆盖 Binance API 安全配置的完整流程。
API Key 的权限类型
Binance API Key 有三类权限,按最小权限原则配置:
| 权限 | 说明 | 量化是否需要 |
|---|---|---|
| 读取 | 查看账户、价格、历史 | ✅ 必须 |
| 交易 | 下单、撤单 | ✅ 必须(实盘) |
| 提现 | 转账到外部地址 | ❌ 绝对不要开 |
提现权限永远不要开启,量化程序不需要这个权限。开了以后一旦 Key 泄露,资产可以被直接转走。
创建 API Key
- 登录 Binance
- 右上角头像 → API 管理
- 点 创建 API
- 选择 系统生成 API
- 填入 API 备注(建议按用途命名,如
quant-aws-hk) - 完成 2FA 验证
创建完成后页面会显示:
- API Key(公开密钥,可以多次查看)
- Secret Key(私密密钥,只显示一次,务必立刻保存)
⚠️ Secret Key 只在创建时显示一次。如果没保存,只能删除重建。
配置 IP 白名单(最重要的安全措施)
IP 白名单是最关键的安全机制:即使 API Key 泄露,攻击者也无法从其他 IP 使用。
配置步骤:
- 点进刚创建的 API Key
- 找到 受信任的 IP 访问限制
- 填入你的 VPS IP 地址(比如
43.199.32.92) - 如果有多台机器使用同一个 Key,逐个添加
推荐格式:
单个 IP:43.199.32.92
注意事项:
- 填的是你的 VPS 的出口 IP,不是本地电脑 IP
- 每次 VPS 重新分配 IP 后需要更新(AWS 重启可能换 IP)
- 如果用弹性 IP / 固定 IP,更稳定
权限配置
在 API Key 设置页面,只勾选以下权限:
✅ 读取
✅ 合约交易(如果跑合约策略)
✅ 现货和杠杆交易(如果跑现货策略)
❌ 提现(永远不要开)
❌ 万向划转(不需要就不开)
❌ 充值/提现(不开)
安全存储 API Key
错误做法(高风险)
# ❌ 明文写在代码里
api_key = "abc123xyz..."
api_secret = "def456uvw..."
# ❌ 写在 .env 文件里但把 .env 提交到 git
git add .env
git commit -m "add config"
正确做法 1:环境变量
# 在服务器的 ~/.bashrc 或 ~/.profile 里设置
export BINANCE_API_KEY="你的API Key"
export BINANCE_SECRET_KEY="你的Secret Key"
source ~/.bashrc
Python 代码里读取:
import os
api_key = os.environ.get('BINANCE_API_KEY')
api_secret = os.environ.get('BINANCE_SECRET_KEY')
if not api_key or not api_secret:
raise ValueError("API keys not found in environment variables")
正确做法 2:独立的 secrets 文件(不纳入 git)
# 创建 secrets 文件
cat > ~/.secrets/binance.env << 'EOF'
BINANCE_API_KEY=你的API Key
BINANCE_SECRET_KEY=你的Secret Key
EOF
chmod 600 ~/.secrets/binance.env
# Python 读取
from dotenv import load_dotenv
load_dotenv(os.path.expanduser('~/.secrets/binance.env'))
.gitignore 里加上:
.env
*.env
secrets/
.secrets/
正确做法 3:systemd 服务环境变量
如果量化程序用 systemd 管理,可以用 systemd 的环境变量注入:
# 创建环境文件
cat > /etc/systemd/system/quant-strategy.env << 'EOF'
BINANCE_API_KEY=你的API Key
BINANCE_SECRET_KEY=你的Secret Key
EOF
chmod 600 /etc/systemd/system/quant-strategy.env
在 service 文件里引用:
[Service]
EnvironmentFile=/etc/systemd/system/quant-strategy.env
ExecStart=/usr/bin/python3 /opt/quant/strategy.py
防止 Key 意外泄露
检查 GitHub 历史提交
如果你曾经不小心把 Key 提交到 Git:
# 搜索仓库历史里的敏感信息
git log --all --full-history -- "**/*.py" | xargs grep -l "api_key\|secret"
# 或者用专门工具
pip install trufflehog
trufflehog git file://. --only-verified
发现泄露就立刻到 Binance 删除该 Key,重新创建一个。
定期轮换 Key
建议每 3-6 个月轮换一次 API Key:
- 创建新 Key
- 更新代码和环境变量使用新 Key
- 验证新 Key 正常工作
- 删除旧 Key
监控异常 API 调用
在 Binance API 管理页面,可以看到每个 Key 的调用日志。定期检查:
- 是否有意料之外的 IP 调用
- 是否有非策略时间段的请求
- 是否有提现相关的尝试
API 限流与合理使用
Binance 对 API 有频率限制,超限会被封禁 IP:
| 限制类型 | 默认限制 |
|---|---|
| 请求频率 | 1200 次/分钟(权重计算) |
| 下单频率 | 50 单/10 秒(现货) |
| WebSocket 连接 | 每个账号最多 5 个 |
量化代码里需要处理限流:
import time
from binance.exceptions import BinanceAPIException
def safe_api_call(func, *args, **kwargs):
"""带重试的 API 调用"""
max_retries = 3
for i in range(max_retries):
try:
return func(*args, **kwargs)
except BinanceAPIException as e:
if e.code == -1003: # 频率超限
wait_time = 60 * (i + 1)
print(f"Rate limited, waiting {wait_time}s...")
time.sleep(wait_time)
else:
raise
raise Exception("Max retries exceeded")
测试网(Testnet)开发调试
开发新策略时,先在测试网验证,不要直接用真实账号:
- 测试网地址:testnet.binance.vision
- 免费领测试币,随便用
- API 接口和主网一致,代码可以直接迁移
# 切换到测试网
from binance.client import Client
client = Client(
api_key=os.environ['BINANCE_TESTNET_KEY'],
api_secret=os.environ['BINANCE_TESTNET_SECRET'],
testnet=True # 关键参数
)
相关阅读:
📷 封面图 · Flux Schnell AI 生成 · panshi.io 品牌风格