diff --git a/live/live_exec.py b/live/live_exec.py index 9d5dc44..8cd25ce 100644 --- a/live/live_exec.py +++ b/live/live_exec.py @@ -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",