Most of what we publish at The Cardano Record comes from our own cardano-db-sync node. This segment doesn't. Strike Finance is Cardano's perpetuals venue, and the numbers that describe how well it works as a market (volume, spread, funding, how it prices against other exchanges) aren't something you can read cleanly out of ledger tables. So this post covers a different kind of pipeline: one that reads off-chain feeds, checks how fresh each one is, and decides when to stay quiet.

Some definitions first. A perpetual is a futures contract with no expiry. A funding rate is the periodic payment between longs and shorts that keeps the perpetual's price close to the underlying asset. A basis point (bps) is a hundredth of a percent.

Why funding alone wasn't enough

We already aired Strike's funding rates from a module called sources/perps.py. Its own docstring names the limitation: the feed carries the rate but no open interest or volume. It shows what a position costs, not how much money is behind it. A rate on a market nobody trades is noise.

So we added sources/strike_market.py, which brings in size and venue quality. Strike doesn't publish any of these as history:

  • 24-hour traded volume per market, fetched live from Strike's public ticker.
  • Quoted bid/ask spread and maker markout, computed from a trade tape that another job on the same box saves every 30 minutes.
  • The gap between Strike's mark price and the same contract on OKX and Hyperliquid, from a monitor that runs every 20 minutes.

The sign convention, written next to the code

The funding monitor's convention was checked against its source rather than assumed: positive funding means longs pay shorts. That gives two cases:

  • funding > 0: shorts receive, longs pay, and the long side is crowded
  • funding < 0: longs receive, shorts pay, and the short side is crowded

If you get this backwards, every sentence in the segment inverts. The convention is written in the module's docstring next to the code that depends on it, and each market in the output carries both a receive_side and a crowded_side, so whoever reads the output doesn't have to re-derive it. A rate of exactly zero is recorded as flat, with neither side crowded. In this snapshot, 7 markets had longs receiving, 6 had shorts receiving, and 18 were flat.

Markout: does resting liquidity pay?

A quoted spread tells you what a maker could capture in principle. Markout is the more honest measure. For each filled resting order, it measures how far the price moved against that maker 1, 5 and 30 minutes later. If the price consistently moves against makers after they're filled, the spread is paying for losses rather than profit. We take the tape, find maker fills, and measure the price at each horizon.

We report the fill count and the hours the tape covers next to every markout. A markout from a few thousand fills over six weeks isn't the same strength of evidence as one from tens of thousands of fills over two weeks, and the reader should be able to see which one they're looking at.

Staleness is a hard gate

Every input here is a file written by another cron job, which means any of them can go cold without warning. The pipeline doesn't fetch these files itself, so it checks their age before using them:

  • The cross-venue file is dropped if it's older than 90 minutes.
  • The markout report is dropped if it's older than 36 hours.
  • The funding feed is dropped if it's older than three hours. The monitor runs hourly.

When something is dropped, the segment says which input is missing. It never quietly reuses an old figure. In this snapshot the cross-venue file was 11 minutes old, the markout report 22.2 hours, and the funding feed 2.5 minutes, so all three passed.

Traps

  • Two feeds, two clocks. The cross-venue file and the funding feed both report Strike's ADA funding, and they don't agree exactly: 42.74% against 42.97% annualised. That isn't a bug. They're sampled minutes apart. We publish each figure with its own source and age rather than averaging them or picking one silently. The market counts differ for the same reason: 29 markets in the ticker and 31 in the funding monitor.
  • Annualised doesn't mean earned. An annualised funding rate is the current rate scaled to a year. It describes the cost at this moment, and nobody should read it as a yield. Our editorial rules forbid quoting a yield without its capacity, and this feed has no capacity data at all.
  • No size in the funding feed. The only size-like filter is the monitor's notable flag, and we use it. Volume from the ticker partly fills the gap, but it's Strike's own number, and there's no second source to cross-check it against today.
  • Thin markets look dramatic. NIGHT-USD showed 189.54% annualised funding and a 135.2 bps spread. Its markout came from 3,828 fills over 1,050.8 hours. ADA-USD's came from 40,930 fills over 354.6 hours. The NIGHT figures are real measurements of a much thinner market.
  • A gap is a measurement, not a trade. The segment states what each venue measured. It never says a gap or a markout is an opportunity. Fees, latency and capacity all sit between a printed gap and anything you could act on, and we measure none of them.

Results

Data as of 2026-10-12 12:17 UTC. The share percentage is the pipeline's own. Dollar figures are rounded.

Measure Value
Strike markets (ticker) 29
24h volume, all markets $4,477,948
24h volume, BTC-USD $1,576,202
24h volume, ADA-USD $289,123 (6.46%)
ADA funding, Strike vs OKX (annualised) 42.74% vs 10.95%
ADA gap vs OKX / Hyperliquid 7.18 bps / 1.2 bps
Median absolute gap vs OKX 5.96 bps
ADA maker spread 4.02 bps
ADA markout 1m / 5m / 30m 0.24 / 1.66 / 2.4 bps
ADA maker sample 40,930 fills over 354.6 hours
Funding receive side: long / short / flat 7 / 6 / 18

Our live Strike Finance dashboard (volume, cross-venue price gaps, funding): https://cardanorecord.com/strike.html

Disclosure: we make a daily data show about Cardano (The Cardano Record on YouTube), and this is one of its segments.