Mark price calculation
What is mark price?
The mark price is a fair price measure for the futures market, used for unrealized PnL calculations, funding rate settlements, and liquidation triggers. It is one of the most critical price indicators in futures trading, serving as the key driver of market operations. Therefore, it must not be overly sensitive or sluggish in reflecting market changes.
Mark price calculation
Perpetual futures
For perpetual futures, the mark price is determined by calculating three raw price values and taking their median as the final mark price. This mark price updates every second.
1. The three raw price values are:
a. Price 1: Last price on the Bitget futures market
b. Price 2: Calculated based on the index price and funding rate
c. Price 3: Calculated based on the index price and the futures order book basis
2. Price 2 calculation:
a. Price 2 = index price × (1 + latest funding rate × (time until next settlement ÷ funding rate settlement interval)). The funding rate settlement interval and the time until the next settlement are measured in minutes, with the specific length of time determined based on the funding rate settlement interval of the futures. For example, if the funding rate is settled every 8 hours, the funding rate settlement interval = 60 × 8 = 480 minutes.
b. Example:
i. Current index price of BTCUSDT perpetual futures: 91,500
ii. The funding rate settlement interval for BTCUSDT perpetual futures: 8 hours = 480 minutes
iii. The current time is 2:00 PM, meaning 2 hours are left until the next settlement (at 4:00 PM). So, time until the next settlement = 2 × 60 = 120 minutes.
iv. Latest funding rate = 0.01%
v. Price 2 = 91,500 × (1 + 0.01% × 120 ÷ 480) = 91,502.2875
3. Price 3 calculation:
a. Price 3 = index price + MA (5-minute order book basis)
b. Step 1: Calculate the order book basis. Order book basis = (Bid1 + Ask1) ÷ 2 − index price. The order book basis is calculated every 5 seconds (i.e., at 0s, 5s, 10s, ..., 55s of each minute). The Bid1, Ask1, and index prices are captured simultaneously.
c. Step 2: Calculate the arithmetic average of the 5-minute order book basis. MA (5-minute order book basis) = (Basis1 + Basis2 + ... + Basis60) ÷ 60. The order book basis is updated every 5 seconds. Mathematically speaking, each basis is weighted equally at 1/60.
d. Step 3: Price 3 = index price + MA (5-minute order book basis).
4. Mark price = median (Price 1, Price 2, Price 3)
5. Special cases
a. When markets experience sudden price swings, the mark price may lag behind actual market movements. This discrepancy can cause differences between unrealized PnL and realized PnL upon closing a position. This behavior is intentional—it prevents users from being liquidated due to short-lived price spikes or manipulative market movements.
b. In such a case, Bitget may adjust the MA calculation window for Price 3 or switch the mark price calculation to Price 1 in response to highly volatile market conditions.
Delivery futures
For delivery futures, the mark price calculation differs depending on the time remaining until settlement:
Standard period (more than 30 minutes until delivery)
Mark price = index price + MA (5-minute order book basis), calculated in the same way as Price 3 for the perpetual futures above.
Since the delivery time is often far in the future, the mark price may significantly deviate from the index price due to time value.
Less than 30 minutes until delivery
Mark price = MA (30-minute index price), calculated every second. A total of 1800 data points (30 minutes × 60 seconds) are used by the delivery time. If fewer than 30 minutes remain, the moving average is based on the available data. For example, if the delivery time is 16:00:00 and the current time is 15:45:00 (15 minutes remaining), then the mark price = MA (15-minute index price).