diff --git a/backend/app/api/fleet.py b/backend/app/api/fleet.py index 092f834..c7acf59 100644 --- a/backend/app/api/fleet.py +++ b/backend/app/api/fleet.py @@ -271,6 +271,9 @@ async def fleet_status(_tok: Annotated[str, Depends(require_fleet_token)]) -> di "min_option_leverage": _pick( "min_option_leverage", float(settings.min_option_leverage) ), + "min_option_hours": _pick( + "min_option_hours", float(settings.min_option_hours) + ), "perp_margin_mode": st.get("perp_margin_mode"), "perp_qty_eth": st.get("perp_qty_eth"), "option_qty_eth": st.get("option_qty_eth"), diff --git a/control/frontend/src/pages/Monitor.tsx b/control/frontend/src/pages/Monitor.tsx index bf86857..8bd0b58 100644 --- a/control/frontend/src/pages/Monitor.tsx +++ b/control/frontend/src/pages/Monitor.tsx @@ -180,8 +180,9 @@ type RiskLines = { lossPct: string | null; exit: string; openRatio: string | null; - /** 表格「风险/开仓」列:如 5%/1:2;手动为 —/名义比 */ + /** 表格「风险/开仓」列:如 5%/1:2/12;手动为 —/名义比/时长 */ riskOrOpen: string; + minHours: string; leverage: string; }; @@ -218,7 +219,9 @@ function riskLines(strat: Record): RiskLines { const openRatio = riskBased ? `${unitLabel(strat.risk_perp_unit)}:${unitLabel(strat.risk_option_unit)}` : `${unitLabel(strat.perp_qty_eth)}:${unitLabel(strat.option_qty_eth)}`; - const riskOrOpen = `${lossPct || "—"}/${openRatio}`; + const hoursN = Number(strat.min_option_hours); + const minHours = Number.isFinite(hoursN) ? unitLabel(hoursN) : "—"; + const riskOrOpen = `${lossPct || "—"}/${openRatio}/${minHours}`; return { riskBased, sizing: riskBased ? "以损定仓(A)" : "手动开仓(B)", @@ -227,6 +230,7 @@ function riskLines(strat: Record): RiskLines { exit, openRatio, riskOrOpen, + minHours, leverage: leveragePair(strat), }; } @@ -789,7 +793,7 @@ export default function MonitorPage() { {s.rounds ?? "—"} {risk.riskOrOpen}