Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
207 changes: 207 additions & 0 deletions benchmarks/perp-funding-stability.yml
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,207 @@
# OpenChainBench. Bench № 043

slug: perp-funding-stability
number: "043"
title: Perp DEX funding stability, 7-day stddev of ETH funding ranked
seo_title: "Perp DEX funding stability 2026: ETH funding stddev across 12 venues ranked"
seo_description: "Live 7-day standard deviation of ETH perpetual futures funding rate in bps across 12 major venues. Lower means more stable funding for carry traders."
subtitle: 7-day standard deviation of ETH funding rate, in basis points per 24h, across the Mobula funding cohort. Lower means funding stays in a tight band, the carry trader's preferred signal.
category: Trading
status: live
metric: 7d ETH funding stddev
unit: bps
higher_is_better: false

disclaimer: |
Stability is not directionality. A venue with persistently positive but tight-banded funding ranks better here than one that flips between positive and negative every settlement, even if the second venue offers better average carry. Read alongside perp-funding for direction and average level.

seo_intro: |
This benchmark ranks perp venues by how tightly their ETH funding
rate clusters over the trailing 7 days. Average funding tells you
which side gets paid; stability tells you how reliably. A venue
whose 24h hold cost wanders 15 bps in a week is harder to carry
trade than one that holds within 3 bps even if both average the
same number. The bench reads the same normalized series as
perp-funding (per-venue hold cost in bps per 24h) and exposes
stddev_over_time of that series on a 7 day window for ETH. The
Mobula funding cohort is 12 venues: Hyperliquid, Binance, Bybit,
OKX, dYdX v4, Paradex, Aster, Drift, Vertex, EdgeX, Extended and
Aevo. Lower is better.

abstract: |
The bench reuses the normalized 24h ETH funding series from
perp-funding and adds a 12-venue cohort: Hyperliquid, Binance,
Bybit, OKX, dYdX v4, Paradex, Aster, Drift, Vertex, EdgeX, Extended
and Aevo. For each venue it publishes the 7 day rolling standard
deviation of the ETH hold-24h gauge, in bps. Sign is preserved on
the underlying series; the ranking metric is the magnitude of the
swing, not its direction. Lower means the venue's funding stayed in
a tight band, the cleanest signal for funding-rate arbitrage and
basis trades. Cadence and freshness inherit from the upstream
funding scrape (60 second poll, 30 second Prom scrape).

methodology:
- "Source. Same upstream as perp-funding: each venue's public funding endpoint polled every 60 seconds, normalized to bps per hour and per 24h hold, sign preserved."
- "Metric. stddev_over_time(perp_venue_funding_24h_bps{asset=\"ETH\"}[7d]) per venue. The 7d window smooths intraday noise but reacts to regime shifts within a week."
- "Sign handling. The underlying series is signed (positive means longs pay). Stability measures the swing, so the ranking uses the unsigned stddev. Average direction and level are the perp-funding bench."
- "Cohort. 12 venues: Hyperliquid, Binance, Bybit, OKX, dYdX v4, Paradex, Aster on the CEX-plus-orderbook side; Drift, Vertex, EdgeX, Extended and Aevo on the onchain-perp side. All quote ETH funding with documented intervals."
- "Cadence. The upstream funding harness polls every 60 seconds; Prometheus scrapes every 30 seconds. The 7 day stddev refreshes on every scrape."
- "Failures. A venue whose upstream funding feed errors keeps its last gauge value; the perp_venue_health gauge drops to 0 and the leaderboard tags the row stale."
- "Reproducibility. The harness emits perp_venue_funding_24h_bps with labels venue and asset; the bench query is the stddev over 7d on that series with asset=ETH pinned."

findings:
- "{{best_name}} currently has the tightest ETH funding band at {{best_p50}} stddev (7d)."
- "{{name:hyperliquid}} sits at {{p50:hyperliquid}} stddev (7d) on ETH. Hourly settlement means rapid reaction to skew but tight clustering once the book is calm."
- "{{name:binance}} sits at {{p50:binance}} stddev (7d). Deepest book in the field anchors the rate."
- "Outliers on this bench are the venues to watch for funding arbitrage: a wider band means larger spreads to harvest against the cohort median."

source: https://github.com/ChainBench/OpenChainBench/tree/main/benchmarks/perp-funding-stability.yml

prometheus:
window: 24h
expected_freshness_seconds: 3600

faq:
- q: "What does this benchmark measure?"
a: "How tightly each venue's ETH funding rate clusters over the trailing 7 days. The ranking metric is the standard deviation of the normalized 24h hold cost in bps. Lower is better."
- q: "Why stddev instead of average?"
a: "Average funding is the perp-funding bench. This one ranks stability: a venue whose hold cost swings 20 bps in a week is harder to carry trade than one that holds within 3 bps. Both views matter."
- q: "Why 7d window?"
a: "Long enough to capture a full funding cycle (typically 8h settlements across 21 cycles), short enough to react to regime shifts within a week. 30d would smooth too much and hide stress windows."
- q: "Why only ETH?"
a: "ETH is the deepest perp pair on every venue in the cohort. BTC and SOL have noisier feeds on some smaller venues, which would contaminate the cross-venue ranking. BTC and SOL stability are companion panels rather than the headline."
- q: "Is a low stddev always good?"
a: "Low stddev means predictable funding, which is what most carry traders want. But a stable rate of 0 bps is less useful than a stable rate of negative 10 bps; combine this view with perp-funding to size the actual opportunity."

providers:
- slug: hyperliquid
name: Hyperliquid
tag: HyperBFT L1 perp DEX, hourly funding
formula: "stddev_over_time of perp_venue_funding_24h_bps{venue=\"hyperliquid\",asset=\"ETH\"} over a 7d window."
queries:
p50: stddev_over_time(perp_venue_funding_24h_bps{venue="hyperliquid",asset="ETH"}[7d])
mean: stddev_over_time(perp_venue_funding_24h_bps{venue="hyperliquid",asset="ETH"}[7d])
success: avg_over_time(perp_venue_health{venue="hyperliquid"}[24h])
sample_size: count_over_time(perp_venue_funding_24h_bps{venue="hyperliquid",asset="ETH"}[24h])
series: stddev_over_time(perp_venue_funding_24h_bps{venue="hyperliquid",asset="ETH"}[7d])

- slug: binance
name: Binance
tag: Largest CEX perp book, 8h funding
formula: "stddev_over_time of perp_venue_funding_24h_bps{venue=\"binance\",asset=\"ETH\"} over a 7d window."
queries:
p50: stddev_over_time(perp_venue_funding_24h_bps{venue="binance",asset="ETH"}[7d])
mean: stddev_over_time(perp_venue_funding_24h_bps{venue="binance",asset="ETH"}[7d])
success: avg_over_time(perp_venue_health{venue="binance"}[24h])
sample_size: count_over_time(perp_venue_funding_24h_bps{venue="binance",asset="ETH"}[24h])
series: stddev_over_time(perp_venue_funding_24h_bps{venue="binance",asset="ETH"}[7d])

- slug: bybit
name: Bybit
tag: USDT linear perps, interval per instrument
formula: "stddev_over_time of perp_venue_funding_24h_bps{venue=\"bybit\",asset=\"ETH\"} over a 7d window."
queries:
p50: stddev_over_time(perp_venue_funding_24h_bps{venue="bybit",asset="ETH"}[7d])
mean: stddev_over_time(perp_venue_funding_24h_bps{venue="bybit",asset="ETH"}[7d])
success: avg_over_time(perp_venue_health{venue="bybit"}[24h])
sample_size: count_over_time(perp_venue_funding_24h_bps{venue="bybit",asset="ETH"}[24h])
series: stddev_over_time(perp_venue_funding_24h_bps{venue="bybit",asset="ETH"}[7d])

- slug: okx
name: OKX
tag: USDT swaps, 8h funding
formula: "stddev_over_time of perp_venue_funding_24h_bps{venue=\"okx\",asset=\"ETH\"} over a 7d window."
queries:
p50: stddev_over_time(perp_venue_funding_24h_bps{venue="okx",asset="ETH"}[7d])
mean: stddev_over_time(perp_venue_funding_24h_bps{venue="okx",asset="ETH"}[7d])
success: avg_over_time(perp_venue_health{venue="okx"}[24h])
sample_size: count_over_time(perp_venue_funding_24h_bps{venue="okx",asset="ETH"}[24h])
series: stddev_over_time(perp_venue_funding_24h_bps{venue="okx",asset="ETH"}[7d])

- slug: dydx
name: dYdX v4
tag: Appchain order book perps, hourly funding
formula: "stddev_over_time of perp_venue_funding_24h_bps{venue=\"dydx\",asset=\"ETH\"} over a 7d window."
queries:
p50: stddev_over_time(perp_venue_funding_24h_bps{venue="dydx",asset="ETH"}[7d])
mean: stddev_over_time(perp_venue_funding_24h_bps{venue="dydx",asset="ETH"}[7d])
success: avg_over_time(perp_venue_health{venue="dydx"}[24h])
sample_size: count_over_time(perp_venue_funding_24h_bps{venue="dydx",asset="ETH"}[24h])
series: stddev_over_time(perp_venue_funding_24h_bps{venue="dydx",asset="ETH"}[7d])

- slug: paradex
name: Paradex
tag: Starknet L2 perps, 8h funding
formula: "stddev_over_time of perp_venue_funding_24h_bps{venue=\"paradex\",asset=\"ETH\"} over a 7d window."
queries:
p50: stddev_over_time(perp_venue_funding_24h_bps{venue="paradex",asset="ETH"}[7d])
mean: stddev_over_time(perp_venue_funding_24h_bps{venue="paradex",asset="ETH"}[7d])
success: avg_over_time(perp_venue_health{venue="paradex"}[24h])
sample_size: count_over_time(perp_venue_funding_24h_bps{venue="paradex",asset="ETH"}[24h])
series: stddev_over_time(perp_venue_funding_24h_bps{venue="paradex",asset="ETH"}[7d])

- slug: aster
name: Aster
tag: BNB Chain perps, Binance compatible API
formula: "stddev_over_time of perp_venue_funding_24h_bps{venue=\"aster\",asset=\"ETH\"} over a 7d window."
queries:
p50: stddev_over_time(perp_venue_funding_24h_bps{venue="aster",asset="ETH"}[7d])
mean: stddev_over_time(perp_venue_funding_24h_bps{venue="aster",asset="ETH"}[7d])
success: avg_over_time(perp_venue_health{venue="aster"}[24h])
sample_size: count_over_time(perp_venue_funding_24h_bps{venue="aster",asset="ETH"}[24h])
series: stddev_over_time(perp_venue_funding_24h_bps{venue="aster",asset="ETH"}[7d])

- slug: drift
name: Drift
tag: Solana perp DEX, hybrid AMM and orderbook
formula: "stddev_over_time of perp_venue_funding_24h_bps{venue=\"drift\",asset=\"ETH\"} over a 7d window."
queries:
p50: stddev_over_time(perp_venue_funding_24h_bps{venue="drift",asset="ETH"}[7d])
mean: stddev_over_time(perp_venue_funding_24h_bps{venue="drift",asset="ETH"}[7d])
success: avg_over_time(perp_venue_health{venue="drift"}[24h])
sample_size: count_over_time(perp_venue_funding_24h_bps{venue="drift",asset="ETH"}[24h])
series: stddev_over_time(perp_venue_funding_24h_bps{venue="drift",asset="ETH"}[7d])

- slug: vertex
name: Vertex
tag: Arbitrum perp and spot orderbook
formula: "stddev_over_time of perp_venue_funding_24h_bps{venue=\"vertex\",asset=\"ETH\"} over a 7d window."
queries:
p50: stddev_over_time(perp_venue_funding_24h_bps{venue="vertex",asset="ETH"}[7d])
mean: stddev_over_time(perp_venue_funding_24h_bps{venue="vertex",asset="ETH"}[7d])
success: avg_over_time(perp_venue_health{venue="vertex"}[24h])
sample_size: count_over_time(perp_venue_funding_24h_bps{venue="vertex",asset="ETH"}[24h])
series: stddev_over_time(perp_venue_funding_24h_bps{venue="vertex",asset="ETH"}[7d])

- slug: edgex
name: EdgeX
tag: zkSync perp DEX
formula: "stddev_over_time of perp_venue_funding_24h_bps{venue=\"edgex\",asset=\"ETH\"} over a 7d window."
queries:
p50: stddev_over_time(perp_venue_funding_24h_bps{venue="edgex",asset="ETH"}[7d])
mean: stddev_over_time(perp_venue_funding_24h_bps{venue="edgex",asset="ETH"}[7d])
success: avg_over_time(perp_venue_health{venue="edgex"}[24h])
sample_size: count_over_time(perp_venue_funding_24h_bps{venue="edgex",asset="ETH"}[24h])
series: stddev_over_time(perp_venue_funding_24h_bps{venue="edgex",asset="ETH"}[7d])

- slug: extended
name: Extended
tag: Starknet perp DEX (formerly X10)
formula: "stddev_over_time of perp_venue_funding_24h_bps{venue=\"extended\",asset=\"ETH\"} over a 7d window."
queries:
p50: stddev_over_time(perp_venue_funding_24h_bps{venue="extended",asset="ETH"}[7d])
mean: stddev_over_time(perp_venue_funding_24h_bps{venue="extended",asset="ETH"}[7d])
success: avg_over_time(perp_venue_health{venue="extended"}[24h])
sample_size: count_over_time(perp_venue_funding_24h_bps{venue="extended",asset="ETH"}[24h])
series: stddev_over_time(perp_venue_funding_24h_bps{venue="extended",asset="ETH"}[7d])

- slug: aevo
name: Aevo
tag: OP Stack perp DEX with options
formula: "stddev_over_time of perp_venue_funding_24h_bps{venue=\"aevo\",asset=\"ETH\"} over a 7d window."
queries:
p50: stddev_over_time(perp_venue_funding_24h_bps{venue="aevo",asset="ETH"}[7d])
mean: stddev_over_time(perp_venue_funding_24h_bps{venue="aevo",asset="ETH"}[7d])
success: avg_over_time(perp_venue_health{venue="aevo"}[24h])
sample_size: count_over_time(perp_venue_funding_24h_bps{venue="aevo",asset="ETH"}[24h])
series: stddev_over_time(perp_venue_funding_24h_bps{venue="aevo",asset="ETH"}[7d])
Loading
Loading