Safety & controls
Because this trades real money, safety is layered. Here is every control and guardrail, and when to use each.
The manual controls
| Control | What it does | Where |
|---|---|---|
| Dry-run (per engine) | Orders are previewed at Schwab and recorded, but never
placed. This is the default for every engine. Switching an engine to LIVE requires typing
LIVE to confirm. | Settings → Execution mode |
| Pause trading | Opens nothing new. Exits, management, and manual actions still run. | Dashboard |
| Close-only | A hard reduce-only lock — nothing opens (autonomous or manual), but management and exits continue. Use it to wind a book down. | Dashboard |
| PANIC | Immediately flattens every open position and pauses trading. | Dashboard |
| Paper trading | Simulated money on real data — forces dry-run for every engine and never places a real order. | Settings → Paper trading |
The automatic guardrails (always on)
- Real-time pricing. Every position is valued on live NBBO bid/ask (never a stale last trade), and a fast poller monitors all open positions continuously.
- Pre-flight buying-power guard. Before every live order the bot previews it against real buying power (reflecting held and working orders) and skips it if it would over-commit — so it doesn't get rejected.
- Post-fill reconciliation. The ledger is corrected to the actual fill (price, quantity, legs). A position is only managed or closed once its opening order is confirmed FILLED.
- No phantom positions. A rejected or skipped live order never records a "filled" position. Day-trade closes cancel the working bracket order first, so you can't oversell.
- Defined risk. Every position carries a defined stop / max loss, capped at your per-trade % of account.
"Turn on autonomous" ≠ "go live." The autonomous flags let the bot open on its own; the live/dry switch decides whether those opens are real or previews. They are separate — you can run fully autonomous in dry-run.