This is Part 1 of a three-part series on a funding signal computed from public Hyperliquid data. We start with the funding rate and define a funding-adjusted return: realized price return minus cumulative funding paid. We then test whether the signal contains information about forward returns.
- Funding on Hyperliquid is an anchoring mechanism, premium plus interest, that may contain positioning information. We treat that as a research hypothesis, not a pricing identity.
- The rate-normalized funding-adjusted return is a proxy for long-side mark-price return net of funding, not exact position-level PnL.
- The notional-weighted version uses oracle_price for funding flow and mark_price for PnL, matching Hyperliquid's settlement formula.
- Lag-1 autocorrelation of the funding-adjusted return is 0.71 to 0.99, but much of it reflects rolling-window overlap. First-difference autocorrelation is substantially lower.
- Pooled across the universe, the signal shows a weak mean-reversion relationship with forward returns. Part 2 shows why that average is incomplete.
Funding as an anchoring mechanism
A perpetual has no expiry. Funding acts as a continuous anchoring mechanism between the perpetual and its reference market. On Hyperliquid, the funding rate is:
Funding Rate (F) = Average Premium Index (P) + clamp(interest_rate - P, -0.0005, 0.0005)
The premium reflects the mark-oracle basis, meaning the mark price's premium or discount to the oracle. The interest component is fixed at 0.01% per 8 hours, and the venue settles funding once per hour.
The funding payment is:
payment = position_size × oracle_price × funding_rate
Research hypothesis: funding may contain positioning information. When longs pay shorts persistently, it can indicate directional skew or crowding in positioning. To count the accounts on each side directly, see the Hyperliquid long/short ratio guide. We test whether the funding-adjusted return predicts forward returns. We do not claim funding is a pricing identity for expected next-period returns.
Funding settlement on Hyperliquid
| parameter | value |
|---|---|
| Funding interval | 8-hour |
| Payout cadence | hourly |
| Funding notional | position_size × oracle_price × funding_rate |
| Direction (premium) | longs pay shorts when the perp trades rich |
| Direction (discount) | shorts pay longs when the perp trades cheap |
| 0xArchive 15m buckets | average hourly rate observed in each bucket, not a separate settlement |
0xArchive API: /v1/hyperliquid/funding/{symbol}, with start and end in Unix ms and interval ∈ {5m, 15m, 30m, 1h, 4h, 1d}.
The funding-adjusted return (rate-normalized)
Over a lookback window of W hours:
realized_return(t, W) = mark_price(t) / mark_price(t - W) - 1
cumulative_funding_paid(t, W) = sum of hourly funding settlements over [t-W, t]
funding_adjusted_return(t, W) = realized_return(t, W) - cumulative_funding_paid(t, W)
This is a rate-normalized proxy for the mark-price return of a long net of funding over [t-W, t]. It is not an exact account-level PnL identity: simple returns, changing notional, settlement timing, and compounding still matter.
Z-score against a 30-day rolling window:
funding_adjusted_return_z(t, W) = (funding_adjusted_return(t, W) - 30d rolling mean) / 30d rolling std

Why the unit matters
The funding-adjusted return above is rate-normalized. It treats 1 bps of carry-adjusted return as equivalent regardless of the underlying notional base. But funding accrues on notional. A 10 bps rate on $100M is not the same event as 10 bps on $10B.
0xArchive API: /v1/hyperliquid/openinterest/{symbol} returns open_interest, mark_price, oracle_price, plus market-state fields.
| fact | detail |
|---|---|
| What OI is | sum of outstanding matched open positions |
| What OI changes identify | nothing directional by themselves; every matched position has a long and a short |
The notional-weighted funding-adjusted signal
The reformulation changes the unit, not the logic. The notional-weighted funding flow uses oracle_price, matching Hyperliquid's settlement, while the unrealized PnL proxy uses mark_price, the return basis used in the backtest:
oracle_notional_oi(t) = open_interest(t) × oracle_price(t)
mark_notional_oi(t) = open_interest(t) × mark_price(t)
settlement_rate(t) = mean of the four completed 15m buckets, booked once hourly
funding_flow(t) = settlement_rate(t) × oracle_notional_oi(t)
cum_funding_flow(W) = sum of hourly funding events over W
unrealized_pnl_long(W) = mark_notional_oi(t-W) × realized_return(W)
funding_adjusted_pnl_proxy(W) = unrealized_pnl_long - cum_funding_flow
funding_adjusted_pnl_z(W) = (funding_adjusted_pnl_proxy - 30d rolling mean) / 30d rolling std

Data
BTC, ETH, and SOL on Hyperliquid for the persistence question; expanded to ten symbols (BTC/ETH/SOL/AVAX/LINK/DOGE/ARB/OP/NEAR/APT) for the notional-weighted analysis.
- Fixed sample from May 2023 through
2026-07-10T23:59:59.999Z. - Funding and open interest come from 0xArchive. Mark price and oracle price both come from the OI endpoint.
- Lookbacks
W ∈ {6, 12, 24, 48, 72, 168}hours; forward horizonsH ∈ {1, 4, 24, 72}hours.
Autocorrelation: what it does and doesn't tell us
The funding-adjusted return has high lag-1 autocorrelation, but much of this reflects rolling-window overlap. A 24-hour rolling statistic at time t and time t+1h share 23 of 24 input hours. The autocorrelation inflates with window length:
| symbol | W=6h | W=24h | W=72h | W=168h | diff(W=24h) |
|---|---|---|---|---|---|
| BTC | 0.71 | 0.92 | 0.97 | 0.99 | -0.19 |
| ETH | 0.79 | 0.94 | 0.98 | 0.99 | -0.09 |
| SOL | 0.82 | 0.95 | 0.98 | 0.99 | +0.003 |
The diff column shows autocorrelation of first differences, which removes most of the rolling-window overlap. Values near zero or modestly negative indicate that the incremental change is much less persistent than the rolling level. High raw autocorrelation is evidence of a slow-moving construction, but does not by itself establish independent predictive information.

What the pooled relationship hides
Pooled across the ten-symbol universe, corr(funding_adjusted_pnl_z, fwd_return) is commonly negative, roughly -0.02 to -0.12 across the relevant cells. The signal behaves as a weak mean-reversion signal.
A naive reader would conclude: long Q1, short Q5, exit on mean reversion to zero. That conclusion is incomplete in a way the rest of this series turns on.
Next: the pooled mean-reversion relationship is a composition effect from mixing market states. Conditioning on the signs of open-interest change and price change reveals state-dependent relationships.
Reproduce this analysis
The Hyperliquid historical market data overview covers the datasets used in this analysis. The route references below describe the requests.
The corrected execution uses a fixed publication cutoff and reconstructs one funding event per completed hour:
def hourly_settlement_rates(rate):
numeric = rate.sort_index()
hourly = numeric.resample("1h", label="left", closed="left")
mean_rate = hourly.mean().where(hourly.count() == 4)
mean_rate.index = mean_rate.index + pd.Timedelta(hours=1)
return mean_rate.reindex(numeric.index).fillna(0.0)
funding_settlement_rate = hourly_settlement_rates(df["funding_rate"])
funding_flow = funding_settlement_rate * df["open_interest"] * df["oracle_price"]
The publication sample is frozen at 2026-07-10T23:59:59.999Z.