diff --git a/backend/app/engine/manager.py b/backend/app/engine/manager.py index 33ea652..96f1f18 100644 --- a/backend/app/engine/manager.py +++ b/backend/app/engine/manager.py @@ -158,6 +158,8 @@ class MultiStrategyManager: halted=engine_status.halted, halt_reason=engine_status.halt_reason, trades_today=engine_status.trades_today, + day_pnl=engine_status.day_pnl, + drawdown_pct=engine_status.drawdown_pct, error=engine_status.error, ) ) diff --git a/backend/app/schemas.py b/backend/app/schemas.py index 93f3a13..486cada 100644 --- a/backend/app/schemas.py +++ b/backend/app/schemas.py @@ -177,6 +177,8 @@ class StrategyStatusOut(BaseModel): halted: bool = False halt_reason: str | None = None trades_today: int = 0 + day_pnl: float = 0.0 + drawdown_pct: float = 0.0 error: str | None = None diff --git a/backend/tests/test_api.py b/backend/tests/test_api.py index 95b5686..abd06fb 100644 --- a/backend/tests/test_api.py +++ b/backend/tests/test_api.py @@ -134,6 +134,8 @@ def test_start_many_and_multi_status(runtime: Runtime, market: FakeMarketData) - assert status["running"] is True assert len(status["strategies"]) == 2 assert status["equity"] == 10000 + # Per-strategy fields the dashboard aggregates must be present. + assert {"day_pnl", "drawdown_pct"} <= set(status["strategies"][0]) client.post("/api/bot/stop") diff --git a/frontend/src/App.vue b/frontend/src/App.vue index 4b8d9eb..40663ff 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -1,5 +1,6 @@