Portfolio Tracker
One page for every position, balance and PnL number. Open it from the terminal's Portfolio tab — equity, open trades, holdings and performance all live together here.
What the Portfolio page shows
The layout is identical on desktop and mobile. Four stat tiles at the top, open positions below, then a scrollable holdings table.
Equity tiles
Net Worth, P&L vs Cost, Asset Count and Health Score. Net Worth is your paper account virtualBalance plus unrealized PnL from open trades.
Open positions strip
Every live bot-run or manual trade. Tap a row to see entry, current price, PnL and duration. From there you can adjust SL/TP or close the position.
Holdings table
Per-asset breakdown: position size, USD value, allocation % and a visual bar. Click any row to pop the chart open in a new tab.
Health check
Press Run Health Check and Kai returns a 0–100 score, status label and actionable advice about concentration and drawdown risk.
Import trades via CSV
Drop a CSV, TXT or JSON export from any broker into the Import CSV modal. Kai AI parses it automatically — there is no rigid column spec. You can paste anything, but these are the fields the parser looks for:
symbol— ticker, e.g.BTC,AAPL,EURUSD(required)balanceorquantity— current position size (required)exchangeorbroker— optional source label
Sold assets are ignored — only current holdings are imported. Max file size 5 MB.
Connect an exchange
Click Connect Exchange to pair a Binance or Bybit API key. 2FA must be enabled on your account before any key is accepted. Keys are encrypted with AES-256 at rest and read-only access is strongly recommended.
What syncs
- Spot balances & positions
- Filled trade history
- Asset USD valuations
What does not sync
- Exchange-native strategy bots
- Staking / earn positions
- Futures margin (spot only right now)
Hit the Sync button in the header to force a refresh — last-sync time is shown under the header.
How PnL is computed
Realized PnL is the sum of closed trade results (exit price − entry price) × size, minus fees, aggregated over Today / 7d / 30d.
Unrealized PnL is computed live on every open position using the latest price from the market data feed. Equity = virtualBalance + unrealizedPnl.
Win rate = closed winning trades / total closed trades for the selected window.
Per-position actions
Tap any open position to drop into its detail view. From there you can:
- Adjust stop-loss and take-profit at any time
- Close the trade manually (paper or live)
- Jump into the chart with the entry and SL/TP drawn
- Ask Kai about the position without re-typing the ticker
Mobile view
On phones, open positions render as stacked cards (OpenPositionsMobile) with haptic feedback on tap. The holdings table horizontally scrolls and pinch-to-refresh pulls a fresh sync. Everything else stays identical.
Limits by plan
Aggregate balance & PnL only. No per-asset history.
Full holdings table, 30-day PnL history, exchange sync, health check.
Everything in Pro + unlimited imports and priority sync cadence.
Next: Notifications
Wire up push, email and Discord so you never miss a bot signal or PnL swing.
Source: components/terminal/PortfolioPage.tsx · components/ImportPortfolioModal.tsx · components/ConnectExchangeModal.tsx · app/api/portfolio/snapshot/route.ts