APEX Vault WatchMethodology← Dashboard

Methodology

Every figure on the dashboard is computed from the public Hyperliquid info API (POST https://api.hyperliquid.xyz/info), server-side, with the constants in src/lib/metrics.ts. This page is the same text, with those constants filled in. Nothing is mocked: when a call fails the section says "no data" and why.

Wallet under watch: 0xf2460F28C9BaCB35Ac6feF048b661d33Ad070Aaf (APEX MS1, Apex Quant Capital on INFINIT). Every number carries the UTC time its inputs were read.

API calls

PurposeBodyNotes
Perp dex list{"type":"perpDexs"}First entry is null, the main dex. Every call below that takes dex is run once per dex. The wallet trades on main (crypto) and xyz (HIP-3).
Markets and live OI{"type":"metaAndAssetCtxs","dex":"<name>"}[meta, ctxs], zipped by index. Delisted markets are skipped. OI in USD = openInterest × markPx.
Positions now{"type":"clearinghouseState","user":W,"dex":"<name>"}Per dex; marginSummary.accountValue summed across dexs is total equity.
Equity and PnL history{"type":"portfolio","user":W}Used for the cross-check only (allTime.pnlHistory[-1]). Its points are weekly in August and daily after, so the curve is built from fills instead.
Fills{"type":"userFillsByTime","user":W,"startTime":<ms>,"aggregateByTime":true}2,000 per page; next page starts at max(time)+1. Full-precision prices are stored as strings.
Funding{"type":"userFunding","user":W,"startTime":<ms>}500 per page, same pagination. Positive usdc is received.
Deposits and transfers{"type":"userNonFundingLedgerUpdates","user":W,"startTime":0}deposit, withdraw, send (dex-to-dex moves are self-sends with destinationDex), vaultDeposit, vaultWithdraw.
Daily closes{"type":"candleSnapshot","req":{"coin":C,"interval":"1d","startTime":<ms>,"endTime":<ms>}}t is the candle open (00:00 UTC); its close belongs to that calendar day. One call per market the wallet has ever traded.
Order-level bookAlchemy HyperCore l4BookUpdates (websocket, coins: [...])One snapshot across every traded and eligible market, all from the same HyperCore block. Not part of the public API.

Calls are queued server-side with at least 350 ms between them and retried with backoff on non-JSON or 5xx answers. The browser never calls Hyperliquid directly.

Definitions

- realised(d) = cumulative Σ(closedPnl − fee) over fills with time < end of d, plus cumulative funding usdc to the end of d. - unrealised(d) = Σ over positions open at the end of d of qty × close(d) − cost basis, where the cost basis is the signed average entry per market tracked from the fills (the same average-entry convention Hyperliquid reports as entryPx; FIFO is not needed). - close(d) is the 1d candle close for that calendar day. HIP-3 markets have no candle on days they are closed; the last known close is carried forward and those days are listed in the build notes. - The final point is replaced with PnL now from the API so the curve ends on the authoritative figure. - Days with zero open positions are marked "cash" and shaded.

Mandate monitor

  1. Every open position 1x isolated (from clearinghouseState).
  2. Gross exposure ≤ capital (tolerance 1.05x).
  3. Every open position in a market with OI ≥ $100M right now.
  4. Net/gross below 10% at the last daily close with open positions.
  5. No withdrawals from the trading wallet before maturity (ledger withdraw count before the redeemable date = 0).

Drawdown circuit breakers and first-loss capital are not observable from any public endpoint and are rendered as such.

Order-level book (Alchemy)

The "Under the book" section is the only part not computed from the public API. One l4BookUpdates subscription on Alchemy's HyperCore stream returns every resting order, with its wallet, for every market in the subscription, as of one HyperCore block. For each market: the L4 mid (best bid and ask), resting notional inside ±10 bp of that mid on each side, distinct wallets inside the band, the largest wallet's share of that depth, the vault's own resting orders (matched by wallet address), and the launch slot as a share of each side's depth. The snapshot takes 5 to 25 seconds, so it loads after the page and refreshes every 90 seconds while the tab is open.

Trade log and sharing

The trade log is every userFillsByTime row for the wallet, newest first, with dir, size, full-precision price, notional (price × size), closedPnl, fee and the transaction hash linked on hypurrscan. The CSV adds oid, tid, feeToken and whether the fill crossed the spread. Share menus copy a deep link to the section, download that section's 1200×630 image (/api/og/<vault>/<section>, rendered from the same data at request time), or open an X post with the link.

Deposits, onchain (Arbitrum)

INFINIT's vaults take USDC on Arbitrum through a vault manager contract (0xaFE480f375EBd13dF703ef50b429357d29D162Ee). Each deposit emits Deposit(user, vaultId, amount) and mints the vault's receipt token (inUSDC) 1:1; redemptions burn it. The Deposits section is the sum of those events per vault, read from the public Arbitrum RPC into Postgres by a cron every five minutes (and on request when the stored cursor is older than four minutes), with one chart point per deposit and a link to every transaction on Arbiscan. Vault 1 (MS1) reconciles to INFINIT's own figures: 28 deposits, 506,137.39 USDC. MS2 and MS3 are vaults 2 and 3 on the same manager (created 28 Oct 2026 10:54 and 10:57 UTC); their shared deposit window closes 11 Nov 2026 12:00 UTC per INFINIT's announcement, and the status pill flips to "window closed" at that minute. Their trading wallets are not public yet, so the return, exposure and trade sections cover MS1 only until vaults.ts carries them.

Caveats, as found

Reconciliation

As of 26 Oct 2026 20:14 UTC the replay (node scripts/replay.ts) gives: 340 fills, $12,032,096 volume, fees $2,239.75, funding +$3,124.17, max drawdown 3.70% (10 to 18 Aug), peak +$42,933 on 23 Oct (the spec's +$43,215 before the −$282 staging result), net/gross average 0.99% over 71 active days (worst 7.5% on 18 Aug), peak gross 1.04x, attribution crypto +$50,250 / commodity +$12,860 / index −$3,154 / equity −$24,798, matching the targets in the spec. The daily MTM series matches the portfolio points on the days they exist with a median absolute delta of $233 (39 points, largest $2,619 on 12 Oct).