Version 26.11.2022

Revised control of your limits

Breaking changes in API. See below

Our biggest update to the Risk management system

In short

The updated Limits section now is called Risk Management. The Net limit is replaced with margin requirements. The Gross limit remains intact. You may control your risk with one or both means of risk management. The margin requirement is disabled and will not affect the trading right after the update. Once enabled, it will halt trading if the equity falls below the set-up value.

Please refer to gross limit and equity pages to recap how both of them are calculated. Breaking changes in API affect you if you use functions or feeds associated with limits. See below. Additionally, you may disable trading with your counterparty without restricting transactions and requests.

Changes to the Global Gross Limit

Both makers and takers should set a global gross limit to start trading. Global gross limit limits maximal open position. Gross limit exposure is a maximal open position. Trading operations and transactions are forbidden if gross limit exposure will exceed the global gross limit as a result of these operations.

Changes to the Counterparty Limits

In order to start trading with each other, counterparties should set their counterparty limits against each other.

You may use only gross limit or gross limit and margin requirement

Only gross limit

It works as a global gross limit but takes only positions against this counterparty into account. If two counterparties set different gross limits against each other, an applied gross limit will be a smaller one. All trading operations will be checked against the applied gross limit. We suggest using it if the limit is non-collateralized. The gross limit will regulate the maximum open position.

Gross Limit + Margin Requirement

With margin requirement enabled the system will prevent future trades if one of the limits is breached. The limit is using an index called "Equity". Equity is a sum of all positions against the counterparty. In order to control the taker’s equity, a maker is able to set up margin requirements. Margin requirements are set in % from the maker’s gross limit.

Upon the setup you are presented with the following screen:

How to set up Gross Limit + Margin Requirement:

FieldDescriptionAction

Margin Requirement

Activation of the second layer of risk management. Will account for equity the taker has with you and act accordingly

Tick the box in order to activate the RM

Maintenance

% at which you reserve the right to liquidate the open positions

Input the smallest value

Restricted Trading

% at which the taker is unable to perform any trades that decrease equity

Input the value at which you wish to restrict trading

Initial Margin

% the collateral that the taker must send to the maker to start trading. Keep in mind that the required % will always remain with you. You will not be able to send a transaction that decreases the % of the initial equity

Input the value of your required collateral

Disabling of trading

You may disable trading with a counterparty by unticking the box. In this update, the feature halts the trading and still permits settlements. Feature redesign will be convenient if you prefer to stop trading while settling, trade with your counterparty for special occasions (e.g. trading during banking hours), or if you wish to halt trading and still charge the overnight rate.

API Changes

Set a global limit for Maker and Taker api/setLimit:

api/setLimit
access level: allow limits management

{
    "currency": "EUR",
    "grossLimit": 15000000000000
}

Get global limit (for Maker and Taker) api/limits

access level: read only

Response:
[
    0: currencyName (string)
    1: grossLimit (Efx::Size)
    2: grossLimitUtilization (Efx::Size)
]

Get global limit (for Maker and Taker) through WS. ‘G’ feed

access level: read only

limit = [
    0: currencyName (string)
    1: grossLimit (Efx::Size)
    2: grossLimitUtilization (Efx::Size)
]

// snapshot
['G', 0, 'S', limit]

// limit modified
['G', 0, 'M', limit]

// failed to subscribe
['G', 0, 'Z', 2]

// unsubscribed
['G', 0, 'U', 0]

Set counterparty limit (for Market Makers) api/setCLimit:

api/setCLimit
access level: allow limits management

{
    "counterpartyId": 4,
    "currency": "EUR",
    "grossLimit": 15000000000000,
    "maintenanceMargin": 100000,
    "restrictedTrading": 150000,
    "initialMargin": 200000,
    "takerMarkup": 100
}

Set counterparty limit (for Takers) api/setCLimit

api/setCLimit
access level: allow limits management

{
    "counterpartyId": 4,
    "currency": "EUR",
    "grossLimit": 15000000000000
}

Delete counterparty limit (for Maker and Taker) api/delCLimit

api/delCLimit
access level: allow limits management

{
"counterpartyId": 4
}

Get counterparty limits (for Maker and Taker) api/climits

api/climits
access level: read only

Response:
[
    0: counterpartyId (Efx::ClientId)
    1: currencyName (string)
    2: grossLimit (Efx::Size)
    3: mutualLimitCurrencyName (string)
    4: mutualGrossLimit (Efx::Size)
    5: grossLimitUtilization (Efx::Size)
    6: maintenanceMargin (Efx::Size)
    7: restrictedTrading (Efx::Size)
    8: initialMargin (Efx::Size)
    9: equity (Efx::Size) // In maker’s gross limit currency or USD if not set
    10: takerMarkup (int32) // Always 0 for Taker
    11: trading disabled (int16) // tradingDisabled & 1 = disable by client, tradingDisabled & 2 = disabled by counterparty
]	

Receive counterparty limit updates -- ‘L’ feed (for Maker and Taker)

access level: read only

limit = [
    0: counterpartyId (Efx::ClientId)
    1: currencyName (string)
    2: grossLimit (Efx::Size
    3: mutualLimitCurrencyName (string)
    4: mutualGrossLimit (Efx::Size)
    5: grossLimitUtilization (Efx::Size)
    6: maintenanceMargin (Efx::Size)
    7: restrictedTrading (Efx::Size)
    8: initialMargin (Efx::Size)
    9: equity (Efx::Size) // In maker’s gross limit currency or USD if not set
    10: takerMarkup (int32) // always 0 for Taker
    11: trading disabled (int16) // tradingDisabled & 1 = disable by client, tradingDisabled & 2 = disabled by counterparty
]	

// snapshot
['L', 0, 'S', array of limit]

// limit added
['L', 0, '+', limit]

// limit modified
['L', 0, 'M', limit]

// limit removed
['L', 0, '-', limit]

// failed to subscribe
['L', 0, 'Z', 2]

// unsubscribed
['L', 0, 'U', 0]

Enable trading against counterparty api/enableTrading

api/enableTrading
access level: allow limits management

{
"counterpartyId": 4
}

Disable trading against counterparty api/disableTrading

access level: allow limits management

{
"counterpartyId": 4
}

‘M’ feed and api/mlimits request were deleted

Last updated