diff --git a/backend/app/api/fleet.py b/backend/app/api/fleet.py index dddd2ca..b31e308 100644 --- a/backend/app/api/fleet.py +++ b/backend/app/api/fleet.py @@ -185,6 +185,8 @@ async def fleet_status(_tok: Annotated[str, Depends(require_fleet_token)]) -> di "avg_px": pos.get("perp_entry_px"), "mark_px": pos.get("perp_mark_px"), "upl": pos.get("perp_upl"), + "margin": pos.get("perp_margin"), + "premium": None, } ) if pos.get("option_side") or pos.get("option_inst_id"): @@ -197,6 +199,8 @@ async def fleet_status(_tok: Annotated[str, Depends(require_fleet_token)]) -> di "avg_px": pos.get("option_entry_px"), "mark_px": pos.get("option_mark_px"), "upl": pos.get("option_upl"), + "margin": None, + "premium": pos.get("initial_premium"), } ) @@ -262,6 +266,7 @@ async def fleet_status(_tok: Annotated[str, Depends(require_fleet_token)]) -> di "group_id": pos.get("group_id"), "open_at_ms": pos.get("open_at_ms"), "initial_premium": pos.get("initial_premium"), + "perp_margin": pos.get("perp_margin"), "exit_target_usdt": pos.get("exit_target_usdt"), "net_pnl": pos.get("net_pnl"), "perp_upl": pos.get("perp_upl"), diff --git a/control/frontend/src/pages/Monitor.tsx b/control/frontend/src/pages/Monitor.tsx index 37bf5b8..41dd64b 100644 --- a/control/frontend/src/pages/Monitor.tsx +++ b/control/frontend/src/pages/Monitor.tsx @@ -31,6 +31,17 @@ function fmt(v: unknown, digits = 4): string { return n.toFixed(digits); } +/** 价格按交易所常见精度:永续/指数 0.01;期权权利金 0.1 */ +function fmtExPx(kind: unknown, px: unknown): string { + if (px == null || px === "") return "—"; + const n = Number(px); + if (!Number.isFinite(n)) return String(px); + if (String(kind || "").toLowerCase() === "option") { + return (Math.round(n * 10) / 10).toFixed(1); + } + return (Math.round(n * 100) / 100).toFixed(2); +} + function pnlClass(v: unknown): string { const n = Number(v); if (!Number.isFinite(n) || n === 0) return "pnl-flat"; @@ -917,10 +928,14 @@ export default function MonitorPage() { {fmt(detail.strat.option_qty_eth, 4)} ETH