Add OKX trading-account USDC auto-swap and lock exit target while in position.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-07-30 00:16:47 +08:00
parent f0b0b91f1b
commit 0837982714
16 changed files with 626 additions and 36 deletions
+20 -9
View File
@@ -133,28 +133,38 @@ class SimFundsWallets:
direction: str,
amount: float,
rate: float = 1.0,
account: str = "funding",
) -> dict[str, Any]:
"""资金账户内 USDT↔USDC 兑换。"""
"""USDT↔USDC 兑换。默认资金账户;account=trading 时在交易账户内兑(对齐 OKX 现货)。"""
amt = float(amount)
if amt <= 0:
return {"ok": False, "detail": "数量须大于 0"}
r = float(rate) if rate and rate > 0 else 1.0
d = (direction or "").strip().lower()
acct = (account or "funding").strip().lower()
if acct not in ("funding", "trading"):
return {"ok": False, "detail": "account 须为 funding / trading"}
snap = self.snapshot()
if acct == "funding":
usdt_key, usdc_key = "funding_usdt", "options_funding_usdc"
label = "资金账户"
else:
usdt_key, usdc_key = "trading_usdt", "options_trading_usdc"
label = "交易账户"
if d == "usdt_to_usdc":
src = float(snap["funding_usdt"])
src = float(snap[usdt_key])
if amt > src + 1e-9:
return {"ok": False, "detail": f"资金账户 USDT 不足(可用 {src:.4f}"}
return {"ok": False, "detail": f"{label} USDT 不足(可用 {src:.4f}"}
usdc = amt / r
snap["funding_usdt"] = src - amt
snap["options_funding_usdc"] = float(snap["options_funding_usdc"]) + usdc
snap[usdt_key] = src - amt
snap[usdc_key] = float(snap[usdc_key]) + usdc
elif d == "usdc_to_usdt":
src = float(snap["options_funding_usdc"])
src = float(snap[usdc_key])
if amt > src + 1e-9:
return {"ok": False, "detail": f"资金账户 USDC 不足(可用 {src:.4f}"}
return {"ok": False, "detail": f"{label} USDC 不足(可用 {src:.4f}"}
usdt = amt * r
snap["options_funding_usdc"] = src - amt
snap["funding_usdt"] = float(snap["funding_usdt"]) + usdt
snap[usdc_key] = src - amt
snap[usdt_key] = float(snap[usdt_key]) + usdt
else:
return {"ok": False, "detail": "direction 须为 usdt_to_usdc 或 usdc_to_usdt"}
self._set(**snap)
@@ -165,6 +175,7 @@ class SimFundsWallets:
"direction": d,
"amount": amt,
"rate": r,
"account": acct,
"wallets": self.view(),
"total_usdt_equiv": total,
}