Skip to main content

Hyperliquid Stock Perps: Live Markets, Deployers and Trading Hours

Every live stock, index and ETF perp on Hyperliquid, who deploys it, how volume splits across US sessions and weekends, and how to pull the data.

9 min read
Explore with your agent

Key findings

  1. Step 1: list every live market139Live stock, index and ETF perps on Hyperliquid on 13 November 2026.
  2. Who deploys stock perps98.5%HIP-3 volume on trade[XYZ]'s xyz deployer.
  3. Step 2: see when they trade2.6%Share of xyz:NVDA volume traded at the weekend.
  4. Step 3: check the weekend price against the reopen3.7% of 4.1%NVDA's weekend perp move against the fall in the first external price on Sunday evening.

Hyperliquid, an onchain crypto exchange, lists perpetual futures on US stocks, indices and ETFs alongside its crypto markets. They trade around the clock, including weekends, with up to 50x leverage. On 13 November 2026 there were 139 live stock, index and ETF perps among 171 live HIP-3 markets, and all live HIP-3 markets together traded $4.44 billion in 24 hours. This guide shows how to list them, who deploys them, how they trade outside US market hours, and how to pull the data. All code ran on 13 November 2026.

Short answer

  • Stock perps live on HIP-3. HIP-3 lets outside teams deploy their own perp markets on Hyperliquid. The xyz deployer, trade[XYZ], had 98.5% of HIP-3 volume.
  • 139 live stock, index and ETF perps. 113 stocks, 5 indices and 21 ETFs. The top 10 had 76.5% of their volume. xyz:NVDA alone traded $842 million in 24 hours.
  • They trade all week, but mostly in US hours. Over 2 to 13 November, the weekend had 2.6% of xyz:NVDA's volume. Pre-market had almost as much as the regular session.
  • Weekend trading moved ahead of the reopen. Over the weekend of 7 and 8 November, NVDA's perp fell 3.7%. The first external price on Sunday evening was 4.1% below Friday's close.

Who deploys stock perps

HIP-3 markets carry a prefix naming their deployer: xyz:NVDA is NVDA deployed by xyz. On 13 November, four deployers had live markets:

PrefixName on HyperliquidLive marketsWhat they list
xyzXYZ (trade[XYZ])122Stocks, indices, ETFs, commodities, FX, pre-IPO
paraParagon33Stocks, rates, pre-IPO
ioEntropyIO15Stocks, pre-IPO
mktsMarkets By Kinetiq1A volatility index

Six more deployers have only delisted markets: flx, vntl, hyna, km, abcd and cash. trade[XYZ]'s docs state that it "deploys Perpetuals under the xyz HIP-3 deployment" and publish its deployer address. The other names come from Hyperliquid's on-chain registry. The same stock can trade under more than one prefix with very different depth: io:NVDA traded $13.4 million in 24 hours, against more than $800 million on xyz:NVDA.

For what trade[XYZ] is and how to use it, see what is trade.xyz.

What you need

  • Python 3 with requests. The snippets are short prototypes without retry logic.
  • No key for Step 1. A 0xArchive API key in OXARCHIVE_API_KEY for Steps 2 and 3. The Free plan covers HIP-3 routes with a rolling 30 days of history; see pricing.

Step 1: list every live market

Hyperliquid's perpDexs call lists the deployers. metaAndAssetCtxs with a dex parameter returns each deployer's markets with volume and open interest:

import os, requests
from datetime import datetime, timezone, timedelta
N = "https://api.hyperliquid.xyz/info"
live = []
for dex in requests.post(N, json={"type": "perpDexs"}, timeout=30).json():
    if not dex:
        continue                                   # the first entry is Hyperliquid's own perps
    meta, ctxs = requests.post(N, json={"type": "metaAndAssetCtxs", "dex": dex["name"]}, timeout=30).json()
    for m, c in zip(meta["universe"], ctxs):
        if not m.get("isDelisted"):
            oi_usd = float(c["openInterest"]) / 2 * float(c["markPx"])     # one side, in dollars
            live.append((m["name"], dex["fullName"], float(c["dayNtlVlm"]), oi_usd, m["maxLeverage"]))
live.sort(key=lambda x: -x[2])
print(len(live), "live HIP-3 markets | 24h volume $%.2fB | open interest $%.2fB a side"
      % (sum(x[2] for x in live) / 1e9, sum(x[3] for x in live) / 1e9))
for name, deployer, vol, oi, lev in live[:8]:
    print(f"{name:12} {deployer:6} ${vol/1e6:7.1f}M  OI ${oi/1e6:6.1f}M  {lev}x")
171 live HIP-3 markets | 24h volume $4.44B | open interest $2.22B a side
xyz:NVDA     XYZ    $  842.4M  OI $ 201.9M  20x
xyz:XYZ100   XYZ    $  517.6M  OI $ 141.0M  30x
xyz:SP500    XYZ    $  455.9M  OI $ 224.7M  50x
xyz:SOXL     XYZ    $  292.5M  OI $  10.1M  10x
xyz:SKHX     XYZ    $  274.6M  OI $ 140.5M  10x
xyz:SNDK     XYZ    $  199.8M  OI $  47.9M  10x
xyz:SILVER   XYZ    $  137.7M  OI $  76.6M  25x
xyz:SPCX     XYZ    $  118.5M  OI $  61.8M  20x

Hyperliquid reports open interest in contracts counting both sides, so we halve it and multiply by the mark price for one side in dollars. The open interest guide explains why. The API returns no category, so telling a stock from an ETF or a commodity needs the deployer's own list. For xyz, that is trade[XYZ]'s specification index.

The largest stock, index and ETF perps

MarketType24h volumeOpen interest, one sideMax leverage
xyz:NVDAStock$842M$202M20x
xyz:XYZ100Index$518M$141M30x
xyz:SP500Index$456M$225M50x
xyz:SOXLETF$293M$10.1M10x
xyz:SKHXStock$275M$141M10x
xyz:SNDKStock$200M$47.9M10x

Most stock perps allow 10x: 109 of the 139. xyz:SP500 is the only one at 50x. 135 of the 139 run in growth mode, which cuts Hyperliquid's trading fee by 90%, so a base-tier taker pays 0.009% on xyz:NVDA. Funding on most sat near 0.0006% an hour, with outliers such as xyz:SMSN at 0.03%.

Step 2: see when they trade

Split a stock perp's hourly volume by US session, using New York time:

from collections import defaultdict
from zoneinfo import ZoneInfo
H = {"X-API-Key": os.environ["OXARCHIVE_API_KEY"]}
B = "https://api.0xarchive.io/v1/hyperliquid/hip3"
ET = ZoneInfo("America/New_York")

def session(ts):
    t = datetime.fromisoformat(ts.replace("Z", "+00:00")).astimezone(ET)
    if t.weekday() == 5 or (t.weekday() == 4 and t.hour >= 20) or (t.weekday() == 6 and t.hour < 20):
        return "weekend"
    hm = (t.hour, t.minute)
    if (9, 30) <= hm < (16, 0):
        return "regular"
    if (4, 0) <= hm < (9, 30):
        return "pre-market"
    if (16, 0) <= hm < (20, 0):
        return "post-market"
    return "overnight"

for sym in ["xyz:NVDA", "xyz:SP500"]:
    rows = requests.get(f"{B}/candles/{sym}", headers=H, timeout=60, params={
        "interval": "1h", "start": "2026-11-02T05:00:00Z", "end": "2026-11-13T05:00:00Z", "limit": 1000}).json()["data"]
    vol = defaultdict(float)
    for r in rows:
        vol[session(r["timestamp"])] += float(r["quote_volume"])
    hours = defaultdict(int)
    for r in rows:
        hours[session(r["timestamp"])] += 1
    tot = sum(vol.values())
    print(sym, " | ".join(f"{k} {100 * vol[k] / tot:.1f}%" for k in
                          ("regular", "pre-market", "post-market", "overnight", "weekend")))
    print("   per hour: regular $%.2fM over %d h | weekend $%.2fM over %d h" % (
        vol["regular"] / hours["regular"] / 1e6, hours["regular"], vol["weekend"] / hours["weekend"] / 1e6, hours["weekend"]))
xyz:NVDA regular 35.2% | pre-market 31.6% | post-market 16.6% | overnight 14.0% | weekend 2.6%
   per hour: regular $36.12M over 54 h | weekend $3.05M over 48 h
xyz:SP500 regular 43.0% | pre-market 22.9% | post-market 13.0% | overnight 17.6% | weekend 3.4%
   per hour: regular $36.41M over 54 h | weekend $3.27M over 48 h

The regular session had about a third to two-fifths of the volume. Pre-market, 4:00 to 9:30 AM New York time, was nearly as large as the regular session on xyz:NVDA. Those hours fall in the European trading day. The weekend, Friday 8:00 PM to Sunday 8:00 PM, had 2.6% to 3.4% of the volume across 48 hours: xyz:NVDA traded $36.12 million an hour in the regular session and $3.05 million an hour at the weekend.

Spreads barely changed. The median quoted spread on xyz:NVDA was 0.53 to 0.63 bps in every session. Depth did change: in our slippage measurements, a $5 million xyz:NVDA buy cost 21 bps in the US session and 123 bps at the weekend.

Step 3: check the weekend price against the reopen

When the US market is shut, trade[XYZ]'s docs say the oracle "advances via a continuous-time exponentially weighted moving average" of the perp's own trading. External prices for US stocks run "24/5, from Sunday 8:05 PM ET to Friday 8:00 PM ET". So the weekend price is set by traders, and Sunday evening shows whether they were right:

def at(sym, t):
    """The last price row at or before time t."""
    rows = requests.get(f"{B}/prices/{sym}", headers=H, timeout=60, params={
        "start": (t - timedelta(minutes=2)).isoformat(), "end": t.isoformat(), "limit": 1000}).json()["data"]
    return rows[-1]

fri_close = datetime(2026, 11, 6, 20, 0, tzinfo=ET)          # external pricing stops, Friday 8:00 PM ET
resume = datetime(2026, 11, 8, 20, 5, tzinfo=ET)             # and resumes Sunday 8:05 PM ET
for sym in ["xyz:NVDA", "xyz:TSLA"]:
    a, b = at(sym, fri_close), at(sym, resume - timedelta(minutes=1))
    c, d = at(sym, resume + timedelta(minutes=1)), at(sym, resume + timedelta(minutes=10))
    print(sym, "Fri close oracle", a["oracle_price"], "| Sun mark at 20:04", b["mark_price"],
          "| oracle at 20:06", c["oracle_price"], "| at 20:15", d["oracle_price"])
    print("   weekend move %+.1f%% | weekend price vs first external oracle %+.1f bps"
          % ((float(b["mark_price"]) / float(a["oracle_price"]) - 1) * 100,
             (float(b["mark_price"]) / float(c["oracle_price"]) - 1) * 1e4))
xyz:NVDA Fri close oracle 188.72 | Sun mark at 20:04 181.65 | oracle at 20:06 180.91 | at 20:15 178.95
   weekend move -3.7% | weekend price vs first external oracle +40.9 bps
xyz:TSLA Fri close oracle 359.4 | Sun mark at 20:04 358.17 | oracle at 20:06 357.36 | at 20:15 355.16
   weekend move -0.3% | weekend price vs first external oracle +22.7 bps

xyz:NVDA closed Friday at an oracle price of $188.72. One minute before external prices resumed on Sunday, traders had it at $181.65, down 3.7%. The first oracle after the resume was $180.91, down 4.1% from Friday and 41 bps below the weekend price. Weekend trading had priced about nine tenths of the move. TSLA's weekend price was 23 bps from its first external print, after a 0.6% fall.

One weekend is one data point. For a longer study of weekend price discovery, see our weekend price discovery research. For how mark and oracle prices behave while the market is shut, see mark price vs oracle price.

Side by side: Hyperliquid's API and 0xArchive

We ran the same jobs against each source on 13 November 2026.

JobHyperliquid API0xArchive
Live markets, volume and open interest11 calls, live only1 call to hip3/instruments, which also lists delisted markets
Mark and oracle historyNot availableAbout every 3 seconds, from 13 October 2025
Order book historyNot available20 levels and order-level books from 2026
CandlesLatest 5,000 per intervalFrom 22 December 2025
Listing datesOne candleSnapshot per marketOne call to /v1/symbols

Hyperliquid's API is enough for a live list of markets and prices. Any question about the past, such as weekend behavior, the reopen, or depth by session, needs history. Every live stock perp also has an export page in the Data Catalog, for example xyz:NVDA.

What to know before you build

  • Same ticker, different markets. xyz:NVDA, io:NVDA and Lighter's NVDA are separate contracts with separate books and oracles.
  • Filter out delisted markets. 157 of 328 HIP-3 markets were delisted on 13 November. Check isDelisted in Hyperliquid's metadata.
  • Use New York time for sessions. US daylight saving time moves every session by an hour in UTC twice a year.
  • Weekly bars start on Sunday 00:00 UTC in 0xArchive candles, in the middle of the weekend session.
  • Pre-IPO markets are different. Markets such as xyz:ANT track companies that are not listed yet and have no external price.

FAQ

Can you trade stocks on Hyperliquid?

You can trade perpetual futures on stocks, indices and ETFs, deployed through HIP-3. You hold a contract that tracks the price, not the share.

Which stocks are on Hyperliquid?

On 13 November 2026, 113 stocks plus 5 indices and 21 ETFs were live. The largest by volume were NVDA, the XYZ100 index, the S&P 500, SOXL and SKHX on trade[XYZ].

Do Hyperliquid stock perps trade on weekends?

Yes, around the clock. Weekend volume was about 3% of the total, and large orders cost more because the book is thinner.

What leverage do Hyperliquid stock perps offer?

Mostly 10x. Some large names allow 20x, the XYZ100 index 30x, and xyz:SP500 50x.

How is a stock perp priced when the market is closed?

trade[XYZ]'s oracle follows the perp's own trading with a moving average until external prices resume on Sunday at 8:05 PM New York time.

Next steps