Skip to content

Risk management

Sixteen controls, none of them written in a prompt

Every limit here is deterministic code reading a versioned policy file. That distinction is the point: a rule in a prompt is a suggestion a model can reinterpret, and a rule in the risk engine is a gate it cannot reach.

Before a trade exists

Twelve gates between a proposal and an order

A proposal must pass all of them. Failing one is enough to reject it, and the rejection records which one.

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.

While the trade is open

Four rules running on every tick

These run in the C++ core, independently of the AI layer, the dashboard, and the database. They keep working when those do not.

Emergency exit

One position running away from you

An independent per-position kill switch on unrealized loss, evaluated before every other rule on every tick. Nothing can outvote it — not a strategy signal, not a confident model, not position management.

Profit lock

Watching a winner become a loser

Closes the position when profit falls a configured percentage below its own peak.

Trailing stop

Giving back an open gain

Follows price in your favour and only ever tightens. There is no code path that widens it.

Break-even

A winning trade turning into a losing one

Moves the stop to entry once the position is far enough ahead. Fires once, guarded so it cannot re-trigger.

What none of this does

These controls bound the size and speed of a loss. They do not prevent losses, and no configuration of them can. A stop can slip in a fast market. A gap over a weekend can open past your exit. A broker can reject an order. Correlation assumptions can be wrong precisely when they matter most.

Treat every number here as a limit on how much you are willing to lose, not as a guarantee of what you will keep. Read the full risk disclosure before trading with real capital.

See these controls act on real proposals

Run the trial on a demo account and watch what gets rejected, and why.