Orchestrator — Server-side
Nieuw model
OrderRecord — OrderId, Side, Status, Price, Size, Fee, PnL, PnLPct, Timestamp
StateHub uitgebreid
_tradeHistory bijgehouden (max 20, thread-safe)
OnConnectedAsync pusht Portfolio + TradeHistory bij nieuwe verbinding
LastKnownPrice bijgehouden via WebSocket-ticker
OrderManager
- Na order:
OrderRecord aanmaken en broadcasten via SignalR
- PnL berekend voor sells:
(exitPrice - entryPrice) × size − fee
- Mislukte orders (cancelled / insufficientFunds) ook geregistreerd als
status=failed
- Configureerbare fee-rate via
Kraken:FeeRate (default 0.05%)
Dashboard — Client-side
OrchestratorHubService
OrderRecord gespiegeld in Models/TradeModels.cs
- Luistert naar
TradeExecuted en TradeHistory via SignalR
TradeHistory.razor
- Tabel: Side | Prijs | Size | PnL ($) | PnL% | Timestamp — nieuwste eerst, max 20
- Alleen
status=placed trades zichtbaar
- PnL-kleur: groen = winst, rood = verlies, — = buy
OrderBook.razor
- Laatste 5 orders — Side | Prijs | Size | Status | Tijd
- Status-chips: ✓ Geplaatst (groen) / ✗ Mislukt (rood)
Acceptatiecriteria (Must)
- Build 0 errors · 0 warnings
- TradeHistory zichtbaar direct na verbinding (push op
OnConnectedAsync)
- Nieuwe trade verschijnt zonder pagina-refresh
- PnL correct voor sell-orders
- Geen polling — uitsluitend SignalR push
- Geen regressies in Portfolio, SignalDisplay, HealthStatus
Buiten scope
- Authenticatie
- Historische data via REST
- OHLC-grafiek
- Live order book Kraken (bids/asks)
- Admin-functies