BitMEX Funding Rate Dataset

BitMEX Historical Funding Rate Data

BitMEX funding rates, mark prices, and index prices packaged as hourly files for carry, basis, and risk research.

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 mark price update.

bitmex/2026-09-02/12/XBTUSDT_mark_price.parquetDownload full file
received_timeevent_timesymbolmark_priceindex_priceestimated_settle_pricefunding_ratenext_funding_time
17883504001845731731788350400000XBTUSDT76837.13nullnullnull1788379200000
17883504002282746161788350400057XBTUSDTnullnull76827.79nullnull
17883504047261405561788350403500XBTUSDT76835.47nullnullnullnull
17883504051873565431788350405018XBTUSDTnullnull76812.33nullnull
17883505549832338491788350552653XBTUSDT76820.3null76812.650.00011788379200000
17883512593673715661788351257654XBTUSDT76799.16null76791.70.00011788379200000
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 · mark_price

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 funding rate data are in the schema below.

Use cases

What you can build with funding rate data

Funding carry and basis
Measure what it cost to hold a perpetual position over time and compare it with spot or dated futures.
Cross-exchange funding spreads
Find persistent funding differences for the same asset across venues for relative-value research.
Mark vs. index dislocation
Track the gap between mark and index price to study premium, sentiment, and liquidation risk.

Coverage

Funding rate 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.

Funding rate coverage by venue, exchange ID, market, history start, and live symbol count
VenueExchange IDMarketHistoryMark price symbols
BitMEXbitmexFutures
2025-09-29 to 2026-09-2212 mo
156

Other exchanges

Funding & Mark Price 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 funding rate overview.

Schema · 8 columns

Normalized mark price schema

Every mark price row carries mark, index, and estimated settle prices plus the current funding rate (a fraction per funding period) and next funding time for perpetual contracts, where the venue publishes them.

Columns in every funding rate Parquet file
ColumnTypeDescription
received_timeINT64Unix timestamp (nanoseconds) when our system received the mark price event
event_timeINT64Unix timestamp when the exchange generated the event (the time unit changes with the exchange)
symbolSTRINGTrading pair symbol (for example, 'BTCUSDT')
mark_priceSTRINGnullableMark price that the exchange uses to calculate liquidations (stored as string for precision)
index_priceSTRINGnullableIndex price from the underlying spot exchanges (stored as string for precision)
estimated_settle_priceSTRINGnullableEstimated settlement price at contract expiration (stored as string for precision)
funding_rateSTRINGnullableCurrent funding rate for perpetual contracts, as a fraction for each funding period (0.0001 = 0.01 %; stored as string for precision). Kraken Futures and Lighter history before the 2026-09 data-integrity release use other units (refer to the venue notes)
next_funding_timeINT64nullableUnix timestamp when the next funding payment will occur. Lighter history before the 2026-09 data-integrity release contains the last funding time instead

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_mark_price()

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

bitmex_funding_rate_data.py
import cryptohftdata as chd

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

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

print(df.head())
print(f"Mark price updates: {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_mark_price.parquet" \
  -o XBTUSDT_mark_price_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. Funding rate and next funding time ship inside the mark price files ({symbol}_mark_price.parquet) alongside mark, index, and estimated settle prices.

  2. Funding applies to perpetual contracts; rows for other instruments carry mark and index prices without funding fields.

  3. funding_rate is a fraction per funding period. Kraken Futures history before the 2026-09 data-integrity release holds Kraken's absolute funding rate, and Lighter history holds percent; corrections are planned.

  4. OKX funding rows before the release are timestamped with the next settlement time, which introduces look-ahead if you join on event_time; use received_time for that history.

  5. 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 funding rate data free to download?

Yes. A free CryptoHFTData account with no credit card gives API access to BitMEX funding rate 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 funding rate 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}_mark_price.parquet. Parquet reads directly into pandas, Polars, DuckDB, and Arrow.

How do I load BitMEX funding rate data in Python?

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

Where is the funding rate stored?

Funding rate and next funding time ship inside the mark price files ({symbol}_mark_price.parquet), next to the mark, index, and estimated settle prices.

Start using funding rate data today.

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