fix(options): expose chain DTE in env UI and show nearest expiries for OO

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-08-10 17:54:03 +08:00
parent a90876d772
commit 860ebef4a7
6 changed files with 45 additions and 16 deletions
+11 -3
View File
@@ -677,17 +677,25 @@ def register_hedge_plan_routes(app: Flask, cfg: dict[str, Any]) -> None:
if ex is None:
return jsonify({"ok": False, "msg": "期权交易所未初始化"}), 400
u = (request.args.get("underlying") or cfg.get("default_underly") or "ETH").upper()
# 热更新:链展示天数每次读 env
chain_max_dte = float(
os.getenv("OKX_OPTIONS_CHAIN_MAX_DTE_DAYS")
or os.getenv("OKX_OPTIONS_MAX_DTE_DAYS")
or cfg.get("chain_max_dte")
or 14
)
try:
chain = cfg["build_option_chain"](
ex,
u,
max_dte_days=float(cfg.get("chain_max_dte") or 14),
max_dte_days=chain_max_dte,
itm_only=False,
itm_max_dist_usd=float(os.getenv("OKX_OPTIONS_ITM_MAX_DIST_USD") or "30"),
)
except Exception as e:
return jsonify({"ok": False, "msg": f"拉取期权链失败: {e}"}), 500
# 以期权为主:可选最短剩余小时 / 行权间隔过滤(也回写 hours_to_expiry 供前端)
# 可选:永期以期权为主时按最低剩余小时/行权间隔过滤(仅当请求显式带 option_primary)
# 默认拉链不再带此过滤,避免期期看不到明天到期
option_primary = (request.args.get("option_primary") or "").strip().lower() in (
"1",
"true",
@@ -744,7 +752,7 @@ def register_hedge_plan_routes(app: Flask, cfg: dict[str, Any]) -> None:
"ok": True,
**chain,
"underlying": u,
"chain_max_dte_days": cfg.get("chain_max_dte"),
"chain_max_dte_days": chain_max_dte,
"account_kind": "options",
"account_label": cfg.get("options_account_label") or "期权账户",
"account_note": "期权腿使用期权账户(交易 USDC)",
@@ -406,4 +406,4 @@
</div>
</div>
</div>
<script src="/static/hedge_plan.js?v=45"></script>
<script src="/static/hedge_plan.js?v=46"></script>