Mark Price vs Index Price vs Last Price in Crypto Perpetuals
Editorial responsibility: Oliver Sinz · Last verified:
A perpetual futures screen usually shows three prices for the same contract, and they rarely agree to the dollar. The index price estimates where the underlying asset trades on spot markets. The mark price is the exchange's own valuation and risk reference, built from the index and, on the major venues reviewed here, from the contract's own order book. The last traded price is the most recent fill on that venue's book. Each answers a different question, and none of them promises the price at which your next order will fill. Reading the wrong one can make a position look richer, safer or further from its stop than it really is.
Three prices, three jobs
| Index price | Mark price | Last traded price | |
|---|---|---|---|
| What it measures | Composite spot value of the underlying | The venue's estimate of the contract's value for risk purposes | The most recent trade in this contract on this venue |
| Typical inputs | Spot prices from several venues, weighted and filtered | Index plus a premium or basis term; often a median that includes the contract's own prices | One matched trade |
| Main uses | Anchor for the mark price and funding; sometimes a selectable trigger | Unrealized P&L, margin ratio, liquidation checks; often a selectable trigger | Charts, last-price triggers, a record of recent trading |
| Updates when | Constituent prices change, after filtering | Inputs change, on the venue's schedule | A trade prints |
| Key limitations | Only as good as its constituents; rules differ by venue | A model output, not a quote; can lag fast moves | Local to one order book; can spike on thin liquidity |
| Executable? | No | No | Only for the trade that already happened |
Two cautions apply throughout. When exchange documentation calls the mark a "fair" or "true" value, that describes a design goal, not a guarantee. And the three prices are not independent: as the next sections show, two of the largest venues feed the last traded price directly into their mark-price formula.
How exchanges build an index price
An index tries to answer "what is this asset worth on spot right now?" without trusting any single venue. The ingredients are a list of constituent markets, weights, and rules for discarding or capping bad data. The specifics differ, and venues reserve the right to change them without notice.
Binance's USDⓈ-M price index is a weighted average of spot prices from a list of venues, and Binance states it may include its own futures last price as a constituent. A source more than 3% from the median of all sources is capped at that boundary (1% for designated symbols such as BTCUSDT and ETHUSDT), and a venue whose data has not updated for five minutes receives zero weight.
Bybit's index uses the top six spot pairs by volume, weighted by 24-hour volume and reweighted hourly. A component more than 5% from the median is excluded and its weight gradually redistributed (the threshold is 1% for BTC and ETH), and a pair with no trades for more than 15 minutes is dropped until trading resumes. When a constituent's trading is thin or its last price looks abnormal, Bybit derives that constituent's price from the top of its order book instead.
The goal is the same, the numbers are not: a cap versus an exclusion, five minutes versus fifteen, different weighting schemes. An index is harder to push around than one venue's tape, but it is not manipulation-proof. For a thinly traded token with a handful of shallow constituents, moving several of them moves the index.
How a mark price is constructed
Current documentation shows at least three families of design.
Median of three (Binance, Bybit). Binance and Bybit both set the perpetual mark price to the median of:
- Price 1 = Index × (1 + last funding rate × time until next funding ÷ funding interval); Bybit's published formula shows a fixed divisor of 8 rather than the contract's interval
- Price 2 = Index + a moving average of (order-book mid − index), over 30 seconds on Binance's crypto USDⓈ-M perpetuals (60 seconds for its TradFi perpetuals) and 2.5 minutes on Bybit
- the contract's last traded price
The median picks whichever value sits in the middle, so one outlier, such as a single wild trade, cannot set the mark on its own. But the last price still has a vote. If the order book stays dislocated long enough for the moving-average basis to catch up, the mark follows it.
Index plus moving-average basis (OKX). OKX defines the mark as the index plus a moving average of (contract mid − index), without a median step.
Oracle-anchored median (Hyperliquid). Hyperliquid's mark is the median of three inputs: its oracle price plus a 150-second exponential moving average of (mid − oracle); the median of its own best bid, best ask and last trade; and a weighted median of perpetual mid prices on several centralized exchanges. The oracle itself, a weighted median of spot prices from several major exchanges, drives funding.
Where funding fits. Price 1 above is a funding basis: it carries the premium implied by the last funding rate and lets it decay to zero by the next funding timestamp. That links the mark to funding without making them the same thing. Funding is a cash transfer between longs and shorts intended to pull the perpetual toward the index over time. The mark is a reference price, not a payment: on venues such as Bybit it sets the position value on which funding is charged, and it decides when liquidation starts, but it transfers no cash by itself. Funding arithmetic belongs to a separate guide.
Last traded price: real, but local
The last traded price is the only one of the three that records an actual transaction, which is both its strength and its weakness. It changes only when a trade prints, so in a quiet market it can sit stale while quotes move. A single market order sweeping a shallow book can print well away from the index. Either way, a print is a historical fact about one trade of one size; it says nothing about how much liquidity remains at that level.
Valuation is not execution: Example 1
All figures are hypothetical. The contract is a linear, USDT-margined BTC perpetual, and the mark uses the median-of-three structure above with illustrative parameters, not any venue's live values. On inverse, coin-margined contracts, P&L uses reciprocal prices and settles in the coin, so the same price gap produces different numbers; OKX's page lists both formula sets.
- Position: long +0.5 BTC at an entry of 101,200 USDT (entry notional 50,600 USDT)
- Collateral: 5,000 USDT, isolated
- Maintenance requirement (simplified): 0.5% × quantity × mark
- Index: 100,000. Last funding rate +0.01%, four of eight hours remaining, so Price 1 = 100,000 × (1 + 0.0001 × 4/8) = 100,005
- Moving-average basis: +35, still reflecting the seconds before the sweep described next, so Price 2 = 100,035
- Last traded price: a large market sell has just swept the book, printing 99,400. The book has not refilled: bids sit at 0.20 BTC @ 99,380, 0.15 @ 99,350 and 0.40 @ 99,300
- Mark = median(100,005; 100,035; 99,400) = 100,005
| Measure | Calculation | USDT |
|---|---|---|
| Unrealized P&L at mark | 0.5 × (100,005 − 101,200) | −597.50 |
| Unrealized P&L if last were (wrongly) used | 0.5 × (99,400 − 101,200) | −900.00 |
| Valuation gap | −597.50 − (−900.00) | 302.50 |
| Equity at mark | 5,000 − 597.50 | 4,402.50 |
| Maintenance requirement | 0.005 × 0.5 × 100,005 | 250.01 |
| Margin buffer | 4,402.50 − 250.01 | 4,152.49 |
| Market exit, average fill | (0.20 × 99,380 + 0.15 × 99,350 + 0.15 × 99,300) ÷ 0.5 | 99,347.00 |
| Realized P&L before fees | 0.5 × (99,347 − 101,200) | −926.50 |
| Taker fee at an assumed 0.05% | 0.0005 × 49,673.50 | 24.84 |
| Realized P&L after fee | −926.50 − 24.84 | −951.34 |
Under this model, the venue reports a 597.50 loss and a buffer of more than 4,000 USDT, because the median ignored the sweep. Substituting the last price would overstate the loss by 302.50 relative to the venue's convention and shrink the apparent buffer to 3,851.50 (4,100.00 equity minus a 248.50 requirement). Yet an immediate market exit would realize −951.34, worse than both figures, because selling 0.5 BTC walked three price levels below the last print and paid a fee. The mark told you what the risk engine believes, the last price told you what one trade did, and only the order book told you what you could get. Funding accruals are ignored here.
The 605 USDT per BTC gap between mark and last is not free money either. Nobody is bidding at the mark, and buying the depressed perpetual is a bet that the book recovers, with its own execution costs and risks.
Margin and liquidation run on the mark: Example 2
Venues test maintenance requirements against a specified reference price, usually the mark. Binance states that liquidation is triggered when the mark price reaches a position's liquidation price, and that in fast markets the mark can jump past the precomputed level. Real requirements are tiered and include maintenance amounts (Binance's formula is notional × rate − maintenance amount), and liquidation itself is a multi-step process covered in a separate guide. This example isolates one question: which price is being tested?
Assumptions: long +0.5 BTC at 100,000 with 2,000 USDT of isolated collateral (25× notional leverage). The simplified rule is that the position becomes eligible for liquidation when equity at mark falls below 0.5% × 0.5 × mark. Funding and fees are ignored. Solving 2,000 + 0.5 × (M − 100,000) = 0.0025 × M gives a modeled mark threshold of about 96,482.41.
Spot sells off across venues. The index falls to 96,400; with a +0.01% last funding rate and two of eight hours left, Price 1 = 96,402.41. The moving-average basis is +50, so Price 2 = 96,450. The perpetual's last trade printed at 96,700 a few seconds earlier; quotes have moved lower since, but no new trade has occurred. Mark = median(96,402.41; 96,450; 96,700) = 96,450.
| Using mark (96,450) | Using last (96,700) | |
|---|---|---|
| Unrealized P&L | −1,775.00 | −1,650.00 |
| Equity | 225.00 | 350.00 |
| Maintenance requirement | 241.13 | 241.75 |
| Equity minus requirement | −16.13 | +108.25 |
Under the modeled rule, the position is eligible for liquidation because equity measured at mark is below the requirement. A trader watching a last-price chart sees 96,700, about 218 USDT above the threshold, while the mark is about 32 USDT below it. "Price never reached my liquidation level" can be true of the chart and irrelevant to the risk engine. Eligibility is also not an exit price: the actual liquidation executes through the venue's own process and can close at a worse level.
Stop orders, trigger versus fill: Example 3
A conditional order has two stages. The trigger fires when a reference price crosses a level; execution then sends a market or limit order to the book. The reference is often configurable, and defaults differ. On Binance, a stop-limit order defaults to last price and a stop-market order to mark price. Bybit's futures TP/SL defaults to last traded price, with index or mark selectable. Kraken's futures API accepts mark, index or last as the trigger signal, and Hyperliquid triggers TP/SL off its mark. Bybit also offers an optional price-protection setting that blocks a last-price TP/SL from triggering while last and mark diverge beyond a per-pair threshold; the order stays pending and may never execute.
Setup: two traders each hold long 0.5 BTC with a stop-market sell at 97,000. Trader A's stop triggers on last price (Order A), Trader B's on mark price (Order B). Taker fee assumed at 0.05%.
- The wick. A sweep prints a last price of 96,950 while the index (97,600) and mark (about 97,605) barely move. Order A triggers, and its market order fills 0.10 BTC @ 96,940, 0.15 @ 96,900 and 0.25 @ 96,820: an average of 96,868, proceeds of 48,434 USDT, 132 USDT per BTC below the trigger (66 USDT on the position), plus a 24.22 USDT fee. Order B does not trigger.
- Seconds later. The book refills; last trades at 97,460 and the mark is 97,450. Trader B's position is still open, and its mark value exceeds Order A's exit proceeds by 291 USDT before fees, 0.5 × (97,450 − 96,868). That difference is unrealized and can still move either way.
- A genuine decline. Later, spot falls broadly and the mark reaches 96,990, triggering Order B. The perpetual is trading at a discount, and the market sell is assumed to average 96,740: 260 USDT per BTC below the trigger (130 USDT on the position), plus a 24.19 USDT fee.
A last-price trigger reacts to the local tape, wicks included. A mark trigger ignores local wicks but can fire when the local book is already well past the trigger level. In both cases, the trigger is not the fill: a stop-market takes whatever the book offers, subject to venue price-protection limits that can leave an order, or part of it, unfilled (Bybit, for example, converts market orders into immediate-or-cancel limit orders), and a stop-limit caps the price but may not fill at all. Because liquidation typically references the mark, a stop placed near the liquidation level, especially one that triggers on last price, can be overtaken by the liquidation; Binance explicitly advises against setting stop-loss triggers close to the estimated liquidation price.
When reference prices break down
Divergences usually come from one of two directions. In a perpetual-led dislocation, a sweep or a one-sided order flow moves the last price while spot holds, as in Examples 1 and 3. In a spot-led move, the index reprices first and the perpetual's book lags, as in Example 2.
The harder cases are data failures, and the documentation is candid about them:
- Stale or deviating constituents are capped, excluded or set to zero weight, which can leave the index resting on fewer venues during exactly the moments that matter.
- Fallbacks to the local book. Bybit says its mark falls back to the last traded price if index data are abnormal or the moving average cannot be computed, and that in extreme conditions the index itself is computed from the perpetual's own trading and order book. Binance describes a "Last Price Protected" mechanism that temporarily updates the index from the contract's own last price, within limits, when no stable reference is available.
- Trading restrictions. On the same page, Binance reserves the right to place a symbol in reduce-only mode when the mark moves abnormally fast.
The implication is uncomfortable but important: in the conditions where manipulation resistance matters most, the mark may lean more heavily on the very order book it was designed to look past.
What to check on any venue
- Which price drives unrealized P&L and the margin ratio, and what is its current formula?
- What are the index constituents, weights, deviation limits and staleness rules?
- What happens when index data fail?
- What is the default trigger for each order type you use, and is any price protection enabled?
- How far is your stop from your liquidation level, measured in mark terms?
- How much depth sits on the book for your size, rather than at the last print?
The Crypto Perpetuals & Basis Workbench uses hypothetical reference and mark prices in its models. It does not stream live prices, replicate any exchange's mark-price engine or provide executable quotes, so its outputs illustrate mechanics rather than predict a venue's numbers.
The working rule is simple: use the mark to understand how the venue values and polices your position, the index to see what the broader spot market is doing, and the order book, not the last print, to judge what you could actually trade.