BitMEX Open Interest Dataset

BitMEX Historical Open Interest Data

BitMEX open interest snapshots in venue units and quote notional, aligned with the schema used across CryptoHFTData derivatives venues.

No credit card · The sample is one real hourly Parquet file and needs no API key

Sample

See the data before you sign up

The first rows of one real hour: XBTUSDT on BitMEX, 2026-09-02 at 12:00 UTC. One row per open interest snapshot.

bitmex/2026-09-02/12/XBTUSDT_open_interest.parquetDownload full file
received_timesymbolsum_open_interestsum_open_interest_valuetimestamp
1788350554983233849XBTUSDT60628400null1788350552653
1788350556595997632XBTUSDT60608400null1788350556454
1788350557598908960XBTUSDT60628400null1788350557455
1788351259367371566XBTUSDT60628400null1788351257654
1788351955249271320XBTUSDT60648400null1788351955018
1788352593138257135XBTUSDT60658400null1788352592985
Showing 6 of 2,101 rows in this hourTimestamps are raw integers; units are in the schema below

Wire format

From exchange message to Parquet row

Every row starts as a message on the exchange's WebSocket or REST API. Point at a line or a column to see where each value comes from and how we convert it. Our test suite replays these messages through the production pipeline, so the rows shown are the rows you download.

BitMEX (historical)

Reconstructed: BitMEX is closed, and it is not possible to capture its feed now. After each connection or reconnection, BitMEX sends a partial with all instrument fields. Only this type of message contains all fields that the pipeline reads. keys, types and filter are copies from an instrument partial that BitMEX sent on 2026-10-05.

Exchange sends

WebSocket message (reconstructed) · instrument:<symbol>received 2026-09-02 12:02:34.983233 UTC

{
"table": "instrument",
"action": "partial",
"keys": ["symbol"],
"types": {
"symbol": "symbol",
"rootSymbol": "symbol",
"instrumentID": "int",
"state": "symbol",
"typ": "symbol",
"listing": "timestamp",
"front": "timestamp",
"expiry": "timestamp",
"settle": "timestamp",
"listedSettle": "timestamp",
"relistInterval": "timespan",
"positionCurrency": "symbol",
"underlying": "symbol",
"quoteCurrency": "symbol",
"underlyingSymbol": "symbol",
"reference": "symbol",
"referenceSymbol": "symbol",
"calcInterval": "timespan",
"publishInterval": "timespan",
"publishTime": "timespan",
"maxOrderQty": "long",
"minPrice": "float",
"maxPrice": "float",
"lotSize": "long",
"tickSize": "float",
"multiplier": "long",
"settlCurrency": "symbol",
"underlyingToPositionMultiplier": "long",
"underlyingToSettleMultiplier": "long",
"quoteToSettleMultiplier": "long",
"isQuanto": "boolean",
"isInverse": "boolean",
"initMargin": "float",
"maintMargin": "float",
"riskLimit": "long",
"riskStep": "long",
"limit": "float",
"taxed": "boolean",
"deleverage": "boolean",
"makerFee": "float",
"takerFee": "float",
"settlementFee": "float",
"fundingBaseSymbol": "symbol",
"fundingQuoteSymbol": "symbol",
"fundingPremiumSymbol": "symbol",
"fundingTimestamp": "timestamp",
"fundingInterval": "timespan",
"fundingRate": "float",
"indicativeFundingRate": "float",
"rebalanceTimestamp": "timestamp",
"rebalanceInterval": "timespan",
"launchingTimestamp": "timestamp",
"prevClosePrice": "float",
"limitDownPrice": "float",
"limitUpPrice": "float",
"prevTotalVolume": "long",
"totalVolume": "long",
"volume": "long",
"volume24h": "long",
"prevTotalTurnover": "long",
"totalTurnover": "long",
"turnover": "long",
"turnover24h": "long",
"homeNotional24h": "float",
"foreignNotional24h": "float",
"prevPrice24h": "float",
"vwap": "float",
"highPrice": "float",
"lowPrice": "float",
"lastPrice": "float",
"lastPriceProtected": "float",
"lastTickDirection": "symbol",
"lastChangePcnt": "float",
"bidPrice": "float",
"midPrice": "float",
"askPrice": "float",
"impactBidPrice": "float",
"impactMidPrice": "float",
"impactAskPrice": "float",
"hasLiquidity": "boolean",
"openInterest": "long",
"openValue": "long",
"fairMethod": "symbol",
"fairBasisRate": "float",
"fairBasis": "float",
"fairPrice": "float",
"markMethod": "symbol",
"markPrice": "float",
"referencePrice": "float",
"indicativeSettlePrice": "float",
"settledPriceAdjustmentRate": "float",
"settledPrice": "float",
"instantPnl": "boolean",
"minTick": "float",
"fundingBaseRate": "float",
"fundingQuoteRate": "float",
"farLegSymbol": "symbol",
"nearLegSymbol": "symbol",
"tags": "symbol",
"timestamp": "timestamp"
},
"filter": {
"symbol": "XBTUSDT"
},
"data": [
{
"symbol": "XBTUSDT",
"fundingTimestamp": "2026-09-02T20:00:00.000Z",
"fundingRate": 0.0001,
"volume24h": 6131600,
"turnover24h": 473010789790,
"prevPrice24h": 77932.3,
"highPrice": 78375.2,
"lowPrice": 76270,
"lastPrice": 76607.6,
"lastChangePcnt": -0.0166,
"openInterest": 60628400,
"markPrice": 76820.3,
"indicativeSettlePrice": 76812.65,
"timestamp": "2026-09-02T12:02:32.653Z"
}
]
}

Shortened: A partial contains all instrument fields (the types header lists 100). The example shows only the fields that the pipeline reads. The other fields are not in our published data.

You download

Parquet row · open_interest

Point at a line in the message or a column in the row to trace where each value comes from. Click a column to pin it.

Rebuilt from published rows; the exchange has closed

All BitMEX (historical) mapping rules →

Conventions for every exchange are in the wire formats overview. Column types and units for open interest data are in the schema below.

Use cases

What you can build with open interest data

Leverage build-up
Watch open interest rise or fall to see when new positions are being opened or closed.
Price and positioning divergence
Combine open interest with price to separate new money entering a move from short covering or long liquidation.
Cross-venue positioning
Compare where open interest concentrates across derivatives exchanges for the same underlying.

Coverage

Open interest coverage

Every venue is stored under its own exchange ID, so spot and derivatives never mix. Bars show each venue's history from its first hourly file to today, or to its last file for a venue that is no longer collected. Symbol counts are live from the symbols API.

Open interest coverage by venue, exchange ID, market, history start, and live symbol count
VenueExchange IDMarketHistoryOpen interest symbols
BitMEXbitmexFutures
2025-09-29 to 2026-09-2212 mo
156

Other exchanges

Open Interest data on other exchanges

The same schema on every venue, so switching exchange is a one-argument change.

Or compare every venue on the cross-exchange open interest overview.

Schema · 5 columns

Normalized open interest schema

Every open interest row is an exchange-published snapshot with total open interest in the venue's unit (base asset or contracts), quote notional value when available, and snapshot timing.

Columns in every open interest Parquet file
ColumnTypeDescription
received_timeINT64Unix timestamp (nanoseconds) when our system received the open interest data
symbolSTRINGTrading pair symbol (for example, 'BTCUSDT')
sum_open_interestSTRINGnullableTotal open interest in the unit of the venue (stored as string for precision). The unit is the base asset on most venues, contracts on OKX and Kraken inverse futures, and raw instrument units on BitMEX (refer to the venue notes)
sum_open_interest_valueSTRINGnullableTotal notional value of open interest in the quote currency, if the venue gives it or if we can calculate it (stored as string for precision)
timestampINT64Unix timestamp when the exchange took the open interest snapshot

Quickstart

From pip install to DataFrame in a minute

The example loads XBTUSDT from BitMEX for 2026-09-02. Change the symbol, exchange, or dates to pull any other slice of the archive.

  1. Install the Python SDK

    pip install cryptohftdata
  2. Create a free API key

    Sign up with email or Google, then generate a key from your dashboard. No credit card.

    Create account
  3. Call get_open_interest()

    Paste the snippet, replace YOUR_API_KEY, and you get a pandas DataFrame with the columns listed above.

bitmex_open_interest_data.py
import cryptohftdata as chd

client = chd.CryptoHFTDataClient(api_key="YOUR_API_KEY")

df = client.get_open_interest(
    symbol="XBTUSDT",
    exchange=chd.exchanges.BITMEX,
    start_date="2026-09-02",
    end_date="2026-09-02",
)

print(df.head())
print(f"Open interest snapshots: {len(df):,}")
REST · no API key needed for single files
curl --fail --location \
  "https://api.cryptohftdata.com/download?file=bitmex/2026-09-02/12/XBTUSDT_open_interest.parquet" \
  -o XBTUSDT_open_interest_12.parquet

Caveats

Know this before you backtest

Exchange feeds differ in subtle ways. These are the details that matter for accurate backtests, replay pipelines, and features. Missing hours and pending corrections for every venue are listed on Known Gaps & Corrections.

  1. Open interest is a periodic snapshot published by each exchange, not a continuous event stream; snapshot cadence varies by venue.

  2. sum_open_interest is in the venue's unit: base asset on most venues, contracts on OKX (multiply by ctVal) and Kraken inverse futures, raw per-instrument units on BitMEX. sum_open_interest_value is quote notional where available.

  3. This page covers 2025-09-29 to 2026-09-22. The exchange has closed, so no new hourly files are published; the existing files remain downloadable.

FAQ

Frequently asked questions

Is BitMEX open interest data free to download?

Yes. A free CryptoHFTData account with no credit card gives API access to BitMEX open interest data and every other dataset. Individual hourly files can also be downloaded without an API key on the rate-limited free tier.

How far back does BitMEX open interest data go?

The hourly files run from 2025-09-29 to 2026-09-22. The exchange has closed, so no new files are added, but the existing files remain downloadable.

What format are the files in?

Each file holds one symbol for one UTC hour, stored as Zstd-compressed Parquet under {exchange_id}/{YYYY-MM-DD}/{HH}/{SYMBOL}_open_interest.parquet. Parquet reads directly into pandas, Polars, DuckDB, and Arrow.

How do I load BitMEX open interest data in Python?

Install the SDK with pip install cryptohftdata, create a client with your API key, and call client.get_open_interest() with a symbol, exchange, and date range. It returns a pandas DataFrame.

How often is open interest recorded?

Open interest is a periodic snapshot published by each exchange, not a continuous stream. The cadence depends on the venue, so check timestamps before resampling.

Start using open interest data today.

One free API key covers every exchange and every data type. $0.00.