Every TradeOnyx user owns one or more trading accounts. Each account is its own bookkeeping context — separate trades, separate journal entries, separate symbol mappings, separate equity curve. The account you're currently working in is your active account, set in your user settings; every dashboard query (Overview, Trades, Journal, Briefing, …) is automatically scoped to it.
The account switcher lives in the header next to the notification bell. The dropdown lists every account you own, marks the active one with a gold dot, and offers a one-click create-and-activate flow. The same controls live in Settings → Accounts with extras: rename, activate, and delete (with trades reassignment to the surviving account).
Tier limits, set in `models.py::ACCOUNT_LIMITS`: member 1, pro 3, pro+ 10, admin 999. The cap is enforced server-side — a leaked frontend isn't a bypass.
Why a serious trader runs multiple accounts: - Prop firm + personal capital — keep the prop-firm rules (drawdown limit, daily-loss limit) and the personal-account freedom on separate equity curves. Mixing them muddies the metric. - Broker A + Broker B — the spread, slippage and overnight cost differ per broker. Per-account stats expose which broker is actually netting you more. - Strategy buckets — same broker, two strategies (e.g. systematic vs. discretionary). Per-account expectancy shows which is paying its way. - Demo alongside live — practice a new playbook in demo mode without contaminating the live track record. When the demo expectancy is positive over enough trades, promote it. - Account-isolated symbol mappings — XTB's `US100` and another broker's `NAS100` both map to `^NDX` for price-chart lookups, but the per-account mapping table keeps that quiet from each other. No accidental contamination.
What the active-account scope means in practice: the Overview equity curve, the KPI tiles, the calendar grid, the weekday chart, the S&P 500 comparison — everything you see is the active account's data. Switching accounts triggers a full reload because every cached page-load is scoped; a soft nav would leave the chart stale.
The classic prop-firm setup: account 1 is your FTMO 100K, account 2 is your personal IB Margin. Trade them out of the same TradeOnyx session, switch in the header between sessions. The prop-firm rules (max daily loss 5K, max overall drawdown 10K) live as risk-limits configured per account; breach a threshold and the notification dispatcher fires a `risk_limit` row scoped to that account, not the personal one.
The broker-comparison setup: same playbook, two brokers, six months of live fills. The two equity curves diverge over time — one broker's spread is eating you alive on EURGBP scalps, the other's swap rates are a quiet drag on the overnight stuff. The Overview tab makes that visible per account. You close one of the brokers; expectancy on the surviving one improves immediately because the platform fee is gone.
In TradeOnyx every backend write is scoped by `(user_id, account_id)`. Cross-account access from another user returns 404, not 403, so the existence of other users' accounts can't be probed. That's intentional — it preserves the multi-account model as a single-tenant data architecture, not a permission layer waiting to leak.