Skip to main content

Spot Trading Limits

The engine has two categories of limits covering:

  • Rate of transactions.
  • Open order count.

Each of these limits are applied in the engine and are agnostic of the API, i.e. same limit across REST, Websockets and FIX.

Transaction Rate Limits

Each client has a rate counter per pair, the count starts at 0 and the count is incremented on each transaction by a given amount depending on the transaction type. The count is decremented over time by a decay rate based on client tier.

When the rate counter threshold is reached, the engine will generate EOrder:Rate limit exceeded rejection message.

Note, most clients will never reach the trading rate threshold and the restriction is designed to protect the market / platform when clients trading at higher frequencies with a larger quantity of orders.

Incrementing the rate counter

The table below shows the increase in the rate counter for different transactions:

  • Fixed count: this is always applied on receipt of the transaction (even if the transaction fails validation).
  • Decaying count: this is an additional count depending on the resting time of the order. The size of the count depends on the number of seconds since the order was created or amended.
TransactionFixed< 5s< 10s< 15s< 45s< 90s< 300s
Add Order+1------
Amend Order+1+3+2+1---
Edit Order+1+6+5+4+2+1-
Cancel Order-+8+6+5+4+2+1
Batch Add+(n/2)------
Batch Cancel-+(8*n)+(6*n)+(5*n)+(4*n)+(2*n)(1*n)

Note, for batch orders:

  • n represents the number of orders in a batch.
  • If the rate counter in the batch exceeds maximum for a batch cancel, the requests in batch are still accepted.

Example: rate counter increase over short order lifetime

Scenario: a client sends a new order and amends the price after 7 seconds. After a further 36 seconds, the client cancels the order from the book, what would be the increase to the rate counter?

DescriptionRate Count ChangeRate Count Total
Add order - fixed+11
Amend order - fixed+12
Amend order - decay < 15s+24
Cancel order - decay < 45s+48

The client will have accumulated a total rate counter value of 8 for this specific pair.

This simple example shows the increase in rate counter only. In practise the rate counter is also decrementing over time, this will be covered in the next section.

Decrementing the rate counter

The rate counter is decreased by a decay rate every second, the decay rate varies by client tier.

Starter TierIntermediate TierPro Tier
Rate counter decay rate-1-2.34-3.75

Example: rate counter decrease over 10 seconds

Scenario: a intermediate tier client has entered a burst of 50 orders and waited 10 seconds, what would be the new rate counter value at the end of the period?

rate counter = (50 orders * add order) - (10 seconds * intermediate decay rate) = (50 * 1) - (10 * 2.34) = 26.6

Exceeding rate counter threshold

When the rate counter exceeds the threshold for the client tier, further transactions will be restricted with EOrder:Rate limit exceeded rejection until the rate counter has decayed below the threshold.

Starter TierIntermediate TierPro Tier
Rate counter threshold60125180

Additional rate counter information

Open Order Limits

The open order limit is the maximum number of open orders per pair. When the open order threshold is reached, the engine will generate EOrder:Orders limit exceeded rejection message.

The maximum open order limit varies per client tier.

Starter TierIntermediate TierPro Tier
Max open orders per pair6080225