Data & Methodology
Where every figure on PerpGuard comes from, how it is calculated, how current it is, and what it cannot tell you.
Data status
- Overall status
- Not available
- Network
- Not available
- Last updated
- Not available
- Latest indexed block
- Not available
- Indexing lag
- Not available
- Historical coverage
- Since Feb 11, 2026: every block from the Exchange's deployment (block 54,773,010)
Data sources
- Type
- Event indexer (HyperSync)
- Network
- Not available
- Data collected
- Every event of the Perpl Exchange proxy: fills, positions, liquidations, funding settlements, deposits and withdrawals, market listings
- Sync status
- Not available
- Last synced
- Not available
- Type
- JSON-RPC
- Network
- Not available
- Data collected
- The chain head (to measure the index's lag), the Exchange's collateral balance, transaction receipts for trade direction, and each market's insurance fund
- Sync status
- Not available
- Last synced
- Not available
- Type
- Public HTTPS API (GET /v1/pub/context)
- Network
- Not available
- Data collected
- Markets as traders see them, mark prices, open interest, funding interval and margin parameters
- Sync status
- Not available
- Last synced
- Not available
- Type
- Contract calls and log scans over the RPC
- Network
- Not available
- Data collected
- The protocol treasury's own deposits and withdrawals (not indexed), used to rebuild the exchange balance, and the reconciliation against the contract's balance
- Sync status
- Not available
- Last synced
- Not available
- Type
- Public HTTPS API
- Network
- Hyperliquid mainnet
- Data collected
- Funding rates and prices, for the cross-venue funding comparison only
- Sync status
- Not available
- Last synced
- Not available
- Type
- Public HTTPS API
- Network
- Binance mainnet
- Data collected
- Funding rates, intervals and prices, for the cross-venue funding comparison only
- Sync status
- Not available
- Last synced
- Not available
Data coverage
- Coverage start
- Block 54,773,010, Feb 11, 2026: the Perpl Exchange's deployment block on Monad mainnet
- Coverage end
- Not available
- Indexed blocks
- Not available
- Total events
- Not available
- Missing events
- Not availableNo live gap check runs. The index is verified offline against the chain logs (`pnpm verify:logs`), not continuously.
- Backfill status
- Not available
Metric methodology
Every metric below is described by the same six things: its name, what it means, how it is calculated, where the data comes from, the window it covers and how often it is refreshed. Each names the code that computes it.
- Time windows
- 24H, 7D and 30D are ROLLING: the last 24 hours, 7 days or 30 days up to now. A figure that can only be summed from whole UTC days (trader P&L, round trips, money in and out, fees) says so on its label: "yesterday + today", "last 7 whole days + today". All runs from the index start, Feb 11, 2026.
- Currency
- Every amount is in AUSD, a dollar stablecoin and the collateral of every Perpl market (6 decimals). "$" on the site means AUSD.
- Refresh frequency
- Not available
- Rounding
- Figures are shortened for display ("1.2M"); hover a figure for its exact amount where one is shown.
Trading metrics
Trading volumeRolling: the last 24 hours, 7 days or 30 days, or All (since Feb 11, 2026)
- Definition
- The notional of every fill in the window, each match counted once.
- Calculation method
- Sum of each fill’s notional (size × fill price, in AUSD). Whole UTC days inside the window come from per-day fill sums, the two partial edges are read fill by fill: the same rows as one scan.
- Data source
- Indexed fills (Trade) from the Perpl Exchange’s events
- Time window
- Rolling: the last 24 hours, 7 days or 30 days, or All (since Feb 11, 2026)
- Refresh frequency
- Not available
Code: packages/shared/src/analytics/pg.ts PostgresAnalytics.protocolMetrics → #windowTotals (WINDOW_TOTALS_SQL, DAY_TOTALS_SQL); windowSplit.ts
Open interestNow: a level, not a window
- Definition
- Open positions on ONE side of the book at the mark: every long lot is matched by a short lot, so one side is the open interest.
- Calculation method
- Per market, open size × mark price from Perpl’s market state, summed across markets. The history chart is the index’s cumulative lots at each day’s close × that day’s close mark.
- Data source
- Perpl API (GET /v1/pub/context); history from the index
- Time window
- Now: a level, not a window
- Refresh frequency
- Not available
Code: packages/shared/src/venues/perpl.ts toOpenInterest, PerplVenue.getOpenInterest; apps/web/src/lib/oiHistory.ts
TradesRolling: the last 24 hours, 7 days or 30 days, or All (since Feb 11, 2026)
- Definition
- The number of fills in the window.
- Calculation method
- A count of indexed fills, with the same whole-day and edge split as volume.
- Data source
- Indexed fills (Trade)
- Time window
- Rolling: the last 24 hours, 7 days or 30 days, or All (since Feb 11, 2026)
- Refresh frequency
- Not available
Code: packages/shared/src/analytics/pg.ts #windowTotals (WINDOW_TOTALS_SQL)
Active tradersRolling: the last 24 hours, 7 days or 30 days, or All (since Feb 11, 2026)
- Definition
- Distinct accounts with at least one fill, as maker or taker. An account trading three markets is one trader.
- Calculation method
- Whole UTC days from the per-account day rows with a fill, the edges from the fills themselves, de-duplicated across both.
- Data source
- Indexed fills (Trade) and per-account days (TraderDay)
- Time window
- Rolling: the last 24 hours, 7 days or 30 days, or All (since Feb 11, 2026)
- Refresh frequency
- Not available
Code: packages/shared/src/analytics/pg.ts ACTIVE_TRADERS_SQL via #windowTotals
Funding ratesModelledRolling: the last 24 hours, 7 days or 30 days, or All (since Feb 11, 2026)
- Definition
- The rate one side pays the other at each settlement. Positive means longs pay shorts. Perpl settles about every 43 minutes.
- Calculation method
- Each settlement’s stored rate ÷ 1,000 = percent per settlement. Tables show the mean per settlement over the window and the latest; the heatmap averages per UTC day (per week at All). APR = the current rate × settlements a year, simple, not compounded, assuming the rate holds.
- Data source
- Indexed funding settlements (FundingEvent); the interval from the Perpl API, else measured
- Time window
- Rolling: the last 24 hours, 7 days or 30 days, or All (since Feb 11, 2026)
- Refresh frequency
- Not available
Modelled: APR is the current rate projected over a year, not a forecast.
Code: packages/shared/src/analytics/pg.ts funding, fundingSeries; map.ts fundingUnitsToPct; apps/web/src/lib/funding.ts aprPct
Trading feesWhole UTC days from the window’s first day through today so far ("last 7 whole days + today"), or All
- Definition
- Maker plus taker fees paid on Perpl.
- Calculation method
- The sum of each market’s daily fee total. Taker fees have no finer timestamp than the UTC day, so this is the only exact total. The rolling maker-only part is shown separately as maker fees.
- Data source
- Indexed per-market days (MarketDay)
- Time window
- Whole UTC days from the window’s first day through today so far ("last 7 whole days + today"), or All
- Refresh frequency
- Not available
Code: packages/shared/src/analytics/pg.ts #metricsOver (FEES_SQL), #fees
Trader metrics
Realised PnLWhole UTC days from the window’s first day through today so far ("last 7 whole days + today"), or All
- Definition
- Profit or loss locked in when a position is reduced or closed. Funding is kept separately.
- Calculation method
- Summed from the account’s day rows; per round trip from the position. Computed by the indexer from the Exchange’s position events.
- Data source
- Indexed positions and per-account days (Position, TraderDay)
- Time window
- Whole UTC days from the window’s first day through today so far ("last 7 whole days + today"), or All
- Refresh frequency
- Not available
Code: packages/shared/src/analytics/pg.ts traderDays (TRADER_DAYS_SQL), roundTrips
Unrealised PnLNow: a level, not a window
- Definition
- The profit or loss an open position would realise at the current mark.
- Calculation method
- side × size × (mark − entry), with side +1 for a long and −1 for a short.
- Data source
- Open positions (from the index on a public profile; from Perpl’s live account stream in the bot), priced at Perpl’s mark
- Time window
- Now: a level, not a window
- Refresh frequency
- Not available
Code: packages/shared/src/risk/liquidation.ts unrealizedPnlCNS; risk/metrics.ts positionMetrics
Net PnLWhole UTC days from the window’s first day through today so far ("last 7 whole days + today"), or All
- Definition
- Realised PnL plus funding, less trading fees (maker and taker).
- Calculation method
- realised + funding − fees, one definition in the indexer, summed over the account’s UTC days. Round-trip results, win rate and profit factor are BEFORE fees and are labelled so.
- Data source
- Indexed per-account days (TraderDay)
- Time window
- Whole UTC days from the window’s first day through today so far ("last 7 whole days + today"), or All
- Refresh frequency
- Not available
Code: apps/indexer/src/lib/entities.ts netPnl; packages/shared/src/analytics/pg.ts TRADER_SOURCE_WINDOW
Profitable tradersWhole UTC days from the window’s first day through today so far ("last 7 whole days + today"), or All
- Definition
- Accounts with at least one closed round trip whose net PnL (after fees and funding) is above zero.
- Calculation method
- Counted among accounts with a fill in the window, over whole UTC days, shown as "x of y".
- Data source
- Indexed per-account days (TraderDay)
- Time window
- Whole UTC days from the window’s first day through today so far ("last 7 whole days + today"), or All
- Refresh frequency
- Not available
Code: packages/shared/src/analytics/pg.ts traderSummarySql
Average PnL
- Definition
- Not availablePerpGuard computes no average PnL. The trader summary computes a median net PnL (withheld under 10 traders), which no page shows today.
- Calculation method
- Not available
- Data source
- Not available
- Time window
- Not available
- Refresh frequency
- Not available
Code: packages/shared/src/analytics/pg.ts traderSummarySql (median_pnl)
Trader rankingsWhole UTC days for P&L and flows; at 24H, volume, trades and liquidations are the rolling 24 hours
- Definition
- Top PnL and Top losses (net PnL, at least 10 round trips), Volume, Liquidated (accounts liquidated in the window) and Flows (largest net money in or out).
- Calculation method
- Each board is one ordering of the per-account figures. Win rate and profit factor are withheld under 10 round trips. ROI is lifetime net PnL over lifetime deposits, withheld under 100 AUSD deposited.
- Data source
- Indexed per-account days and liquidations (TraderDay, Liquidation)
- Time window
- Whole UTC days for P&L and flows; at 24H, volume, trades and liquidations are the rolling 24 hours
- Refresh frequency
- Not available
Code: packages/shared/src/analytics/pg.ts TRADER_RANKING, tradersSql, TRADER_SOURCE_24H
Liquidation metrics
Total liquidationsRolling: the last 24 hours, 7 days or 30 days, or All (since Feb 11, 2026)
- Definition
- Positions closed by the Exchange’s liquidation, in the window.
- Calculation method
- A count of indexed liquidations.
- Data source
- Indexed liquidations (Liquidation)
- Time window
- Rolling: the last 24 hours, 7 days or 30 days, or All (since Feb 11, 2026)
- Refresh frequency
- Not available
Code: packages/shared/src/analytics/pg.ts LIQUIDATION_SQL via #metricsOver
Liquidation valueRolling: the last 24 hours, 7 days or 30 days, or All (since Feb 11, 2026)
- Definition
- The notional liquidated: each liquidation’s size × its execution price, summed.
- Calculation method
- Sum of each liquidation’s notional. Margin lost (the drop in the position’s deposit) is shown per row and is not a loss of money: part of it is credited back to the account.
- Data source
- Indexed liquidations (Liquidation)
- Time window
- Rolling: the last 24 hours, 7 days or 30 days, or All (since Feb 11, 2026)
- Refresh frequency
- Not available
Code: packages/shared/src/analytics/pg.ts LIQUIDATION_SQL (notional); apps/indexer/src/handlers/liquidations.ts
Preventable liquidationsModelledRolling: the last 24 hours, 7 days or 30 days, or All (since Feb 11, 2026)
- Definition
- "Rescuable": the trader’s free AUSD at the moment of liquidation would have covered the top-up that kept the position above maintenance margin.
- Calculation method
- Free balance before ≥ margin to survive > 0, where margin to survive is the collateral that would have kept the position exactly at maintenance at the mark it was liquidated at. A position whose entry price the index never saw cannot be judged and is excluded from the denominator.
- Data source
- Indexed liquidations and the account’s free balance
- Time window
- Rolling: the last 24 hours, 7 days or 30 days, or All (since Feb 11, 2026)
- Refresh frequency
- Not available
Modelled: A counterfactual: it assumes the trader would have added the margin in time.
Code: apps/indexer/src/handlers/liquidations.ts (wasRescuable); packages/shared/src/risk/liquidation.ts marginToSurviveCNS
Preventable valueModelledRolling: the last 24 hours, 7 days or 30 days, or All (since Feb 11, 2026)
- Definition
- "Potentially avoidable losses": the realised loss (P&L plus funding) of the rescuable liquidations.
- Calculation method
- Summed once per event; trading and liquidation fees are left out, so it understates. A top-up keeps the position open; it does not undo the price move.
- Data source
- Indexed liquidations (Liquidation)
- Time window
- Rolling: the last 24 hours, 7 days or 30 days, or All (since Feb 11, 2026)
- Refresh frequency
- Not available
Modelled: A counterfactual over the rescuable set.
Code: packages/shared/src/analytics/pg.ts LIQUIDATION_SQL (rescuable_loss)
Liquidation thresholdsNow: a level, not a window
- Definition
- The mark at which a position is liquidated: where its margin falls to the market’s maintenance requirement. Perpl margin is isolated, per position.
- Calculation method
- Maintenance = entry price × size ÷ the market’s maintenance leverage; liquidation price = entry + side × (maintenance − deposit − funding) ÷ size.
- Data source
- Positions (index or Perpl API); maintenance margin per market from the Perpl API
- Time window
- Now: a level, not a window
- Refresh frequency
- Not available
Code: packages/shared/src/risk/liquidation.ts maintenanceMarginCNS, liquidationPricePNS
Risk methodology
Long/short exposureNow: a level, not a window
- Definition
- The long side’s share of the isolated margin open on a market, with the number of positions on each side beside it. Never notional: on an order book open size is equal on both sides by construction.
- Calculation method
- Long margin ÷ (long + short margin), over the index’s open positions.
- Data source
- Indexed open positions (Position)
- Time window
- Now: a level, not a window
- Refresh frequency
- Not available
Code: packages/shared/src/analytics/pg.ts MARKET_BREAKDOWN_SQL (long_margin, short_margin)
Liquidation ladderModelledNow: a level, not a window
- Definition
- Every open position re-priced at each step from −50% to +50% of the mark, in 0.5% steps, and counted as liquidated when it is then past maintenance.
- Calculation method
- The risk engine’s own position maths applied at the shocked mark, once per position per rung. A fall closes longs and a rise closes shorts; no figure adds the two.
- Data source
- Indexed open positions, priced with Perpl marks and margin parameters; insurance balances from the contract
- Time window
- Now: a level, not a window
- Refresh frequency
- Not available
Modelled: A static price shock.
Code: packages/shared/src/analytics/exposure.ts buildRiskSnapshot, LADDER_MOVES
Stress testModelledNow: a level, not a window
- Definition
- The ladder’s ±5% and ±10% rungs: positions, notional and loss beyond collateral each move would liquidate, one direction at a time.
- Calculation method
- Read off the same ladder. "All markets" assumes every market moves together, the worst case rather than the likely one.
- Data source
- As the ladder
- Time window
- Now: a level, not a window
- Refresh frequency
- Not available
Modelled: A static shock; it does not model the path, funding, keeper timing or the book.
Code: packages/shared/src/analytics/exposure.ts buildRiskSnapshot
Positions at riskNow: a level, not a window
- Definition
- Each open position with the least adverse move that liquidates it; the largest exposed are listed.
- Calculation method
- The first rung, in the position’s adverse direction, at which it is past maintenance.
- Data source
- As the ladder
- Time window
- Now: a level, not a window
- Refresh frequency
- Not available
Code: packages/shared/src/analytics/exposure.ts buildRiskSnapshot (positions)
Price impact assumptions
- Definition
- Not availableNot modelled. The index has no order book, so no figure estimates slippage or whether the book could absorb a liquidation; every Risk figure is exposure, not realised loss.
- Calculation method
- Not available
- Data source
- Not available
- Time window
- Not available
- Refresh frequency
- Not available
Code: packages/shared/src/analytics/exposure.ts RISK_STATEMENTS
Capital flow methodology
DepositsRolling: the last 24 hours, 7 days or 30 days, or All (since Feb 11, 2026)
- Definition
- AUSD deposited into Perpl accounts in the window.
- Calculation method
- Sum and count of indexed deposits.
- Data source
- Indexed collateral flows (CollateralFlow)
- Time window
- Rolling: the last 24 hours, 7 days or 30 days, or All (since Feb 11, 2026)
- Refresh frequency
- Not available
Code: packages/shared/src/analytics/pg.ts COLLATERAL_FLOW_SQL via #metricsOver
WithdrawalsRolling: the last 24 hours, 7 days or 30 days, or All (since Feb 11, 2026)
- Definition
- AUSD withdrawn from Perpl accounts in the window.
- Calculation method
- Sum and count of indexed withdrawals.
- Data source
- Indexed collateral flows (CollateralFlow)
- Time window
- Rolling: the last 24 hours, 7 days or 30 days, or All (since Feb 11, 2026)
- Refresh frequency
- Not available
Code: packages/shared/src/analytics/pg.ts COLLATERAL_FLOW_SQL
Net capital flowRolling: the last 24 hours, 7 days or 30 days, or All (since Feb 11, 2026)
- Definition
- Deposits minus withdrawals. Not a change in balance, which also moves on P&L, funding, fees and liquidations.
- Calculation method
- deposited − withdrawn over the same rows.
- Data source
- Indexed collateral flows (CollateralFlow)
- Time window
- Rolling: the last 24 hours, 7 days or 30 days, or All (since Feb 11, 2026)
- Refresh frequency
- Not available
Code: packages/shared/src/analytics/pg.ts #flowStats
Unique accountsAll: since Feb 11, 2026
- Definition
- Perpl accounts opened since launch.
- Calculation method
- Accounts counted by the month they were created, summed.
- Data source
- Indexed accounts (Trader.createdAt)
- Time window
- All: since Feb 11, 2026
- Refresh frequency
- Not available
Code: packages/shared/src/analytics/pg.ts HISTORY_ACCOUNTS_SQL via history()
Since-launch totalsAll: since Feb 11, 2026
- Definition
- Volume, trades, deposits, withdrawals and liquidations from the Exchange’s deployment to now; and the exchange balance rebuilt forward from launch.
- Calculation method
- The All window of the same queries. The balance is indexed deposits − withdrawals + the protocol treasury’s own deposits − withdrawals, reconciled against the contract at one block.
- Data source
- The index, and a scan of the treasury’s own events over the RPC
- Time window
- All: since Feb 11, 2026
- Refresh frequency
- Not available
Code: packages/shared/src/analytics/pg.ts protocolMetrics("all"); apps/backend/src/exchangeBalance/treasuryScanner.ts
Data quality
- Completeness
- Not available
- Accuracy
- Not available
- Known limitations
- No order-book depth or intraday candles. Risk shocks are static. Trade results per round trip are before trading fees (fees are recorded per account per day). Funding across traders in AUSD is not computed: it needs each side’s open interest at every settlement.
- Missing data
- The indexed fill has no taker side; direction is read from the same transaction’s position event, and left blank when it has no single answer. About 6% of fills have no paired taker. Per-position fees are not recorded. The amount a liquidation credits back to the account is emitted but not stored.
- Validation checks
- Live: the index’s progress is checked against an independent chain head on every read, and the exchange balance is reconciled against the contract every 15 minutes, and open interest against the venue, market by market at recorded blocks, every 5 minutes (table below). Offline: the index is checked against the raw chain logs, and the funding unit, open interest history and skew were measured against the venue.
Infrastructure
- RPC provider
- Not available
- Indexer
- Not available
- Database
- Not available
- Cache
- Not available
- API status
- Not available
- Update frequency
- Not available
Disclaimers
- Data accuracy
- Every figure is derived from public on-chain events and Perpl’s public API, and can lag or be wrong. Each page shows how current its data is; check the source before relying on a number.
- Financial disclaimer
- Nothing here is financial advice or an offer to trade. Past results do not predict returns. Leveraged perpetuals can lose more than a position’s margin.
- Protocol affiliation
- Unofficial analytics. Not affiliated with or endorsed by Perpl or the Monad Foundation.
- Report an issue
- Open an issue at github.com/0xMigzy/PerpGuard/issues