Make this repo hedge-only: skip standalone options UI by default.
Nav/env only expose 永期/期期; set STANDALONE_OPTIONS_UI=true for emergency opt-in. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -1,8 +1,11 @@
|
||||
"""OKX 期权/对冲三选一模式(env: OKX_TRADE_MODE).
|
||||
"""OKX 对冲交易模式(env: OKX_TRADE_MODE).
|
||||
|
||||
options → 仅单独期权(隐藏对冲导航与对冲 env 配置)
|
||||
perp_options → 仅永期对冲(不可单独开期权;对冲组数上限 MAX_ACTIVE_HEDGE_PLANS)
|
||||
options_options → 仅期期对冲(同上)
|
||||
本仓定位:仅对冲(永期/期期).单独期权产品面已迁出,默认不安装其 UI/复盘/独立盯盘.
|
||||
期权执行层(报价/下单/买币桥)仍由对冲腿共用.
|
||||
|
||||
perp_options → 永期对冲
|
||||
options_options → 期期对冲
|
||||
options → 遗留值;未开 STANDALONE_OPTIONS_UI 时回退为永期
|
||||
"""
|
||||
from __future__ import annotations
|
||||
|
||||
@@ -13,6 +16,8 @@ MODE_OPTIONS = "options"
|
||||
MODE_PERP = "perp_options"
|
||||
MODE_OO = "options_options"
|
||||
VALID_MODES = frozenset({MODE_OPTIONS, MODE_PERP, MODE_OO})
|
||||
# env 可选值(本仓默认只暴露对冲两种)
|
||||
HEDGE_MODES = frozenset({MODE_PERP, MODE_OO})
|
||||
|
||||
_ALIASES = {
|
||||
"option": MODE_OPTIONS,
|
||||
@@ -36,6 +41,11 @@ def _env_bool(name: str, default: bool = False) -> bool:
|
||||
return str(raw).strip().lower() in ("1", "true", "yes", "on")
|
||||
|
||||
|
||||
def standalone_options_ui_enabled() -> bool:
|
||||
"""是否安装单独期权页/复盘/独立盯盘.本仓默认 false."""
|
||||
return _env_bool("STANDALONE_OPTIONS_UI", False)
|
||||
|
||||
|
||||
def normalize_okx_trade_mode(raw: Optional[str]) -> str:
|
||||
s = str(raw or "").strip().lower()
|
||||
if s in VALID_MODES:
|
||||
@@ -46,27 +56,25 @@ def normalize_okx_trade_mode(raw: Optional[str]) -> str:
|
||||
|
||||
|
||||
def legacy_infer_okx_trade_mode() -> str:
|
||||
"""未配置 OKX_TRADE_MODE 时,按旧开关推断,避免已有部署行为突变."""
|
||||
if not _env_bool("HEDGE_PLAN_ENABLED", False):
|
||||
return MODE_OPTIONS
|
||||
"""未配置 OKX_TRADE_MODE 时推断;本仓默认永期对冲."""
|
||||
if not _env_bool("HEDGE_PLAN_ENABLED", True):
|
||||
# 旧开关关对冲时,本仓仍回退永期(不再默认单独期权)
|
||||
return MODE_PERP
|
||||
show_po = _env_bool("HEDGE_PLAN_SHOW_PERP_OPTIONS", True)
|
||||
show_oo = _env_bool("HEDGE_PLAN_SHOW_OPTIONS_OPTIONS", True)
|
||||
if show_po and not show_oo:
|
||||
return MODE_PERP
|
||||
if show_oo and not show_po:
|
||||
return MODE_OO
|
||||
if show_po:
|
||||
return MODE_PERP
|
||||
if show_oo:
|
||||
return MODE_OO
|
||||
return MODE_OPTIONS
|
||||
return MODE_PERP
|
||||
|
||||
|
||||
def get_okx_trade_mode() -> str:
|
||||
m = normalize_okx_trade_mode(os.getenv("OKX_TRADE_MODE"))
|
||||
if m:
|
||||
return m
|
||||
return legacy_infer_okx_trade_mode()
|
||||
if not m:
|
||||
m = legacy_infer_okx_trade_mode()
|
||||
# 未显式打开单独期权 UI 时,options 模式回退永期,避免空导航
|
||||
if m == MODE_OPTIONS and not standalone_options_ui_enabled():
|
||||
return MODE_PERP
|
||||
return m
|
||||
|
||||
|
||||
def hedge_module_enabled() -> bool:
|
||||
@@ -82,7 +90,7 @@ def show_options_options() -> bool:
|
||||
|
||||
|
||||
def standalone_options_open_allowed() -> bool:
|
||||
return get_okx_trade_mode() == MODE_OPTIONS
|
||||
return standalone_options_ui_enabled() and get_okx_trade_mode() == MODE_OPTIONS
|
||||
|
||||
|
||||
def mode_label(mode: Optional[str] = None) -> str:
|
||||
@@ -97,7 +105,9 @@ def mode_label(mode: Optional[str] = None) -> str:
|
||||
def block_standalone_open_by_mode_msg() -> Optional[str]:
|
||||
if standalone_options_open_allowed():
|
||||
return None
|
||||
if not standalone_options_ui_enabled():
|
||||
return "本实例仅对冲;单独期权请使用专用期权仓库"
|
||||
return (
|
||||
f"当前交易模式为「{mode_label()}」,不可单独开期权;"
|
||||
"请在 env「交易模式」切换为「单独期权」"
|
||||
"请在 env「交易模式」切换为「单独期权」(并开启 STANDALONE_OPTIONS_UI)"
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user