Position sizing
A single trade being too large for the account
Size is calculated by the risk engine from your configured base size and account state — not taken from whatever number the model suggested. A model that proposes ten times your normal size gets your normal size, or a rejection.
Max daily loss
A bad day compounding into a catastrophic one
Once realized and unrealized losses for the day reach your configured limit, no new proposal is approved. The limit resets on the daily boundary, not on a rolling window, so it cannot be walked forward by trading through midnight.
Max drawdown
Slow erosion of the account over many sessions
Measured against the account equity peak. Breaching it stops new entries regardless of how good the current proposal looks.
Spread filter
Entering when the cost of the round trip is abnormal
A proposal arriving while the spread on that symbol is above the configured ceiling is rejected. This is the single most common cause of a strategy that backtests well and loses live.
Volatility circuit breaker
Trading into a market that has stopped behaving normally
A rolling statistical measure of recent price movement per symbol. When current volatility is outside the configured band, entries are blocked until it returns.
Stale-data gate
Acting on a price that is no longer real
The core tracks the age of the last tick per symbol. If data has gone stale — a dropped connection, a frozen terminal, a broker outage — proposals on that symbol are rejected rather than filled at a price that may have moved. Failing closed is the default everywhere in this system.
Session & liquidity filter
Fills in thin markets at bad prices
Configurable blackout windows in UTC, covering daily rollover and the weekend close by default. Widen them to sit out any period you do not want the agent active.
Proposal rate limiter
A malfunctioning agent flooding the engine
A cap on how many proposals are accepted in a window. If the AI layer starts misbehaving — a prompt loop, a stuck retry — it hits a ceiling instead of generating unbounded trades.
Max concurrent positions
Death by a thousand small positions
A hard cap on how many positions can be open at once, counted from the position book rather than estimated. Defaults to a conservative number and is yours to set.
Margin sufficiency
A margin call from an over-committed account
Required margin is computed from the symbol contract size and leverage before approval, not discovered when the broker rejects the order.
Correlation & concentration
Six positions that are secretly one position
Highly correlated instruments — gold and silver, for example — are treated as shared exposure rather than independent bets, so the account cannot quietly concentrate all its risk in one direction.
Human approval threshold
Anything unusual slipping through unseen
Proposals past your size or risk threshold return REQUIRES_HUMAN_APPROVAL and wait in the console. The safe outcome — not executing — is what happens by default if you never respond.