Cancel pending option sells before target auto-close.
Prevents duplicate sells from stacking into short opens when the bid book is empty and mark fallback retries. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -246,6 +246,34 @@ def close_option_by_bid_depth(
|
|||||||
td_mode = str(pos.get("mgnMode") or cfg.get("td_mode") or "isolated")
|
td_mode = str(pos.get("mgnMode") or cfg.get("td_mode") or "isolated")
|
||||||
pos_side = _pos_side_from_position(pos) or "net"
|
pos_side = _pos_side_from_position(pos) or "net"
|
||||||
|
|
||||||
|
# 先撤本合约未完成卖单,避免重复挂单被当成开空占用保证金
|
||||||
|
try:
|
||||||
|
pending = ex.private_get_trade_orders_pending({"instType": "OPTION", "instId": inst_id}) or {}
|
||||||
|
for o in pending.get("data") or []:
|
||||||
|
if str(o.get("side") or "").lower() != "sell":
|
||||||
|
continue
|
||||||
|
oid = o.get("ordId")
|
||||||
|
if not oid:
|
||||||
|
continue
|
||||||
|
try:
|
||||||
|
ex.private_post_trade_cancel_order({"instId": inst_id, "ordId": oid})
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
time.sleep(0.3)
|
||||||
|
invalidate_option_positions_cache()
|
||||||
|
raw_positions = cfg["fetch_option_positions"](ex)
|
||||||
|
if raw_positions is None:
|
||||||
|
return {"ok": False, "msg": "获取期权持仓失败"}
|
||||||
|
pos = next((p for p in raw_positions if str(p.get("instId")) == inst_id), None)
|
||||||
|
if not pos:
|
||||||
|
return {"ok": False, "msg": "未找到持仓", "already_flat": True}
|
||||||
|
avail = _avail(pos)
|
||||||
|
close_sheets = min(close_sheets, avail)
|
||||||
|
if close_sheets < 1:
|
||||||
|
return {"ok": False, "msg": "可平张数不足", "already_flat": True}
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
|
||||||
remaining = close_sheets
|
remaining = close_sheets
|
||||||
submitted_sheets = 0
|
submitted_sheets = 0
|
||||||
filled_or_reduced_sheets = 0
|
filled_or_reduced_sheets = 0
|
||||||
|
|||||||
Reference in New Issue
Block a user