8 ยท Live
Deploy to real capital โ and treat monitoring as part of the system, not an afterthought.
Going live means the same system you validated now trades real money. Nothing about the strategy should change here; what changes is that mistakes cost, and that operations become part of the edge. A profitable system that's mismanaged in production loses money.
Earn the right to be here
Live is the last stage for a reason. Before deploying, you should have:
- A backtest that survives realistic costs.
- Parameters on a plateau, not a spike (Sensitivity).
- Out-of-sample and stress results that hold up (Robustness).
- A clean paper-trading run with no plumbing surprises (Paper).
Start small
Deploy with a fraction of your intended capital first. The first live weeks are a final integration test with real money โ size up only once behaviour matches expectations.
Operations is the system now
Monitor continuously
Watch the heartbeat, live logs, cash/position reconciliation and the equity curve. Silence is not the same as health โ an absent heartbeat is an incident.
Reconcile against broker truth
The broker โ not your local state โ is the source of truth for cash, positions and fills. Live state must periodically snap to it and flag any drift.
Have a kill switch
Know exactly how to flatten positions and stop the system. Decide the conditions that trigger it before you need it.
Watch for live-vs-backtest divergence
Track realised performance against expectation. Persistent divergence means the edge has decayed or something is broken โ either way, act.
A critical safety rule
Exactly one live process โ never scale it
The component that trades live must run as a single instance. Two copies would each place every order, doubling your real-world exposure. Simulation workers scale freely; the live trader must not.
In Malgot
- It reads a desired state from Postgres (
live_system) โ the backend writes what should be running; the daemon converges to it. - Redis
engine:commandsis only a nudge to look now; the daemon also reconciles on boot and every 30 seconds, so it survives a backend outage or a lost command. - It streams heartbeat and engine logs over Redis, surfaced in the UI (and admin engine log stream).
- It is a single instance by design โ the compose file must never scale it.
Maturing
Broker execution adapters (real order placement, fill reconciliation, paper mode) are still hardening โ the reconciler abstraction is in place, with the simulation path complete and live/paper adapters maturing. Treat live trading as beta: start tiny, watch it closely, and verify every fill against your broker directly.
That's the red thread end to end. Robustness isn't a single feature โ it's the discipline of never letting a number impress you until it has survived every stage before this one.
