💡 國內提示:Binance 官網在中國大陸無法直連,訪問需自備網路工具;法幣入金不支援銀行卡,主要走 C2C(USDT↔CNY)通道完成。

加密圈有句話:“爆倉不是突然的事,是慢慢惡化的結果”。爆倉前 2-4 小時維持保證金率(MMR)通常已經很危險了,但很多人因為手機沒通知,等看到時已經被強平。
這篇用 Claude Code 寫了一個小指令碼監控 Binance U 本位合約賬戶的保證金健康度,低於閾值時立即 Telegram 推送。完整程式碼 + 部署。
需求描述(給 Claude)
寫一個 Python 指令碼監控 Binance 合約賬戶:
1. 用 Binance API Key(只勾"讀取"許可權)查 U 本位合約賬戶
2. 算每個開倉的 "維持保證金率"
維持保證金率 = 維持保證金 / 賬戶餘額
3. 整個賬戶的健康度:
- 安全:賬戶餘額/總維持保證金 > 5
- 警戒:2-5
- 危險:< 2(大機率爆倉程序啟動)
4. 危險時立即 Telegram 推送(含倉位明細 + 當前 MMR)
5. 每 10 分鐘跑一次
6. 用環境變數存 API key,不寫死在程式碼裡
一稿即可用的程式碼
binance_risk_monitor.py:
import os, time, hmac, hashlib, json, urllib.request, urllib.parse
from datetime import datetime
API_KEY = os.environ["BINANCE_API_KEY"]
API_SECRET = os.environ["BINANCE_API_SECRET"].encode()
TG_TOKEN = os.environ["TG_TOKEN"]
TG_CHAT_ID = os.environ["TG_CHAT_ID"]
BASE = "https://fapi.binance.com"
# 閾值
SAFE = 5.0 # 賬戶餘額 / 維持保證金
WARN = 2.0
DANGER = 1.2 # 低於這個立刻警報
def sign(params):
ts = int(time.time() * 1000)
params["timestamp"] = ts
query = urllib.parse.urlencode(params)
sig = hmac.new(API_SECRET, query.encode(), hashlib.sha256).hexdigest()
return query + "&signature=" + sig
def api_get(path, params=None):
query = sign(params or {})
req = urllib.request.Request(f"{BASE}{path}?{query}",
headers={"X-MBX-APIKEY": API_KEY})
with urllib.request.urlopen(req, timeout=10) as r:
return json.loads(r.read())
def send_tg(text):
url = f"https://api.telegram.org/bot{TG_TOKEN}/sendMessage"
data = json.dumps({"chat_id": TG_CHAT_ID, "text": text, "parse_mode": "Markdown"}).encode()
req = urllib.request.Request(url, data=data,
headers={"Content-Type": "application/json"})
try: urllib.request.urlopen(req, timeout=5)
except: pass
def check():
"""查賬戶 + 倉位"""
account = api_get("/fapi/v2/account")
wallet = float(account["totalWalletBalance"])
maint = float(account["totalMaintMargin"])
pnl = float(account["totalUnrealizedProfit"])
if maint == 0:
return # 沒開倉
ratio = (wallet + pnl) / maint
status = "🟢 安全" if ratio > SAFE else ("🟡 警戒" if ratio > WARN else "🔴 危險")
# 構造倉位明細
positions = [p for p in account["positions"] if float(p.get("positionAmt", 0)) != 0]
lines = []
for p in positions:
sym = p["symbol"]
amt = float(p["positionAmt"])
entry = float(p["entryPrice"])
mark = float(p.get("markPrice", entry))
unr = float(p.get("unrealizedProfit", 0))
lev = p.get("leverage", "?")
lines.append(f"`{sym}` x{lev} · {amt:+.4f} @ ${entry:,.2f} · 現價 ${mark:,.2f} · {unr:+.2f}")
msg = f"""*{status}* · 合約賬戶健康度
賬戶餘額: `${wallet:,.2f}` ({pnl:+,.2f} 未實現)
總維持保證金: `${maint:,.2f}`
健康比率: `{ratio:.2f}x` (> {SAFE:.0f} 安全)
*倉位* ({len(positions)} 個):
""" + "\n".join(lines)
# 只在警戒/危險時發,或者每天一次常規彙報(8:00)
now = datetime.now()
is_report_time = now.hour == 8 and now.minute < 10
if ratio < WARN:
send_tg(msg)
elif ratio < DANGER:
send_tg("🚨 *緊急* 3 小時內可能爆倉!\n\n" + msg)
elif is_report_time:
send_tg("📊 日報\n\n" + msg)
if __name__ == "__main__":
try: check()
except Exception as e:
send_tg(f"⚠️ 監控指令碼報錯: {e}")
部署(同 Mac 本機)
LaunchAgent com.as.binance-risk.plist:
<key>StartInterval</key><integer>600</integer>
<key>EnvironmentVariables</key>
<dict>
<key>BINANCE_API_KEY</key><string>YOUR_KEY</string>
<key>BINANCE_API_SECRET</key><string>YOUR_SECRET</string>
<key>TG_TOKEN</key><string>...</string>
<key>TG_CHAT_ID</key><string>...</string>
</dict>
⚠️ API Key 建立時只勾"讀取"許可權,永遠不要勾"交易"或"提現"。讀取許可權足夠監控。
實際訊息長啥樣
常規(日報):
📊 日報
🟢 安全 · 合約賬戶健康度
賬戶餘額: $2,340.50 (+45.20 未實現)
總維持保證金: $160.20
健康比率: 14.58x (> 5 安全)
倉位 (2 個):
BTCUSDT x10 · +0.0250 @ $65,200 · 現價 $66,800 · +40.00
ETHUSDT x5 · +0.5000 @ $3,400 · 現價 $3,450 · +5.20
警戒:
🟡 警戒 · 合約賬戶健康度
賬戶餘額: $890.50 (-120.00 未實現)
總維持保證金: $340.80
健康比率: 2.61x ← 低於 5 的警戒線
(訊息正文)
緊急:
🚨 緊急 3 小時內可能爆倉!
🔴 危險 · 合約賬戶健康度
健康比率: 1.15x
...
預警的閾值怎麼設
Binance 爆倉閾值是健康比率 < 1(即餘額剛好等於維持保證金),但爆倉通常是一連串強平,真正觸發 < 1 時已經晚了。
所以我的三檔:
- 5x(警戒線):還有緩衝,抓緊決策
- 2x(危險線):最多 2 小時不採取措施就爆倉
- 1.2x(緊急線):馬上平倉或補保證金
這三檔的意義:5x 的時候你還有充足時間做決定,2x 就必須立刻行動,1.2x 是最後的"救命線"。
什麼時候需要這個指令碼
一定要用:
- 同時開多個合約倉位
- 用了 > 5x 槓桿
- 不是 24 小時盯盤
- 情緒化操作容易(憤怒加倉、報復性扛單)
可能不用:
- 只玩 1-2x 低槓桿(風險天然低)
- 專業量化員(自己有完整風控框架)
延伸:更復雜的風控場景
這個指令碼能擴充套件:
- 時間段敏感:美聯儲決議前 2 小時閾值提升,自動警報更嚴
- 單幣種專門監控:某個幣最大倉位 > $X 立即警告
- 止損關聯:檢測沒設止損的持倉
- 多賬戶監控:不同賬戶同時監控(配置成 list)
Claude 幫我在 1 個月裡迭代了 4 個版本,每次擴充套件新需求只要跟它說話:
“加一個功能:當單個倉位的未實現虧損超過賬戶餘額 20% 時發警報”
10 分鐘就 OK 了。
總結
- Binance API + Python 實現實時風控警報門檻極低
- Claude Code 幫你處理 90% 的程式碼工作
- 閾值 5x / 2x / 1.2x 三檔實戰好用
- 可以持續迭代,永遠不嫌貴
做合約不戴頭盔(沒風控監控)不是勇敢,是賭。這指令碼 1 小時能寫完,每個搞合約的都應該有。
延伸閱讀: