空跑打全余额字段:逐仓下管用的是 isolatedMaxAvailable,只看 available 会误判

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
jack
2026-08-28 18:23:57 +08:00
co-authored by Cursor
parent 9562b8c598
commit 7435cef61f
+20 -7
View File
@@ -268,15 +268,28 @@ class Exec:
# 正在过期,没有从容排查的余地
if self.api.key and self.api.secret and self.api.passphrase:
try:
acc = await self.api.account()
av = float((acc or {}).get("available") or 0)
print(f" ✓ 密钥与 IP 白名单通(可用 {av:.2f} "
f"USDT,名义 {NOTIONAL:.0f} 需保证金约 "
f"{NOTIONAL / LEVERAGE:.0f}", flush=True)
acc = await self.api.account() or {}
print(" ✓ 密钥与 IP 白名单通", flush=True)
# 打全几个余额字段,不只看 available:我们用逐仓,真正
# 决定能不能开的是 isolatedMaxAvailable。只看一个字段,
# 取错了就会把"有钱"误报成"没钱",或者反过来
fields = ("accountEquity", "usdtEquity", "available",
"isolatedMaxAvailable", "crossedMaxAvailable",
"maxTransferOut", "locked", "unrealizedPL")
shown = {k: acc.get(k) for k in fields if k in acc}
print(f" 余额 {shown}", flush=True)
# 逐仓下取 isolatedMaxAvailable,缺了才退回 available
av = float(acc.get("isolatedMaxAvailable")
or acc.get("available") or 0)
need = NOTIONAL / LEVERAGE * MAX_OPEN
print(f" 可开保证金 {av:.2f} USDT · {MAX_OPEN} 笔并发"
f"需约 {need:.0f}(名义 {NOTIONAL:.0f} / "
f"{LEVERAGE}x", flush=True)
if av < need:
print(f"可用不足:{MAX_OPEN} 笔并发共需约 "
f"{need:.0f} USDT 保证金", flush=True)
print(f"不够。合约账户里要有 USDT 才能下单——"
f"资金常在现货账户,需要先划转到 USDT 本位合约。"
f"低于 {NOTIONAL / LEVERAGE:.0f} 连一笔都开不了",
flush=True)
except Exception as e: # noqa: BLE001
# 退出前要关会话。SystemExit 会绕过 run() 里的收尾,
# 漏了就在日志尾部留一串 "Unclosed client session"