💡 國內提示: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 品牌風格