Mark price
Parcl V4 uses multiple price references for different purposes. The price shown in the UI ("mark price") may not match the price used for liquidation checks. The price used for funding rate calculation may differ from both. This separation prevents orderbook manipulation from triggering forced liquidations or distorting funding.
The exact routing depends on asset class because the threats and tradeoffs are different for daily-cadence real estate indices vs. continuously-traded markets.
Price references
| Name | Definition | Always available? |
|---|---|---|
| Oracle price | Latest signed price from the external oracle feed | When fresh; may go Stale during venue closures |
| Impact mid | Depth-weighted VWAP midpoint of the orderbook | When the book has sufficient depth |
| Last trade | Most recent trade price on this market | When recent trades exist |
| Median mark | median(oracle, impact mid, last trade) โ robust to one bad source | Whenever any two of the three are valid |
Mark price by asset class
| Asset class | Mark price method | Why |
|---|---|---|
| Real estate | Impact mid | Daily oracle has no intraday signal; orderbook is the only intraday reference |
| Continuous markets | Median mark | Median is robust to single-source failure (stale oracle, manipulated book, weird trade) |
Why the median for continuous markets
The median property requires two of three sources to be wrong before an attacker can push it. Concrete examples:
Normal trading. Oracle $102.30, impact mid $102.32, last trade $102.31 โ median $102.31. Tracks oracle, which tracks the real market.
Manipulation attempt. Attacker pushes orderbook to skew impact mid to $115. Oracle $102.30, impact mid $115, last trade $102.30 โ median $102.30. Manipulation rejected.
Stale oracle. Oracle frozen at $102.20 (external feed stopped publishing), impact mid $103.05 (orderbook drifted), last trade $103.10 (recent fills moved). Median $103.05. It tracks reality and ignores the stale oracle. Liquidations and stops still fire correctly.
If the external feed stalls, the two orderbook-derived inputs remain current, so the median keeps tracking the market. Triggers and liquidations on continuous markets stay enforceable through the outage. That feed is outside our control, so this fallback is what holds the market together without depending on the source.
Why real estate is different
Real estate uses the impact mid for display, unrealized PnL, and margin, and the Parcl price feed for triggers and liquidations.
The median is not used on real estate. It combines the feed, the impact mid, and the last trade, but on real estate the last trade adds little. Real estate is slow-moving: markets can go days without a trade, as observed on Parcl V3. The last trade is therefore often stale, and a stale last trade falls back to the impact mid. A fresh last trade is itself a book price. Either way the third input reduces to the book, which leaves the median resting on the feed and the book. With the feed on a daily cadence, the median tracks the book, the same value as the impact mid. We use the impact mid directly rather than a median that reduces to it.
Triggers and liquidations use the price feed rather than the impact mid. The feed is exogenous, and order flow cannot move it. Order flow can move the impact mid on a thin book. Triggers and liquidations execute automatically at the referenced price, so they use the reference that order flow cannot move. They fire only on a feed update. The tradeoff is that the displayed mark and the trigger reference differ. A real estate stop fires on the daily feed update, not on intraday book movement.
Impact mid
The impact mid is a depth-weighted midpoint that resists manipulation by small orders. Instead of taking the simple midpoint of best bid and best ask, it walks each side of the orderbook. It accumulates notional value up to a configured threshold and computes the volume-weighted average price (VWAP) for each side. The impact mid is the midpoint of the two VWAPs.
Depth threshold: $25,000 on all markets.
A single dust order at the top of book cannot move the impact mid. Moving it by 1% requires roughly $25,000 of resting depth on the pushed side.
Fallback behavior:- If either side of the book has insufficient depth to reach the threshold, impact mid falls back to the oracle price.
- If the depth threshold is 0, impact mid degrades to the simple midpoint (best bid + best ask) / 2.
Which price is used where
For how the liquidation reference price plugs into the margin inequality, see Liquidations.
Real estate markets
| Purpose | Price reference | Why |
|---|---|---|
| Displayed mark price | Impact mid | Only intraday signal on daily-oracle markets |
| Unrealized PnL | Impact mid | Matches displayed mark |
| Margin check (initial/maintenance) | Impact mid | |
| Liquidation check | Oracle price | Cannot be moved by order flow |
| TP/SL trigger evaluation | Oracle price | Prevents stop-hunting via orderbook manipulation |
| Funding rate | Impact mid | Funding cares about book imbalance |
TP/SL triggers and liquidations fire on the oracle price, not the displayed mark. Your stop-loss fires only when the underlying real estate index actually moves (once daily at the oracle update), not when someone moves the orderbook intraday. On thin real estate books, orderbook-based triggers are vulnerable to manipulation.
Continuous markets
| Purpose | Price reference | Why |
|---|---|---|
| Displayed mark price | Median mark | Robust real-time reference |
| Unrealized PnL | Median mark | Matches displayed mark |
| Margin check (initial/maintenance) | Median mark | |
| Liquidation check | Median mark | Stays enforceable 24/7 (falls back to orderbook when oracle stale) |
| TP/SL trigger evaluation | Median mark | Matches what traders see; resistant to single-source manipulation |
| Funding rate | Impact mid | Funding cares about book imbalance |
TP/SL triggers and liquidations on continuous markets fire when the median mark crosses the threshold, not when any single source crosses. Your stop fires when our chain's median price hits your trigger. The median closely tracks the actual market price, even when the oracle goes stale.
Funding rate premium
The funding rate uses the impact mid as its input regardless of asset class:
premium = (impact_mid - oracle_price) / oracle_priceThe funding rate responds to real-time orderbook imbalance regardless of what the oracle says. This is the same on every asset class because funding's job is to anchor the book to the index. Its job is not to anchor the book to the reference that triggers and liquidations fire on.