Product
Funding rates, normalised so you can compare them
Jordan Ellis
Senior Product Marketing Manager, CoinBeacon
A funding rate on one exchange and a funding rate on another are usually not the same unit. One settles every hour, one every four, one every eight — and almost every site that lists them side by side is quietly comparing three different things.
Three settlement clocks, one basis
A perpetual futures contract keeps its price near spot by making one side pay the other at fixed intervals. The rate is quoted per interval, and the interval is not standard across venues. A 0.01% rate that settles hourly is eight times the cost of a 0.01% rate that settles every eight hours, and putting those two numbers in one column is simply wrong.
So the normalisation happens at write time, not at read time. When a venue’s rate is stored, the hourly figure is computed and stored beside it — the native rate divided by that venue’s own interval — along with an 8-hour equivalent. Every comparison downstream reads the precomputed hourly number rather than re-deriving it, which means there is exactly one place where an interval can be wrong.
That matters because it has been wrong. A venue we had recorded as hourly was actually settling on 4- and 8-hour clocks, and roughly a million historical rows were written with an inflated hourly figure before it was caught. They cannot be corrected after the fact, because the true interval at write time was never stored. Any long-run funding average that includes that venue before the fix is overstated, and we would rather say so than let someone build on it.
Annualisation is deliberately naive: the current hourly rate, multiplied by 8,760. No compounding, no smoothing. It is the current imbalance extrapolated flat for a year, and it almost never holds — which is why a four-figure APR should be read as a signal that something is badly one-sided, not as a return.

The spread is just max minus min
Once every venue is on one basis, the cross-venue spread is almost embarrassingly simple. For each coin, find the venue paying the most and the venue paying the least, subtract, and drop the row if the result is not positive. The venue with the most positive rate is where a short receives funding; the most negative is where a long does.
The simplicity is also the problem. Because the calculation is a maximum minus a minimum, it is fully determined by two numbers — so one bad leg does not skew the row, it invents the row.
How a venue reporting zero invented a 972% row
Some venues list a book they do not actually fund. Asked for a rate, they answer 0.00000000. That is not an error and not a null — it stores as a genuine zero, and a genuine zero is a very competitive minimum. Every hour, those books were setting the floor and manufacturing spreads out of nothing.
The fix took two layers. One venue exposes an authoritative signal that a book has no funding schedule at all, and that covers several dozen of its own symbols — but it cannot be generalised, because no other venue publishes it. The general case is a nightly job that looks back thirty days per book and marks the ones that have never printed a non-zero rate.
Three of those thresholds were argued from data rather than chosen, and they are the part worth stealing if you are building something similar:
- The window is thirty days, not seven. Over seven days, two books read as permanently zero — and inside thirty days they peak above 1.5%. A short window would have deleted two genuinely top-ranked rows.
- The test is strict equality, never a percentage. One book is 726 of 728 samples zero — 99.73% — with a real rate three days ago. Any “95% or more” rule discards it. It has to be every single sample.
- A second rule catches books that stopped. Strict equality protects a book that used to fund and no longer does — so a separate clause marks anything that has not printed a non-zero rate in seven days while still advertising a next funding time. One such book alone was manufacturing a 972% APR row that ranked first on the board after the first fix shipped.
Both readers of that deny-list fail open. If the job has not run, the board renders exactly as it did before the fix and logs a warning, rather than blanking itself. That is the right failure mode for a read path, and it does mean the filter is not guaranteed to be active — which is the sort of thing you only find out by checking, so we check.
What the funding alerts actually watch
Four kinds, all evaluated on the same one-minute tick. A threshold alert is a plain comparison. A spread alert filters the same max-minus-min output by an APR floor. A periodic alert has no trigger condition at all — it is a scheduled read-out.
The spike alert is the one with real thought in it. It compares the current rate against the rate from N minutes ago, and its directions are expressed in trader language so you never have to reason about the sign: longs crowding, shorts crowding, longs cooling, shorts cooling. “Cooling” is the case people get wrong — it means the magnitude shrank toward zero without flipping sign, which is a different event from a reversal and deserves a different word.
What we are not claiming
- Nothing here is real-time. Every layer is polled — a one-minute ingest, a cache, a page memo, a client interval. A number on our board can be two to three minutes old, and the exchange’s own page is always fresher.
- There is no open interest on this board. None. It exists elsewhere in the product as a 30-day, single-venue proxy for the liquidation chart, and it is not on any funding surface. “Crowding” here is derived from funding rates, not from OI.
- The venue count on our other pages is out of date. Several still say eight. The code has shipped nine since August. Two of the nine are thin — one supplies two books, and one served nothing at all on the stack these figures were read from — so treat the headline count as the weakest number on the page.
- A handful of spread rows are not really cross-venue. Where one exchange lists both a USDT and a USDC book for the same coin, both legs can land on that exchange and the row is a quote-currency spread wearing a cross-venue label. The APRs are small, but the delta-neutral framing is not executable on them. Ours to fix.
- There is no persistence board, and there is not going to be one soon. We built one and killed it. Across four consecutive weeks only two coins stayed on a 25-row board the whole time, while sixty-six passed through it. A page claiming a coin’s spread stays reliably wide would be contradicted by its own next refresh.
What is left after all those subtractions is still the thing worth using: every venue we can reach, on one basis, with the arithmetic written down. That is a smaller claim than the one we started drafting, and it has the advantage of being true.