Skip to main content
Research9 min readData as of 2026-07-18Updated

90 Days of Hourly Funding Across 201 Perpetual Markets: What Delta-Neutral Carry Actually Pays

An on-chain data case study: pulling 2,157 hours of funding history for every market on a perp DEX, computing realized funding-capture APY, and finding that the highest yields cluster precisely where the hedge is hardest to construct.

Summary

Pulling 90 days of hourly funding for all 201 markets on a perpetual DEX — 2,157 hours each, 149 markets with full history — shows there is no guaranteed funding yield: funding flips sign, and the majors pay only 1.4–4.5% annualized while being positive just 60–73% of hours. The median market pays around 7%. The genuinely high payers, at 30–111% annualized, cluster in equity perps, commodities, and thin-spot small caps — precisely the markets where a delta-neutral hedge is hardest to hold. The yield is compensation for hedge risk, not an inefficiency.

PythonREST APIsCSVstatistics

The question and the sign convention

A delta-neutral funding capture trade is simple to state: short the perpetual, hold the spot, collect funding when longs pay shorts. The question 'what does that actually yield?' is usually answered with a screenshot of a current funding rate, which is close to meaningless — funding is hourly, it flips sign, and a single reading tells you nothing about realized carry.

Before any of the data work, the sign convention has to be nailed down, because getting it backwards inverts every conclusion silently. The API reports a rate plus a direction field; a direction of 'long' means longs pay shorts, which is the positive standard convention and the side a short-perp plus long-spot position earns. Normalizing that to one signed number per hour is the first transformation, and it is written down in the script's docstring rather than left implicit.

for f in data.get("fundings", []):
    rate = float(f["rate"])                       # % per hour
    # Normalize to: positive == the short-perp side earns.
    rates[f["timestamp"]] = rate if f["direction"] == "long" else -rate

Fetching 2,157 hours across 201 markets

The endpoint caps a request at 720 hourly points, so 90 days requires three windowed calls per market, walking backwards in fixed 720-hour strides. Keying results into a dict by timestamp rather than appending to a list makes the windows idempotent — overlapping ranges deduplicate themselves, and a retried window cannot double-count.

  • Three 720-hour windows per market, 201 markets, with a short sleep between calls — the full crawl runs in about four minutes against a public, keyless endpoint.
  • Markets with under a week of history are recorded with their hour count and skipped for statistics rather than dropped, so the coverage gap is visible in the output. 149 of 201 had full history.
  • Retries with escalating backoff, returning an empty dict on persistent failure rather than raising — a single dead market should not kill a 201-market crawl.
  • Everything writes to one CSV with per-market mean rate, annualized APY, share of positive hours, worst hour, best hour, and standard deviation. The distribution columns are what make the result interpretable; the APY alone is not.

That last point is the analytical core. Annualizing a mean hourly rate produces a headline number, but 'positive 60% of hours' and 'positive 100% of hours' at the same APY are completely different trades. Carrying the share of positive hours and the worst single hour alongside the APY is what turns a yield table into a risk table.

The headline result

There is no guaranteed funding yield. Ninety-day realized figures, before costs:

MarketRealized APYHours positiveWorst hour
BTC2.4%60–73%negative
ETH4.5%60–73%negative
SOL1.4%60–73%negative
Median of 149 full-history markets~7%
Consistently-positive basket15–30%97–100%near zero
Highest payer (equity perp)111.0%84%−0.24%/hr

The majors are the headline disappointment: 1.4% to 4.5% annualized, positive only 60–73% of hours, which does not justify the operational risk of running a hedged position. Exactly two markets in the entire set never had a single negative hour across 2,157 hours — their worst hour was still positive — and those paid roughly 16% and 19%.

Why the high yields are where they are

Sorting by APY produces a list that looks like free money and is not. The top payers were equity perps tracking Korean-listed semiconductor and industrial names at 37–111%, a uranium ETF proxy at 71%, natural gas at 34%, and a set of thin-spot small caps at 28–50%.

Every one of those is a market where the hedge is structurally hard. Equity perps trade 24/7 while their underlying exchange is open roughly six and a half hours a day — you carry unhedged overnight and weekend gap risk, and a single 10% gap erases months of carry. Commodities require futures with basis and roll complexity. Thin-spot names have no liquid venue to hold the other leg. Longs pay a premium precisely because arbitrageurs cannot easily compress it.

Stated as a principle: the funding is compensation for hedge risk, not an inefficiency. Any screen that ranks by yield without a hedgeability column is ranking by how hard the trade is to execute — which is exactly backwards.

So the output carries a hedgeability assessment per market alongside the yield: whether a liquid spot venue exists, whether market hours align, and what the custody situation looks like. Filtering to genuinely hedgeable crypto names collapses the attractive set to a basket yielding roughly 18–25% gross, positive at least 97% of hours — before round-trip slippage and fees of roughly 0.1–0.2% per rotation, spot custody cost, and decay as a name normalizes.

What this generalizes to

  • Realized beats quoted. A current funding rate is one sample from a distribution; 2,157 samples with a positive-hour share and a worst case is a description of the trade.
  • Carry the distribution, not just the mean. Mean rate alone cannot distinguish a steady payer from one that alternates violently around the same average.
  • Rank by the constraint, not the reward. A yield table without an executability column systematically promotes the least executable rows to the top.
  • Ninety-day realized is not a forward guarantee — funding regimes decay as capital arrives. The script is idempotent and cheap to re-run, so the correct cadence is monthly rather than trusting a stale table.
  • Write the sign convention into the code as documentation. In any signed-rate analysis, a convention error is invisible in the output and inverts the conclusion.

Frequently asked questions

What is funding-capture or basis trading in perps?
Holding offsetting positions — short the perpetual, long the spot — so price movement nets out and the position earns the funding payments that longs make to shorts. It is delta-neutral in principle; in practice the residual risks are hedge quality, custody, venue solvency, and funding flipping sign.
What funding APY can you actually earn on major crypto?
Far less than most estimates suggest. Over this 90-day window, BTC paid 2.4%, ETH 4.5%, and SOL 1.4% annualized, and each was positive only 60–73% of hours. The median across all 149 full-history markets was around 7%. Sustained high yields existed only where hedging was structurally difficult.
Why do equity perpetuals pay such high funding?
Because the underlying trades only about six and a half hours a day while the perp trades continuously, so no arbitrageur can hold a clean hedge through overnight and weekend gaps. Longs pay a large premium for exposure nobody can cheaply offset — 37% to 111% annualized in this dataset, with unhedged gap risk as the reason.
Is realized funding APY a forward-looking estimate?
No. It is a description of what already happened. Funding regimes decay as capital notices them, and several names in the top of this table are precisely the kind that normalize. The analysis is worth re-running monthly rather than treating any single snapshot as a rate you can plan around.

Building something like this?

I'm Harsh Mittal — I build production systems across Web3, AI, and financial infrastructure: smart contracts and DeFi protocols, RAG pipelines and LLM agents, market data infrastructure, and the interfaces on top of them. If this is the kind of problem you're working on, I can help you ship it.