修复 OKX 期权翻倍出场与币本位浮盈:中控/看板按指数折 U,避免 BTC 币数量当美金。
翻倍出场按全仓买一判定且对冲表异常不再整段跳过;面板按当前倍数展示需回收公式。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -211,13 +211,34 @@ def _estimate_recycle(
|
||||
pos: dict[str, Any],
|
||||
premium_paid: float | None,
|
||||
) -> float | None:
|
||||
"""翻倍出场用可回收估算.
|
||||
|
||||
用买一价 × 全部持仓张数(不吃深度上限):深度不够时仍应触发分批平仓;
|
||||
残档/无效买一则返回 None(禁止按假买盘自动平).
|
||||
"""
|
||||
from lib.options.options_positions_lib import attach_close_preview
|
||||
from lib.options.options_pricing_lib import total_premium
|
||||
|
||||
row = dict(pos)
|
||||
attach_close_preview(cfg, ex, row, premium_paid=premium_paid)
|
||||
preview = row.get("close_preview") if isinstance(row.get("close_preview"), dict) else {}
|
||||
if preview.get("bid_invalid"):
|
||||
return None
|
||||
levels = preview.get("levels") or []
|
||||
ct_mult = float(row.get("ct_mult") or 0.01)
|
||||
sheets = int(
|
||||
abs(
|
||||
_safe_float(row.get("avail_pos") if row.get("avail_pos") is not None else row.get("pos"))
|
||||
or 0
|
||||
)
|
||||
)
|
||||
if levels and sheets > 0 and ct_mult > 0:
|
||||
try:
|
||||
px = float(levels[0].get("px") or 0)
|
||||
except (TypeError, ValueError, AttributeError):
|
||||
px = 0.0
|
||||
if px > 0:
|
||||
return round(total_premium(px, sheets * ct_mult), 8)
|
||||
return _safe_float(preview.get("total_received"))
|
||||
|
||||
|
||||
@@ -303,7 +324,8 @@ def run_options_profit_exits(
|
||||
init_hedge_plan_tables(conn)
|
||||
hedge_managed = active_hedge_option_inst_ids(conn)
|
||||
except Exception:
|
||||
return 0
|
||||
# 对冲表异常时不得整段跳过翻倍出场
|
||||
hedge_managed = set()
|
||||
|
||||
rules = profit_exit_by_inst(conn)
|
||||
triggered = 0
|
||||
|
||||
Reference in New Issue
Block a user