XERXES
operator cockpit · v2 · 30-pair kraken spot
next bar --:--:-- —

Cycle Updates

TimeNAV ($)PnL %PositionsTotal TradesCycle Time (s)
Displays the summaries of the last 10 trading cycles.

Engine

Live executor—
Paper ledger—
Dead-man (exchange)—
Market data WS—
Private fills WS—
Reconciliation—
Stop = halt new intent + cancel resting session orders. It does not sell holdings — flattening a live book is a trade and needs its own confirmed action.

Kraken treasury

$— USD FREE CASH
NAV
Invested
—
Coins held
—
deployed —cash —
source: —

Risk gateway

Drawdown from high-water mark —
−5%75% gross
−10%50% gross
−15%latch
HWM — · corr scalar — · gross —
Kill-switch clear
latch persists across restarts · fail-safe on corrupt state

Decision spine — how a cycle becomes orders

last cycle: — status ok warn halt idle

Book — coins bought & targets

NameQtyPriceValue% NAVTargetΔAction
Tap a row to open its decision trace. Value / %NAV = live marks over live NAV; Target = post-risk-gateway weight for the current bar.

Decision trace

—
Select a name from the book to see the exact arithmetic that produced its BUY / SELL / HOLD.

Trade History

TimeActionAssetQtyPriceTotal ($)PnL %
Displays live executed trades. PnL % represents Unrealized return (vs current market) for active Buys, and Realized return for Sells.

Runbook

1 · Start the daemon & open this cockpit
  1. Paper first, always. In .env set EXECUTION_MODE=paper and leave the Kraken keys empty. Run python main.py — five services start: supervisor, this API on :8000, the L2 market-data WebSocket, the private-fills consumer (live only) and the 60-second health monitor.
  2. Open http://127.0.0.1:8000. The mode chip must read PAPER and the spine lights green on the next 4-hour UTC boundary (countdown top-right). Run one cycle now forces a cycle immediately.
  3. Burn in for at least a week: every node green each cycle, turnover sane, no QC warnings storming the second node.
2 · Go live (exact order — do not improvise)
  1. Create a Kraken API key with Query Funds + Create/Modify Orders + Cancel Orders only — never withdrawal — and IP-restrict it.
  2. .env: keys, EXECUTION_MODE=live, and (post-v5 H2) COCKPIT_TOKEN — the daemon refuses to start live without it.
  3. Preflight: python -m app.scripts.check_live_ready then verify_deployment. Both clean.
  4. Set TAKER/MAKER/MODELED_FEE_BPS to your real 30-day tier (base = 26/16). Known caveat: committed weights were swept at 10 bps — the fee-honest re-sweep is roadmap Phase R; running before it is an informed choice.
  5. Launch: XERXES_I_UNDERSTAND_LIVE_RISKS=1 python main.py with only trivial capital on the account. Confirm in the log: baseline adoption (ledger seeded from real holdings) and dead-man armed; confirm the treasury panel says source: live.
3 · The four drills before any real size
  1. Dead-man: kill -9 the process → Kraken must cancel resting orders within 120 s on its own.
  2. Stop button: press ■ Stop → both engine rows must flip to halted and session orders cancel. If the amber banner shows, the backend still pre-dates roadmap H1: treat the kill-switch and quarantine as the only real stops until it lands.
  3. Kill-switch: force a latch at trivial size, restart the process, verify it stays latched (persisted state), then clear it via Reset with a written reason.
  4. Reconciliation: move a dust balance on the exchange by hand → quarantine engages (Reconciliation lamp red, intent halted, API alive) → fix, then ▶ Start to resume.
4 · Reading the spine & the trace
  1. The spine is the actual pipeline in execution order: ingest → QC → 12 signals → regime blend → BTC neutralize → PIT mask → vol target → rank+cap → risk gateway → emission → execution. Green = ran clean; amber = ran with a warning (e.g. >20% of names missing realized variance → those size flat, never levered); red = the stage that halted the cycle; grey = never reached.
  2. Tap any coin: the trace shows its momentum / mean-reversion / predictive z-scores, its variance ratio and the trend-weight σ(k·(VR−1)) it implies, whether the predictive veto fired (|z|>2 overrides everything), its BTC beta and residual score, the HAR-RV vol scalar, the capped rank weight, the risk-gateway scaling, and finally target vs current. The gold-marked row is the rule that decided the verdict.
  3. HOLD usually means the turnover band froze a sub-threshold change — fee discipline, not indecision. BTC always reads HOLD at weight 0: it is the numéraire the alts are hedged against, by construction.
5 · Operating rhythm & alarms
  1. Daily glance: kill-switch panel, drawdown vs. ladder, both WS lamps, last-cycle turnover, cash vs. deployed.
  2. Weekly: fee tier vs. settings, N_eff drift in the log, attribution-breaker status, quarantine review.
  3. On quarantine: inspect first (book, ledger, exchange), resume deliberately. Never reflexively.
  4. Standing before scaling: Dutch Box-1/Box-3 tax consult; four drills passed; ≥2 clean live weeks at trivial size.