💡 国内提示: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 小时能写完,每个搞合约的都应该有。
延伸阅读: