"""Shared long/short direction helpers for opportunities and execution.""" from __future__ import annotations def normalize_trade_side(value: object = "") -> str: text = str(value or "").strip().lower() if text in {"short", "sell", "空", "空头", "做空", "空头启动"}: return "short" return "long" def side_from_direction(direction: object = "") -> str: text = str(direction or "").strip().lower() if any(token in text for token in ("空", "short", "sell")): return "short" return "long" def side_label(side: object = "") -> str: return "空" if normalize_trade_side(side) == "short" else "多" def direction_label(side: object = "") -> str: return "空头启动" if normalize_trade_side(side) == "short" else "多头启动" def trade_side_from_payload(*payloads: object) -> str: for payload in payloads: if isinstance(payload, dict): if payload.get("side"): return normalize_trade_side(payload.get("side")) if payload.get("direction"): return side_from_direction(payload.get("direction")) for payload in payloads: if payload: side = side_from_direction(payload) if side == "short": return "short" return "long"