Skip to content

Risk Management

Every order passes through 8 sequential risk checks before reaching the broker. Checks are evaluated in order of severity — the first failure stops the pipeline.

Blocks ALL trading when active. Triggers: daily loss limit breach or state discrepancy (circuit breaker).

Three rate limit types:

  • Per-second: Max 2 orders/second (fixed)
  • Per-minute: Configurable (default: 10)
  • Per-symbol cooldown: 5 seconds between orders on the same symbol (fixed)

readonly mode blocks all trading operations. paper and live modes pass this check.

Only symbols in the symbol catalog can be traded. Rejects unknown or unlisted symbols.

current position volume + new order volume <= asset class limit

Each asset class has its own maximum position size limit:

Asset ClassParameterDefault
FX (Forex)maxPositionSizeFxNo limit (optional)
IndicesmaxPositionSizeIndicesNo limit (optional)
Other (stock CFDs, crypto CFDs, etc.)maxPositionSizeOtherNo limit (optional)
CommoditiesmaxPositionSizeCommoditiesNo limit (optional)
  • The symbol’s asset class is determined from the symbol catalog
  • Closing/reducing trades (opposite side) always pass this check
  • Linked SL/TP orders (STOP/LIMIT placed with a positionId) always pass this check — they hedge/close an existing position, not build new exposure

Total number of open positions across all symbols cannot exceed MAX_OPEN_POSITIONS (default: 20).

  • Linked SL/TP orders (placed with a positionId) always pass this check — they do not open a new position

Realized P&L for the day cannot exceed the daily loss limit (default: $2,000).

  • Persisted across your session
  • Resets at 17:00 New York time (DST-adjusted; 22:00 UTC in winter, 21:00 UTC in summer)
  • Volume must be greater than zero
  • Broker enforces actual minimum trade quantity and volume step per symbol (e.g., XAUUSD requires min 100 lots = 1,000 units). Check cTrader Symbol Info.

The emergency stop mechanism that blocks ALL trading operations.

TriggerConditionDefault
Daily loss limitRealized daily loss exceeds limit$2,000
State discrepancyMaterial difference between local and broker state (circuit breaker)Always on
  • All pending orders are cancelled
  • All new orders are rejected with KILL_SWITCH_ACTIVE error
  • Error message includes activation reason and deactivation instructions
  • Daily loss trigger auto-resets at 17:00 New York time (DST-adjusted)
Limit TypeDefaultConfigurable
Orders per second2No (fixed)
Orders per minute10Yes
Per-symbol cooldown5 secondsNo (fixed)

When exceeded, the server returns a RATE_LIMITED error with the exact number of seconds to wait before retrying.

LimitDefaultDescription
Max position size (FX)No limit (optional)Max volume per FX symbol (units)
Max position size (Indices)No limit (optional)Max volume per index symbol (units)
Max position size (Other)No limit (optional)Max volume per other symbol (stock CFDs, crypto CFDs, etc.)
Max position size (Commodities)No limit (optional)Max volume per commodity symbol (units)
Max open positions20Max concurrent positions
Daily loss limit2,000Max daily realized loss ($)
Max orders per minute10Rate limit per minute