From cd88fa5d83ad08a2deb9a330bc5342fa9122eadc Mon Sep 17 00:00:00 2001 From: dekun Date: Fri, 7 Aug 2026 16:21:36 +0800 Subject: [PATCH] Hide perp-option settings when option-option hedge is selected. Show OO selection and reward-ratio fields in their tabs instead. Co-authored-by: Cursor --- frontend/src/pages/Settings.tsx | 449 +++++++++++++++++++------------- 1 file changed, 269 insertions(+), 180 deletions(-) diff --git a/frontend/src/pages/Settings.tsx b/frontend/src/pages/Settings.tsx index 45aad2f..e5a5e8e 100644 --- a/frontend/src/pages/Settings.tsx +++ b/frontend/src/pages/Settings.tsx @@ -368,10 +368,12 @@ export default function SettingsPage() { setStratOk(""); setErr(""); const isLive = mode === "LIVE"; + const oo = hedgeMode === "option_option"; try { const body: Record = { fee_rate: fee, - exit_mode: sizingMode === "risk_based" ? "fixed_usdt" : exitMode, + exit_mode: + oo || sizingMode === "risk_based" ? "fixed_usdt" : exitMode, premium_exit_multiple: premMult, rest_seconds: rest, live_order_interval_sec: orderInterval, @@ -381,16 +383,16 @@ export default function SettingsPage() { perp_margin_mode: perpMarginMode, min_option_hours: minHours, min_option_leverage: minOptLev, - atm_open_offset_enabled: atmOffOn, + atm_open_offset_enabled: oo ? false : atmOffOn, max_atm_open_offset: maxAtmOff, - fixed_direction_enabled: fixedDirOn, + fixed_direction_enabled: oo ? false : fixedDirOn, fixed_perp_side: fixedPerpSide, close_bid_mark_max_pct: closeDevPct, residual_min_premium_pct: residualMinPremPct, show_manual_trade_buttons: showManualTrade, - sizing_mode: sizingMode, + sizing_mode: oo ? "risk_based" : sizingMode, risk_leverage_basis: riskLeverageBasis, - risk_loss_mode: riskLossMode, + risk_loss_mode: oo ? "percent" : riskLossMode, risk_loss_pct: riskLossPct, risk_loss_usdt: riskLossUsdt, risk_capital_source: riskCapitalSource, @@ -399,8 +401,8 @@ export default function SettingsPage() { risk_option_unit: riskOptUnit, risk_exit_unit: riskExitUnit, martingale_enabled: - sizingMode === "risk_based" && - riskLossMode === "percent" && + (oo || sizingMode === "risk_based") && + (oo || riskLossMode === "percent") && riskLossPct <= 3 && martingaleOn, martingale_start_after_loss_days: martingaleStartAfter, @@ -543,6 +545,8 @@ export default function SettingsPage() { } } + const isOo = hedgeMode === "option_option"; + return (

系统设置

@@ -676,34 +680,40 @@ export default function SettingsPage() { />
) : null} -
- - setLeverage(Number(e.target.value))} - /> -
-
- - -
+ {!isOo ? ( + <> +
+ + setLeverage(Number(e.target.value))} + /> +
+
+ + +
+ + ) : null}
setOoAmpPct(Number(e.target.value))} - /> -
-
- - - setOoAmpHours(Number(e.target.value)) - } - /> -
-
- - - setOoMinHours(Number(e.target.value)) - } - /> -
-
- - setOoMinLev(Number(e.target.value))} - /> -
-
- - - setOoRewardRatio(Number(e.target.value)) - } - /> -

- 目标盈利 = 以损预算 × 盈亏比(例预算 100U、比 2 → 目标 - 200U)。两腿 1:1 平分预算。 -

-
- + {isOo ? ( +
+ + + setOoRewardRatio(Number(e.target.value)) + } + /> +

+ 目标盈利 = 以损预算 × 盈亏比(例预算 100U、比 2 → 目标 + 200U)。两腿 1:1 平分预算。振幅/选约参数见「选约」页。 +

+
) : null} -
- - -
- {sizingMode === "risk_based" ? ( + {!isOo ? ( +
+ + +
+ ) : ( +
+ +
+ 以损定仓(期期固定 · Call/Put 1:1) +
+
+ )} + {sizingMode === "risk_based" || isOo ? ( <> -
- - -

- 选约杠杆:按「指数÷期权杠杆≥」估权利金算 k,权利金再便宜也不放大仓位。 - 实际杠杆:按盘口卖一定仓,便宜时 k 会变大。 -

-
-
- - -
- {riskLossMode === "percent" ? ( + {!isOo ? ( +
+ + +

+ 选约杠杆:按「指数÷期权杠杆≥」估权利金算 + k,权利金再便宜也不放大仓位。 + 实际杠杆:按盘口卖一定仓,便宜时 k 会变大。 +

+
+ ) : null} + {!isOo ? ( +
+ + +
+ ) : null} + {isOo || riskLossMode === "percent" ? ( <>
@@ -1072,10 +1047,18 @@ export default function SettingsPage() { : mg != null && mg.enabled === true ? ` · 倍投待命(连亏${Number(mg.loss_days) || 0}天)` : ""; - return `k=${pk ?? "—"} · 预算=${budS}U · 估亏=${mxS}U · 永续=${perp ?? "—"} · 期权=${opt ?? "—"} · 出场=${exit ?? "—"}${basisS}${mgS}`; + return isOo + ? `预算=${budS}U · 估亏=${mxS}U · 出场=预算×${ooRewardRatio}${ + riskPreview.option_qty_eth != null + ? ` · 单腿≈${riskPreview.option_qty_eth}ETH` + : "" + }${mgS}` + : `k=${pk ?? "—"} · 预算=${budS}U · 估亏=${mxS}U · 永续=${perp ?? "—"} · 期权=${opt ?? "—"} · 出场=${exit ?? "—"}${basisS}${mgS}`; })()}
+ {!isOo ? ( + <>
+ + ) : null} ) : null} + {!isOo ? ( + <>
+ + ) : null} ) : null} @@ -1228,6 +1217,66 @@ export default function SettingsPage() {

选约条件

+ {isOo ? ( + <> +
+ + setOoAmpPct(Number(e.target.value))} + /> +
+
+ + + setOoAmpHours(Number(e.target.value)) + } + /> +
+
+ + + setOoMinHours(Number(e.target.value)) + } + /> +
+
+ + setOoMinLev(Number(e.target.value))} + /> +

+ 期期:同到期虚值 Call 贴高点、Put 贴低点;不使用 ATM/固定方向。 +

+
+ + ) : ( + <>
setMaxAtmOff(Number(e.target.value))} />
+ + )}
) : null} @@ -1317,6 +1368,26 @@ export default function SettingsPage() {

出场与平仓

+ {isOo ? ( +
+ + + setOoRewardRatio(Number(e.target.value)) + } + /> +

+ 净盈 ≥ 预算×盈亏比时只平盈利腿;亏损腿进残留,按下方回收比例或到期结算。 +

+
+ ) : ( + <>
) : null} -
  • - 永续保证金模式:仅作用于永续(全仓/逐仓,默认全仓)。OKX - 期权始终为现金/逐仓(cash),不受此选项影响。 -
  • + {isOo ? ( +
  • + 期期对冲:强制以损定仓 + 亏损幅度%;两腿 1:1 平分预算;出场用盈亏比,不使用永续名义/比例/k。 +
  • + ) : ( +
  • + 永续保证金模式:仅作用于永续(全仓/逐仓,默认全仓)。OKX + 期权始终为现金/逐仓(cash),不受此选项影响。 +
  • + )} ) : null} {stratSub === "select" ? ( + isOo ? ( +
  • + 期期选约:回看窗内真实高低点振幅达标后,同到期虚值 Call + 贴高、Put 贴低;剩余到期与单腿杠杆门限见本页。 +
  • + ) : ( <>
  • 固定方向:默认关。开启后固定永续多→买 Put,或永续空→买 @@ -1552,6 +1639,7 @@ export default function SettingsPage() { 开仓 ATM 最大偏差:仅开关开启且未开固定方向时生效。币安行权价较粗时可能长时间无开仓机会。
  • + ) ) : null} {stratSub === "exit" ? ( <> @@ -1560,8 +1648,9 @@ export default function SettingsPage() { 流动性闸门;LIVE 以交易所能否成交为准。
  • - 残留期权回收比例:只平永续后,当买一权利金回升到初始权利金的该比例及以上时,按最新买一 - IOC 限价卖掉归档期权(不扫市价);默认 20%。未达标或未完全成交则等到下次巡检或到期结算。 + {isOo + ? "残留回收:达标只平盈利腿后,亏损腿权利金回升到初始比例及以上时可尝试平仓;否则到期结算。" + : "残留期权回收比例:只平永续后,当买一权利金回升到初始权利金的该比例及以上时,按最新买一 IOC 限价卖掉归档期权(不扫市价);默认 20%。未达标或未完全成交则等到下次巡检或到期结算。"}
  • ) : null}