Fix false USDC-short error while waiting for a qualified option.

Use risk-sizing preview ask/qty (same as auto-convert) instead of monitor book ask.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-08-07 19:28:58 +08:00
parent 06f612aa52
commit b377956367
2 changed files with 28 additions and 9 deletions
+17 -3
View File
@@ -44,7 +44,9 @@ def _round_down(n: float, nd: int = 2) -> float:
def preview_capacity_for_convert(db: Database | None = None) -> dict[str, Any]:
"""
盘口预览以损定仓名义评估资金门(不写 settings)。
用预览以损定仓名义评估资金门(不写 settings)。
- 选约杠杆:用定仓卖一(指数/杠杆下限),与预算/k 一致,勿用监控未达标贵卖一
- 实际杠杆:用盘口卖一
手动仓位则直接 assess 当前账本名义。
"""
database = db or get_db()
@@ -53,7 +55,8 @@ def preview_capacity_for_convert(db: Database | None = None) -> dict[str, Any]:
prev = preview_risk_sizing(database)
if prev.get("risk_based") and prev.get("ok"):
return assess_open_capacity(
# option_ask 在 preview 里已是定仓口径(selection=隐含 / actual=盘口)
cap = assess_open_capacity(
database,
option_ask=float(prev["option_ask"])
if prev.get("option_ask") is not None
@@ -64,10 +67,21 @@ def preview_capacity_for_convert(db: Database | None = None) -> dict[str, Any]:
perp_qty_eth=float(prev["perp_qty_eth"])
if prev.get("perp_qty_eth") is not None
else None,
call_ask=float(prev["call_ask"])
if prev.get("call_ask") is not None
else None,
put_ask=float(prev["put_ask"])
if prev.get("put_ask") is not None
else None,
)
cap["capacity_basis"] = "risk_preview"
cap["leverage_basis"] = prev.get("leverage_basis")
return cap
except Exception:
logger.exception("preview capacity for convert failed")
return assess_open_capacity(database)
cap = assess_open_capacity(database)
cap["capacity_basis"] = "ledger"
return cap
def prepare_okx_trading_usdc(db: Database | None = None) -> dict[str, Any]: