Equity Protection Process

Last updated: 17. 3. 2026

Your account can never go negative - here's how

On Kraken Derivatives, your account balance can never go below zero. This is thanks to our Equity Protection Process (EPP), an automatic safety system that manages risk on all open positions to ensure full market integrity.

Think of the EPP as your safety net. If a trade moves sharply against you and your account value drops too low, the EPP kicks in automatically to close out your position before you can owe more than you have.

The basics: Initial Margin and Maintenance Margin

  • Initial Margin - the amount required to open a position.
  • Maintenance Margin - the minimium account value needed to keep a position open. If your account value (equity) falls below this level, the EPP activates.

EPP by product type:

The steps the EPP follows depend on which type of contract you're trading. Select your product below.

Expand the titles below for a detailed walkthrough of each product specific EPP:

Coin-M contracts use a 3-step process:

  1. 1

    Full Liquidation

  2. 2

    Assignment

  3. 3

    Unwind

Each step only activates if the previous one wasn't enough to fully close the position.

Step 1 - Liquidation

When your equity drops below the Maintenance Margin, Kraken automatically attempts to close your position by placing an Immediate-or-Cancel (IOC) order on the market. This order has a limit price set so that if it fills, your account will not go negative.

Important: If your position closes at a better price than the absolute worst-case (bankruptcy) price, you keep any remaining margin. Many other exchanges take your entire maintenance margin regardless, we don't.

Example: You're long 1,000 BTC-USD contracts, entered at $8,000. Your maintenance margin is 0.00125 BTC. When the mark price hits $7,481, your position enters liquidation. Kraken submits an IOC sell order at $7,407 — the price at which your account value would be just above zero. If the order fills at any price better than $7,407, you keep whatever is left over.

Step 2 - Assignment

Sometimes a liquidation order can't be fully filled — for example, if there aren't enough buyers in the market at that moment. When that happens, the remaining contracts go through assignment: Kraken routes them to registered liquidity providers who have agreed to take on positions in these situations.

The assignment price is the zero-equity price, the level at which your account would be exactly at zero, so your counterparty on the original trade can keep their position.

Example: A client has two open long positions using the same margin account:

  • LONG 1,760,000 Contracts on PI_BTCUSD

  • LONG 300,000 Contracts on FI_BTCUSD_200228

When liquidation kicks in:

Position

Total Size

Liquidated via Market

Assigned to Liquidity Providers

PI_BTCUSD

1,760,000

1,007,379

752,621

FI_BTCUSD_200228

300,000

300,000

0

The FI contract sold entirely on the open market. The PI contract could only partially sell — so the remaining 752,621 contracts were assigned to liquidity providers.

You'll receive an email notification if your position is assigned. Liquidity providers are also notified immediately via WebSocket. The liquidity provider immediately receives the notification over WebSocket feed alerting them to the Assignment. The message takes this format:

 

bash

Bash

{ "feed": "fills", 
"username": "[email protected]", 
"fills": [ { "instrument": "PI_XBTUSD", 
"time": 1581026151, 
"price": 9292.5, 
"seq": 103, 
"buy": true, 
"order_id": "87755b99-bfb7-4f51-a72b-70f542f793a5", 
"fill_id": "89f0f4f9-66b5-45eb-ba3f-6eeb2da5cadd", 
"fill_type": "assignee", 
"qty": 184317 } ]}

REST API response format:

bash

Bash

{ "result": "success", 
"fills": [ { 
"fill_id": "89f0f4f9-66b5-45eb-ba3f-6eeb2da5cadd", 
"symbol": "pi_xbtusd", 
"side": "buy", 
"order_id": "87755b99-bfb7-4f51-a72b-70f542f793a5", 
"size": 184317, 
"price": 9292.5, 
"fillTime": "2020-02-06T21:55:51.000Z", 
"fillType": "assignee" } ... ]}

To detect an assignment programmatically, look for fill_type: "assignee" (WebSocket) or fillType: "assignee" (REST).

Note: You can manage your assignment preferences in the Assignment Program section of the platform. You will never receive an assignment larger than your available margin can handle.

 

Step 3 - Unwind

If no liquidity providers are available to take on the remaining contracts, those contracts are unwound. This means:

  • The contracts between you and your counterparties are cancelled.
  • Any remaining value in the margin account is transferred to your counterparties as compensation.
  • An unwind in one margin account does not affect any of your other margin accounts.

The unwind mechanism is designed to be fair. Unwind thresholds are set to cover approximately a 1-hour, 99th-percentile adverse price move — meaning the compensation you receive should be enough to re-enter a similar trade with no loss (and potentially a small profit).

Example: A client holds long positions in:

  • 2,920,000 contracts on PI_ETHUSD
  • 400,000 contracts on FI_ETHUSD_200625

After lliquidation and assignment:

Position

Total Size

Amount Liquidated

Amount Assigned

Amount Unwound

PI_ETHUSD

2,920,000

2,007,379

751,605

161,016

FI_ETHUSD_210625

400,000

0

0

0

The remaining 161,016 contracts that couldn't be liquidated or assigned were unwound.

Counterparties whose positions are unwound receive an email notification and an immediate WebSocket alert.

WebSocket notification format:

bash

Bash

{
  "feed": "fills",
  "username": "[email protected]",
  "fills": [
    {
      "instrument": "PI_ETHUSD",
      "time": 1623344903068,
      "price": 1647.0,
      "seq": 1,
      "buy": false,
      "qty": 10000.0,
      "order_id": "9bae454b-ec93-43f8-b31c-33d3881fe7ae",
      "fill_id": "1298e9ed-4284-43b9-ab9e-0d93591efb36",
      "fill_type": "unwindCounterparty",
      "fee_paid": -0.00182149362,
      "fee_currency": "ETH"
    }
  ]
}

REST API response format:

bash

Bash

{
  "result": "success",
  "fills": [
    {
      "fill_id": "1298e9ed-4284-43b9-ab9e-0d93591efb36",
      "symbol": "pi_ethusd",
      "side": "sell",
      "order_id": "9bae454b-ec93-43f8-b31c-33d3881fe7ae",
      "size": 10000,
      "price": 1647,
      "fillTime": "2021-06-10T17:08:23.068Z",
      "fillType": "unwindCounterparty"
    }
  ]
}

To detect an unwind programmatically, look for fill_type: "unwindCounterparty" (WebSocket) or fillType: "unwindCounterparty" (REST).

How are unwind counterparties chosen?

When contracts are unwound, the system selects counterparties on the opposite side (e.g., short positions when a long is being unwound), ranked from highest to lowest priority. The ranking is calculated separately for long and short positions using:

  • Position Value = Size / Price (inverse contracts)
  • Return on Equity (RoE) = PnL / Initial Margin
  • Effective Leverage = Position Value / Portfolio Value

Rank score:

  • If RoE is negative: RoE / Effective Leverage
  • If RoE is positive: RoE × Effective Leverage

Positions with the highest rank score are targeted first.

  • Position Value = [absolute(Size/Price)] (inverse)

  • Return on Equity = [PnL/IM]

  • Effective Leverage = [Position Value/Portfolio Value]

Rank (1,2,3...)-- Separate for LONG and SHORT:

  • if negative: [RoE/Effective Leverage]

  • if positive: [RoE*Effective Leverage]

E.g. When a long position is unwound, it targets the positions of short by highest rank (1 first, 2 second, 3 third, etc.) until fully unwound.

The Multi-M EPP follows five main steps:

  1. 1

    Partial Liquidation

  2. 2

    Full Liquidation

  3. 3

    Assignment

  4. 4

    Covered Liquidation

  5. 5

    Unwind

Step 1 - Partial Liquidation

If your Margin Account Equity is below the maintenance margin threshold but above the Liquidation Margin, then before triggering a full liquidation the system attempts to restore your Margin Account Equity by partially closing your position in 10% increments. This continues until either your equity is restored above Maintenance Margin or the position is fully closed.

A Partial Liquidation Fee is charged on each filled iteration where the fill price is more favorable than the Zero Equity Price. The fee is the difference between the fill price (capped at Mark Price) and the Zero Equity Price, multiplied by the quantity filled.

Example: You're long 10 PF_BTCUSD contracts at a Mark Price of $20,000. Margin Account Equity is $1,900 against a Maintenance Margin requirement of $2,000 but above the Liquidation Margin.

  • Iteration 1: 1 contract is closed at $19,820. Fee charged: $10 (excess above Zero Equity Price of $19,810). Equity is now $1,710

  • Iteration 2: 1 contract is closed at $19,850. Fee charged: $40. Equity is now $1,520

  • Iteration 3: 1 contract closes at exactly the Zero Equity Price. No fee charged. Equity is now $1,330

  • Iteration 4: 1 contract closes at $20,100, above Mark Price. Fee is capped at the Mark Price, giving an excess of $190 above the Zero Equity Price. Fee charged: $190. The remaining $100 above Mark Price is retained by the trader. Equity is now $1,240

  • Iteration 5: Equity of $1,240 exceeds Maintenance Margin of $1,200. Partial liquidation process is completed.

In total, 4 contracts were closed for $79,580 in notional value, with $240 in fees charged.

Step 2 - Full Liquidation

Same core concept as a Coin-M liquidation, with one key difference: a Full Liquidation Fee is applied when this step is triggered. The fee equals half of the minimum Maintenance Margin percentage for the contract. (ex. for PF_XBTUSD, the liquidation fee is 0.5%, half of the 1% minimum MM).

Example: You're long 10 PF_XBTUSD contracts at an entry price of $20,000. Total position value: $200,000. Your maintenance margin is $2,000.

Liquidation triggers when the mark price hits $19,200

A liquidation fee of $1,000 (0.5% × $200,000) is debited immediately

An IOC sell order is submitted around $19,100,  the price where your margin equity would be zero.

Step 3 - Assignment

Same process as Coin-M, with one difference in pricing: in Multi-M, if the Derivatives Liquidity Pool has sufficient funds, the assignment price will be set within 0.75%–2.5% from the mark price (rather than strictly at zero-equity). If the pool doesn't have enough funds, it defaults to the zero-equity price.

Example: A client holds:

  • 10 contracts on PF_XBTUSD
  • 3 contracts on FF_XBTUSD_230728

Position

Size

Amount Liquidated

Amount Assigned

PF_XBTUSD

10

8

2

FF_XBTUSD_230728

3

3

0

The WebSocket and REST response formats are identical to Coin-M, look for fill_type: "assignee" / fillType: "assignee".

Note: You can manage your assignment preferences in the Assignment Program section. You will never receive an assignment your available margin cannot handle.

Step 4 - Covered Liquidation

This step is unique to Multi-M. If assignment fails to place all remaining contracts, and the Derivatives Liquidity Pool has enough funds to cover the shortfall, and the current market spread is less than 4%, Kraken will attempt one more liquidation using the pool's funds.

This works by submitting another IOC order with its limit price set 5% away from the best bid/ask price. If it fills, the pool covers any additional losses by crediting the margin account, ensuring your balance doesn't go negative.

If the pool doesn't have sufficient funds, the process moves on to the final step: Unwind.

Example: A client holds:

  • 50 contracts on PF_ETHUSD
  • 15 contracts on FF_ETHUSD_230728

Position

Size

Amount
Liquidated

Amount
Assigned

Amount Liquidated (covered)

Amount
Unwound

PF_ETHUSD

50

30

15

5

0

FF_ETHUSD_230728

15

15

0

0

0

Step 5 - Unwind

If, for whatever reason, the covered liquidation is unable to be executed, then the remaining contracts undergo an "unwind". This means that the contracts between you and your counterparties end and that the remaining portfolio value of the margin account is transferred to your counterparties. An unwind of one margin wallet will not affect any other margin wallets.

Example Unwind

Let's assume that there is a user whose current positions are:

- LONG 50 Contracts on PF_ETHUSD

- LONG 15 Contracts on FF_ETHUSD_230728

Both these positions are cross margined using the Multi-M margin wallet, which measures the risk in realtime, valuing the collateral vs position value, to determine whether to liquidate.

Once the Multi-M wallet margin equity is below the maintenance margin requirement for both positions, liquidation occurs and the system sells those positions into the orderbook at the 0-equity imputed price for each contract.

In this case, the user's liquidation plays out as follows:

Position

Size

Amount
Liquidated

Amount
Assigned

Amount Covered Liquidation

Amount
Unwound

PF_ETHUSD

50

30

15

3

2

FF_ETHUSD_230728

15

15

0

0

0

If covered liquidation also fails, the remaining contracts are unwound, same as in Coin-M. Contracts are cancelled, remaining portfolio value is transferred to counterparties, and the unwind does not affect any other margin wallets.

The WebSocket and REST formats are identical to Coin-M, look for fill_type: "unwindCounterparty" / fillType: "unwindCounterparty".

How are unwind counterparties chosen?

Same ranking logic as Coin-M, but Position Value is calculated differently for Multi-M (USD-margined):

  • Position Value = Size × Price
  • Return on Equity (RoE) = PnL / Initial Margin
  • Effective Leverage = Position Value / Portfolio Value

Rank score:

  • If RoE is negative: RoE / Effective Leverage
  • If RoE is positive: RoE × Effective Leverage

Potřebujete další pomoc?