diff --git a/lib/options/options_coin_open_lib.py b/lib/options/options_coin_open_lib.py index a14f310..f9923a9 100644 --- a/lib/options/options_coin_open_lib.py +++ b/lib/options/options_coin_open_lib.py @@ -202,6 +202,32 @@ def open_coin_option_buy_full( tick_sz=tick_sz, ord_type="ioc", ) + # 51008 时自动减半张数再试一次(买币已到位,避免整笔回滚) + if (not order.get("ok")) and sheets > 1: + msg_l = str(order.get("msg") or "").lower() + if "51008" in str(order.get("raw") or "").lower() or "不足" in str(order.get("msg") or ""): + sheets2 = max(1, sheets // 2) + if sheets2 < sheets: + order2 = cfg["place_option_limit_order"]( + ex, + inst_id=inst_id, + side="buy", + sheets=sheets2, + price=float(ask), + td_mode=td_mode_for_option_buy(cfg.get("td_mode")), + tick_sz=tick_sz, + ord_type="ioc", + ) + if order2.get("ok"): + order = order2 + sheets = sheets2 + sizing = { + "ok": True, + "sheets": sheets, + "eth_amount": round(sheets * ct_mult, 8), + "coin_premium": round(sheets * float(ask) * ct_mult, 8), + "retried_half": True, + } if not order.get("ok"): rb = rollback_bought_coin_to_usdt( conn, ex, bridge_id=bridge_id, underlying=underlying, reason=order.get("msg") or "下单失败"