"""OKX 交易模式(币本位期权专用机:仅单独期权). 历史 .env 若仍为 perp_options / options_options,读取时归一为 options, 对冲模块已移除,不可再启用. """ from __future__ import annotations import os from typing import Optional MODE_OPTIONS = "options" # 兼容旧配置名,不再作为可选模式 MODE_PERP = "perp_options" MODE_OO = "options_options" VALID_MODES = frozenset({MODE_OPTIONS}) UI_MODES = frozenset({MODE_OPTIONS}) _ALIASES = { "option": MODE_OPTIONS, "standalone": MODE_OPTIONS, "期权": MODE_OPTIONS, "单独期权": MODE_OPTIONS, "po": MODE_OPTIONS, "perp": MODE_OPTIONS, "perp_options": MODE_OPTIONS, "永期": MODE_OPTIONS, "永期对冲": MODE_OPTIONS, "oo": MODE_OPTIONS, "options_options": MODE_OPTIONS, "期期": MODE_OPTIONS, "期期对冲": MODE_OPTIONS, } def normalize_okx_trade_mode(raw: Optional[str] = None) -> str: s = str(raw or "").strip().lower() if s in VALID_MODES: return s if s in _ALIASES: return _ALIASES[s] # 未知或空 → 单独期权 return MODE_OPTIONS def legacy_infer_okx_trade_mode() -> str: return MODE_OPTIONS def get_okx_trade_mode() -> str: return normalize_okx_trade_mode(os.getenv("OKX_TRADE_MODE")) def hedge_module_enabled() -> bool: return False def show_perp_options() -> bool: return False def show_options_options() -> bool: return False def standalone_options_open_allowed() -> bool: return True def mode_label(mode: Optional[str] = None) -> str: return "单独期权" def block_standalone_open_by_mode_msg() -> Optional[str]: return None