From 8bd5f8fa84924451bc4039c3e567e65cb76bcc3b Mon Sep 17 00:00:00 2001 From: dev-worker Date: Mon, 2 Mar 2026 17:37:03 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=A8=A1=E6=8B=9F=E7=9B=98=E5=89=8D?= =?UTF-8?q?=E7=AB=AFActivePositions=E7=BB=84=E4=BB=B6=E8=87=AA=E8=A1=8Cfet?= =?UTF-8?q?ch=20config=E8=AE=A1=E7=AE=97paper1R?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/app/paper-v52/page.tsx | 9 +++++++-- frontend/app/paper/page.tsx | 9 +++++++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/frontend/app/paper-v52/page.tsx b/frontend/app/paper-v52/page.tsx index dc64419..0bd4eb6 100644 --- a/frontend/app/paper-v52/page.tsx +++ b/frontend/app/paper-v52/page.tsx @@ -233,6 +233,12 @@ function LatestSignals() { // ─── 当前持仓 ──────────────────────────────────────────────────── function ActivePositions({ strategy }: { strategy: StrategyFilter }) { + const [paperRiskUsd, setPaperRiskUsd] = useState(200); + useEffect(() => { + (async () => { + try { const r = await authFetch("/api/paper/config"); if (r.ok) { const cfg = await r.json(); setPaperRiskUsd((cfg.initial_balance || 10000) * (cfg.risk_per_trade || 0.02)); } } catch {} + })(); + }, []); const [positions, setPositions] = useState([]); const [wsPrices, setWsPrices] = useState>({}); @@ -294,8 +300,7 @@ function ActivePositions({ strategy }: { strategy: StrategyFilter }) { const fullR = riskDist > 0 ? (p.direction === "LONG" ? (currentPrice - entry) / riskDist : (entry - currentPrice) / riskDist) : 0; const tp1R = riskDist > 0 ? (p.direction === "LONG" ? ((p.tp1_price || 0) - entry) / riskDist : (entry - (p.tp1_price || 0)) / riskDist) : 0; const unrealR = p.tp1_hit ? 0.5 * tp1R + 0.5 * fullR : fullR; - const paper1R = (config?.initial_balance || 10000) * (config?.risk_per_trade || 0.02); - const unrealUsdt = unrealR * paper1R; + const unrealUsdt = unrealR * paperRiskUsd; return (
diff --git a/frontend/app/paper/page.tsx b/frontend/app/paper/page.tsx index 3f93591..51b6ced 100644 --- a/frontend/app/paper/page.tsx +++ b/frontend/app/paper/page.tsx @@ -183,6 +183,12 @@ function LatestSignals() { // ─── 当前持仓 ──────────────────────────────────────────────────── function ActivePositions() { + const [paperRiskUsd, setPaperRiskUsd] = useState(200); + useEffect(() => { + (async () => { + try { const r = await authFetch("/api/paper/config"); if (r.ok) { const cfg = await r.json(); setPaperRiskUsd((cfg.initial_balance || 10000) * (cfg.risk_per_trade || 0.02)); } } catch {} + })(); + }, []); const [positions, setPositions] = useState([]); const [wsPrices, setWsPrices] = useState>({}); @@ -231,8 +237,7 @@ function ActivePositions() { const fullR = riskDist > 0 ? (p.direction === "LONG" ? (currentPrice - entry) / riskDist : (entry - currentPrice) / riskDist) : 0; const tp1R = riskDist > 0 ? (p.direction === "LONG" ? ((p.tp1_price || 0) - entry) / riskDist : (entry - (p.tp1_price || 0)) / riskDist) : 0; const unrealR = p.tp1_hit ? 0.5 * tp1R + 0.5 * fullR : fullR; - const paper1R = (config?.initial_balance || 10000) * (config?.risk_per_trade || 0.02); - const unrealUsdt = unrealR * paper1R; + const unrealUsdt = unrealR * paperRiskUsd; return (