A continuous autonomous agent that monitors drift across every client portfolio, proposes corrective trades when thresholds are crossed, and executes — within the hard limits you define. No batches. No schedules. No manual workflows.
The problem
Executes on a fixed schedule regardless of actual drift. It sells into momentum, buys into drawdowns, and generates unnecessary transaction costs — on a timer, not on signal.
One analyst can watch a handful of portfolios. As AUM grows, coverage gaps emerge. Drift compounds unnoticed. The operational cost scales linearly with book size.
You see a recommendation. You don't see why. Black-box systems create audit risk, complicate client reporting, and make regulatory defence difficult.
How it works
The engine separates the mathematics of rebalancing from the mechanics of execution. A pure, stateless calculation core. A live autonomous agent wrapped around it.
Define target allocations, drift thresholds, and circuit breaker limits as configuration objects — not code. Update strategy for any portfolio without redeployment.
The agent runs in a live evaluation loop, pulling real-time price and position state from the broker API on every tick. Every portfolio, all the time.
When drift crosses a threshold, the engine calculates corrective trades. Circuit breakers enforce hard limits on trade count and gross notional before anything touches the broker.
Architecture
The calculation core is a pure function. It accepts inputs — prices, positions, cash, policy — and returns outputs: drift measurements and trade proposals. It makes no network calls, reads no clocks, mutates no state.
The orchestrator is the live agent. It connects to broker APIs, manages rate-limiting and cooldown timers, executes orders, and handles post-trade reconciliation. Every side effect lives here, not in the engine.
This separation means the engine is independently testable and auditable. The same calculation logic that runs live can be run offline against historical data. The output is deterministic. You can explain every trade.
Capabilities
Threshold (drift-triggered), calendar due-date, and manual forced-rebalance. Selectable per portfolio via policy configuration.
Full-reset targeting and boundary-band targeting. Full-reset returns to exact target weights. Boundary-band stops at the drift threshold to minimise unnecessary trades.
Hard stops on maximum trade count and gross notional value per execution cycle. Configurable per tenant. Global override for market stress events.
Every calculation emits a structured JSON record: inputs, outputs, drift measurements, and the exact rationale for each trade proposal. Immutable by design.
Settled deposits and withdrawals, pending cash flows, and scheduled recurring contributions are all factored into trade proposals. Incoming cash is used to reduce drift before trades.
Each advisory firm is an isolated tenant. Portfolio state, broker credentials, and circuit breaker limits are scoped per tenant. Provisioned by the platform operator.
Target allocations, threshold bands, and strategy types are configuration objects — not hardcoded logic. Update any portfolio's strategy without touching the engine.
The agent pauses evaluation for a portfolio while broker orders are pending. Prevents double-execution on in-flight trades. Resumes automatically on confirmation.
Portfolios follow typed mandate archetypes — StaticWeights, EfficientFrontier, MinimumVariance — each bound to a specific quality evaluation function. The engine never trades if estimated transaction costs exceed the utility of the drift reduction.
Advisors define named model mandates with target allocations and rebalancing policy. Client portfolios subscribe as discretionary (cascade-on-update) or bespoke (independent). Mandate changes propagate automatically to all subscribed portfolios.
Status
The engine is live on Alpaca paper trading. Multi-tenant B2B architecture, broker routing, and API key infrastructure are live. The full source — including 51 architecture decision records documenting every design choice — is on GitHub.