Loading…
AfterFees

Methodology

Methodology

Updated 2026-10-29 13:25 UTC

Funding over your holding period

Each exchange quotes one period’s rate and its own settlement interval (1h, 4h, 8h). We do not convert everything to 8 hours: each leg is counted at its own real settlement times inside your holding period.

A settlement exactly “now” is not counted; only settlements strictly after now are.

Positive rate: longs pay shorts. The long leg earns when its rate is negative; the short leg earns when its rate is positive.

Funding is projected from the rate each leg is counted at (listed in every breakdown: usually today’s rate, or the pair’s own 7-day settled average when that is lower) at the current mark price. Actual settlement uses the mark price at that time. It is a projection, not a realised return.

funding_leg = Σ_settlements (−side) × rate × q_base × mark      side: long = +1, short = −1

Spot ↔ perp

Buy the asset on a spot market and short the same quantity as a perp, on the same or another exchange. Only the perp pays or receives funding, so the pair earns when the perp’s rate is positive (longs pay shorts). When the rate is negative, the reverse trade (borrow the coin, sell it spot, long the perp) is priced as described below.

Fees are the spot schedule on the spot leg (taken from the exchange’s own per-pair figure where it publishes one) and the perp schedule on the perp leg. Spot is bought outright: it ties up its full value, while the perp ties up its notional ÷ leverage.

Max size uses the perp’s open interest and both order books. History replay uses the perp’s settled rates.

Borrow spot ↔ perp (reverse carry)

When a perp’s funding is negative, longs are paid. Borrow the coin on a margin account, sell it on spot, and hold the same quantity long on the perp (same or another exchange). Offered only where the exchange publishes a borrow rate: Binance, OKX, Bybit, Gate and Bitget.

Borrow interest = notional × hourly rate × (holding hours + 1). The extra hour covers the first charge and hourly rounding. The hourly rate counted is the higher of the current rate and its 24-hour average; the perp’s funding is counted at the less favourable of the current rate and its 7-day settled average.

Capacity is the smallest of: the platform’s remaining lendable amount (where published), the per-account limit at VIP0, what the four order books can fill within your slippage budget, and the open-interest cap. A pool at its maximum rate counts as empty.

Not actionable when the coin cannot be borrowed, the pool is empty, the borrow rate is more than 3× its own 7-day average (the pool may be running dry), the quote is older than 15 minutes, or your size is above the per-account limit.

Capital: collateral for the loan at the assumed cross-margin leverage (3× by default: collateral = notional ÷ 2) plus the perp’s notional ÷ leverage. We show how far the coin can rise before the margin account is liquidated; when the perp is on another exchange its profit cannot top up that account.

net = funding_perp_long − interest − fees − slippage − carry      interest = N × max(rate_now, avg_24h) × (T + 1)

Execution cost

The cost of entering at market on one exchange: taker fee plus slippage from the mid price, walked through the live order book at $10k, $100k, $1M or your own size, long (asks) or short (bids).

Markets whose order book we do not stream are walked once an hour through a REST snapshot of the book (top 50 coins per exchange by volume), labelled with the snapshot’s age; snapshots older than two hours are not shown. Where an exchange publishes no usable book, the top of book is shown instead: half the bid-ask spread plus the taker fee, labelled “top”. Quote-based venues (Variational) show their own quotes at each size.

Medians over 1, 7 and 30 days come from one sample an hour (the average of long and short). They are kept in memory and restart with the server.

A pair’s full cost is each leg entered on one side and closed on the other: four taker fills.

cost_bp = taker_fee_bp + |VWAP(size) / mid − 1| × 10,000

Fixed vs floating (Pendle Boros)

Boros trades the funding of a named perp (for example Binance ETHUSDT) until a fixed date, in yield units (YU). Selling YU receives a fixed rate and pays the floating funding: with a perp short of the same size, the funding you receive is locked. Buying YU pays fixed and receives floating: it fixes what a perp long pays. The rate of the YU trade is the rate locked.

The rate is your fill: we walk the Boros order book (its AMM included) for your size, the way a market order would. Boros rejects taker fills too far from its mark, so only levels within its deviation limit are counted. Maker mode joins the best opposite quote instead: no taker fee, but no guarantee of a fill.

Boros charges its taker fee and its settlement fee pro rata to maturity, so both come off the rate one for one. The one-off market entrance fee (about $1) and one order’s gas are spread over your size and the time left. Time left is Boros’s own, counted from the last settlement. The book comes in 0.01% buckets, so every level is taken at its worse edge, except the best quote, which is exact.

Is locking worth it? We compare with the floating rate over the same length: every past window as long as the days left, the mean settled floating rate in each, and their median (term-matched). The win rate is the share of those windows the locked rate beat. 7- and 30-day averages are shown for comparison; when history is shorter than the term, the mean of all of it is used and flagged.

Capacity is the largest size whose locked rate still beats floating, capped by the book Boros will fill, the room under its open-interest cap, the perp’s own open-interest cap, and what the perp’s (and, for an income, the spot’s) live order book can take within half your slippage budget. A market is lockable only when its data is fresh, the perp is one we price, more than a day is left and your size fits.

Full lock-in: spot long, perp short and YU short of the same quantity, held to maturity. Net = notional × years left × net locked rate − the four spot and perp trades. Capital = spot + perp margin + Boros initial margin, where initial margin = kIM × size × max(time left, time floor) × max(|rate|, rate floor), Boros’s own formula.

Implied vs delivery basis: when a delivery future expires within a day of a Boros maturity, the future’s basis can be set against the Boros rate. If the basis is above the cost of fixing funding, short the future, long the perp and buy YU; if the locked income is above the basis, do the reverse.

K_net = fill(bids, N) − takerFee − settleFee − entry / (N × T)      K_cost = fill(asks, N) + takerFee + settleFee + entry / (N × T)

Matching the two legs

Both legs hold the same quantity of the underlying (q_base), so price moves cancel. Dollar notionals can differ slightly.

q_base is rounded down to a quantity both exchanges accept (the common step of their lot sizes). The share of your target that survives rounding is the fill ratio; under 50% the pair is not actionable.

Contracts quoted in multiples (1000PEPE) are converted to underlying units first.

q_base = floor(N / reference_mid / common_step) × common_step

Fees

Four taker trades: open long, open short, close long, close short. Each uses the exchange’s published taker fee for that instrument, or your own fee tier if you set one.

Where an exchange does not publish a separate fee table for stock and commodity perps, we use its standard perp fee and mark it “estimated” in the breakdown.

fee = Σ_4 trades  executed_notional × taker_fee

Maker (post-only) legs

By default every trade is a taker order. Pro users can choose which leg is filled as a maker order when opening and when closing: none, the long leg, the short leg, or both.

A maker leg is priced at the mid (we never count half the spread as profit), with no slippage and the exchange’s maker fee; a negative maker fee (rebate) is counted as it is. Where an exchange publishes no maker fee for that market, the taker fee is charged. Deliveries are never orders, so they keep their own fee.

A maker leg adds no order-book limit to max size; the other leg, open interest and, for the reverse carry, the borrow limits still apply. Maker fills are not guaranteed: place the other leg only after the maker leg has filled. Alerts and the daily brief keep counting taker fills.

maker leg: executed = q × mid, slippage = 0, fee = executed × maker_fee (unknown → taker_fee)

Your points and airdrop value

Many perp DEXs reward volume or open positions with points. AfterFees never estimates their value: you enter it per exchange, either as dollars per $1 million of volume or as an extra yearly percentage on the position held there.

Volume mode counts the opening and closing notional traded on that exchange (twice the leg’s notional); percentage mode counts the leg’s notional × your rate × the holding period. The result appears as a separate “net incl. points” figure; the default ranking never uses it.

points = Σ legs on venue v: 2 × notional ÷ 1,000,000 × X_v   or   notional × APR_v × hours ÷ 8760

Slippage from the live order book

Each of the four trades walks the live order book level by level for exactly q_base. Slippage is the distance between the volume-weighted fill price and the mid price.

Closing trades are estimated from today’s book on the opposite side, because tomorrow’s book is unknown. The breakdown labels them as estimates.

If any trade cannot be filled from the visible book, the pair is not actionable at your size.

Pairs whose order books we are not streaming are priced from the best bid and ask only. We show that figure only when the best bid and ask hold your whole size, where the half-spread is the exact slippage. Otherwise, or with no order book at all, we show no net, say why (for example “top of the book holds only $11”), and keep the pair off the board.

slippage = |VWAP − mid| × q_base     (summed over the 4 trades)

Net, annualised return and return on capital

Net is funding minus fees, slippage and the opportunity cost of the margin you tie up (zero unless you set one).

Spread APR annualises net against your size per side. Capital ROC annualises net against the margin actually tied up (notional ÷ leverage on both legs, a simplified estimate that excludes tiered margin).

We also show net if funding falls to 50% and 25% of today’s rates. That is a sensitivity, not a forecast.

net = funding − fees − slippage − carry

Breakeven

Breakeven is the first settlement at which accumulated funding covers all four trades’ fees and slippage. Settlements of both legs at the same time are combined first. If it takes longer than 30 days, we say so instead of showing a number.

Max size and “what fits”

Max size is the smaller of two caps: 1% of the thinner leg’s open interest (you can choose 3% or 10% under More settings), and the largest size whose four trades stay within your slippage budget (default 5 bp of one side’s size in total).

The search moves in whole quantity steps, because rounding makes the feasible range uneven. If either cap cannot be measured, max size is blank and the pair is not actionable.

When your size does not fit, the board recomputes the same pair at the size that does and shows that net.

Settled-rate replay and persistence

Replay applies the rates actually settled over the past 7 / 30 / 90 / 180 / 365 days to today’s position and orientation. It shows whether this spread has been paying, not what an executed trade earned. Ranges beyond what we store are fetched from the exchange when you open them; where an exchange keeps less history (OKX about 3 months, Gate 180 days), the page says how far back it reaches and every statistic covers that span only.

Persistence labels compare today’s spread with its 7- and 30-day averages: stable (within 0.5–2× of the average), fading (below half the 7-day average), one-off spike (above 3× the 7-day average, or three settlements made over 60% of the 30-day gain), volatile (no stable pattern, or turned positive only recently), new listing (a leg younger than 7 days).

Risk figures: max drawdown is the deepest fall of the cumulative net (settled funding at your size, with the four opening and closing trading costs charged on day one) from its previous high; negative days are UTC days whose settled spread summed below zero; flips count sign changes between daily sums, skipping days under 0.1 bp. The CSV export has one row per settlement.

Today’s rate or the last 7 days, whichever is lower

For perp ↔ perp and spot-long ↔ perp-short pairs we count two estimates of the funding over your holding period, for the whole pair in today’s orientation and sizes: one from today’s rates, and one from the funding the same pair actually settled over the last 7 days, per covered hour, times your holding period. Net, “actionable”, breakeven, “still positive at half funding” and the board order all use the lower of the two. Both are shown in the verification drawer, and the row says which one was used.

The pair as a whole, not leg by leg: taking each leg’s worse figure would build a combination that never happened and bury good pairs.

Less than 72 hours of settled history on the pair: the numbers use today’s rates but the row is not actionable (“history under 3 days”). If the same orientation lost money over the 7 days, the row is not actionable and says how much it lost. If a UTC day of the week went against (by at least 0.1 bp of your size) while the week as a whole paid, the row stays actionable but ranks after the rows that never flipped, marked “flipped X days”.

The reverse carry (borrowed spot), delivery futures and Boros keep their own rules described in their sections.

F_used = min( F_today , A7 × T )      A7 = Σ settled pair funding over 7 days ÷ covered hours

Stock, commodity and FX perps over weekends

Stock, index, commodity and FX perps (not tokenised gold such as XAUT or PAXG, which trades around the clock) often settle near zero while their underlying market is shut. Projecting that zero over 7 days would understate the pair, and projecting a weekday rate over a weekend would overstate it.

Each future settlement in your holding period is taken at the rate of its own session: while the market is open, today’s rate (or, if it is shut now, the leg’s average settled open-session rate over the last 7 days); during weekends and holidays, the leg’s average settled rate in those sessions over the last 14 days (none seen: zero, and the row says so). Weekday after-hours count as open: most exchanges keep quoting then. The 7-day comparison above then applies as usual.

While either leg’s underlying market is shut for the weekend or a holiday, the pair is not actionable (“look again at the open”); its numbers are still shown, so you can prepare.

Track record and its backfill

Live record: every day from 00:05 UTC the top 10 pairs on the board with an exact, positive, after-slippage net on live data are stored as the board showed them — actionable pairs and pairs held back only by size or the slippage budget, each marked; 7 days later the funding that actually settled is added up and the predicted cost taken off. Nothing is edited afterwards.

Backfill: the 90 days before (and alongside) the live record are rebuilt from history, using only what was public on each day at 00:05 UTC: each leg’s last settled rate, the pair’s settled 7 days and sessions as above, today’s VIP0 taker fees and a 5 bp slippage budget per leg (no historical order books exist). The universe is perp ↔ perp pairs on Binance, Bybit, OKX, Gate and Hyperliquid whose two legs each traded at least $2M the day before.

The two are always shown apart, each with its own hit rate. Known biases of the backfill: slippage is a budget, not measured; the universe is narrower than the live board; delisted contracts have no history, so there is a slight survivorship bias.

When a pair is “actionable”

All of these must hold at once: both legs are listed linear perps of the same market group, settled and margined in USDT, USDC or USD (non-USDT legs are converted at a live stablecoin rate, the conversion cost is deducted, no rate may be stale or more than 0.5% off its peg); both exchanges are calc-ready; funding data is under 30 seconds old and order books under 5 seconds; both books are exact; fees are known; the legs match within 1 bp of delta; at least half your size survives rounding; the funding schedule is known; not both legs at baseline; the gain does not rely mostly on a capped rate; the pair has at least 72 hours of settled history and did not lose money over the last 7 days; neither underlying market is shut for the weekend or a holiday; net is positive; every trade fills; your size is within max size; and your size’s slippage is within your budget.

If any data goes stale, the pair stops being actionable within 5 seconds and the row says why. A pair on the board that is not actionable this second stays in place; only its status changes.

Basis trades against delivery futures

Two structures, both on one exchange: spot ↔ dated (buy spot, short the delivery future) and perp ↔ dated (the perp against the delivery future, either direction). Both legs on one exchange means delivery and the closing trade happen at the same moment. Covered: USDT-margined delivery futures on Binance (current and next quarter), Bybit (every USDT future) and Gate, plus OKX USDⓈ-M futures, which are priced and settled in USD and margined in USDC: they are converted to USDT at the live rate and the conversion cost is deducted, as for USDC perps. Coin-margined futures and cross-exchange trades are covered in the next two sections.

You hold to delivery, so the holding period is the time to delivery and the position bar shows no holding choice. The basis is what you lock in at your fills: short-leg fill minus long-leg fill (VWAP through the book, both legs the same base quantity). Basis APR = that difference ÷ long fill × 365 ÷ days to delivery. Shown next to it: the same at mid prices, and the future against its index.

Perp funding to delivery (perp ↔ dated only) is counted two ways: the current quoted rate over every settlement until delivery, and the average actually settled over the last 30 days (needs at least 7 days of history) over the same hours. The headline uses the worse of the two; the breakdown shows both and what the net would be at half the funding.

Fees: opening both legs at taker, closing the non-delivered leg at taker (slippage estimated from the current book), and the delivery fee: Binance charges the taker fee, Bybit and Gate their listed delivery fee rate. Carry = capital tied up × your opportunity-cost rate × days ÷ 365; spot ties up its full notional, a futures leg notional ÷ leverage.

Max size is the smaller of 1% of the smaller open interest and the largest size whose three fills stay within your slippage budget. A row is actionable under the same freshness, depth, fee, delta and size rules as funding pairs, plus: the delivery rule and fee are known, delivery is at least 1 day away, a spot ↔ dated trade has a positive basis (we never short spot), and net to delivery is positive.

Not in the net figure: the perp’s premium over the index at delivery (shown now and as its last-30-day P5 / median / P95), the margin you need if the price moves 20% against the short leg, and the fact that spot and futures margin sit in different accounts. Closing before delivery can cost more: the basis only converges at delivery.

net = (fill_short − fill_long) × q + funding_to_delivery − fees − closing_slippage − carry
funding_to_delivery = min(quoted, settled_30d)      net_APR = net ÷ N × 365 ÷ days

Coin-margined futures and calendar spreads

Coin-margined (inverse) contracts have a fixed USD face per contract and settle in the coin: Binance COIN-M ($100 for BTC, $10 for others), Bybit inverse ($1), OKX coin-margined ($100) and Deribit ($10). Every figure is still shown in USDT: USD amounts convert at the live USD rate, coin amounts at today’s index. The breakdown also lists the amounts in coins.

Spot ↔ coin-margined future: buy Q coins and short n USD of the future, with Q equal to the coin value of the short at your fills. At delivery the position is worth exactly n USD whatever the price, so the result is locked: n × USD rate − spot cost − fees. The coins you buy are the margin (move them to the coin-margined account); equity in coins stays above maintenance, so the position cannot be liquidated.

Coin-margined perp ↔ future: same face on both legs, same exchange; never mixed with USDT perps (the two pay off differently on large moves). The gain is in coins and is valued at today’s index; perp funding is counted as for USDT pairs (worse of current and 30-day settled). The coin posted as margin moves with the price and is shown as a risk.

Calendar (forward lock): long the near future and short the far one on the same exchange and margin type, at least 7 days apart. At the near delivery you buy spot (estimated from today’s book) and hold it to the far delivery, which locks the spread between the two contracts for that window. APR is over the near-to-far window; the breakdown also gives it over the whole hold. Where today’s spread sits in its last 30 days is shown for reference only: a spread closed before the near delivery is not locked.

Delivery fees: Binance charges the taker fee, Bybit 0.05%, OKX 0.01% (all tiers); Deribit’s is not verified yet, so Deribit rows stay “watch” until it is.

D1 coin: value at delivery = [Q + n(1/S − 1/F)] × S = n (Q = n/F)
calendar: locked = q × (F_far − F_near) (USDT-margined) · n × (1/F_near − 1/F_far) coins (coin-margined)

Cross-exchange basis and same-day futures

Delivery futures are covered on Binance, Bybit, OKX, Gate and Deribit, plus Kraken (multi-collateral futures, settled in USD and converted to USDT at the live rate; inverse futures listed), KuCoin (coin-margined quarterly), HTX (coin-margined delivery) and BitMEX (switched on only where our server can reach it).

Perp ↔ future across two exchanges: the perp on one calc-ready exchange, the future on another, same coin and margin type. The maths and the funding rule are those of the same-exchange trade (the worse of the current rate and the 30-day settled average). Each exchange needs its own margin and there is no cross-margin offset: a move against one leg must be covered on that exchange even while the other leg gains.

Future ↔ future across two exchanges: two futures that deliver on the same UTC day, long the cheaper and short the dearer, both held to delivery. Net = the spread locked at your fills (both books walked at your size) − two opening taker fees − both delivery fees − the stablecoin conversion cost of a USD / USDC leg − carry. Coin-margined pairs lock the difference in coins (face ÷ long fill − face ÷ short fill) and value it at today’s index.

Each exchange settles its future to its own index, averaged over its own window. The two delivery prices can differ, and that difference lands in the result: the breakdown lists both settlement rules and the figure is not included in the net.

To keep the calculation small: only coins with futures on at least two exchanges, futures with at least $100k of open interest, the three deepest perps per coin (at least $1M of open interest), and at most 600 cross-exchange pairs. Delivery fees: Kraken charges the taker fee; KuCoin, HTX and Kraken inverse are not verified yet, so those rows stay “watch”.

D3: net = (fill_short − fill_long) × q − taker_long − taker_short − delivery_long − delivery_short − fx_conversion − carry
coin-margined D3: locked coins = n/F_long − n/F_short (valued at today's index)

CEX transfers (buy on one exchange, withdraw, sell on another)

A route counts only on a network both exchanges share: the same chain and the same contract address, never a ticker match (the same ticker often means a different token, and the same token can trade under different tickers). Denominations such as 1000× or 1M× tokens are normalised before prices are compared.

Real transfer (the default ranking): buy Q at the source walking its asks, withdraw (the withdrawal fee comes off the coins), sell what arrives walking the destination’s bids; both taker fees counted. Net % = proceeds ÷ cost − 1, per trip, not annualised. Pre-funded: buy and sell at the same moment with inventory already on both exchanges; one rebalance (the coin back and USDT the other way, on the cheapest shared network) is charged per trip.

Hedge (optional): short the coin’s perp on a calc-ready exchange while the coins are in transit; cost = two perp taker fees + opening and closing slippage + funding over the arrival time if shorts pay. The headline net excludes it unless you switch it on. Arrival times are estimates; the price can move by about σ(1 minute) × √minutes during the transfer.

Fail-closed: a route is executable only when the withdrawal and deposit are open on that network, wallet status is under 15 minutes old, both books are under 30 seconds old, the withdrawal fee is known and the net is positive. Anything missing or stale is “unverified”. A spread above 2% that exists only because one side is closed is listed under Traps, never ranked.

net% = VWAP_bid,B(Q − w) × (Q − w) × (1 − f_B) ÷ [VWAP_ask,A(Q) × Q × (1 + f_A)] − 1

CEX ↔ DEX

Tokens our exchanges list with a verified contract on Ethereum, BNB Chain, Base, Arbitrum or Solana are priced on-chain every minute (GeckoTerminal). Where the DEX price is more than 1% from the exchanges’ median mid, KyberSwap (EVM) or Jupiter (Solana) quote $1k, $5k and $10k in the profitable direction; quotes are kept a minute and at most about 30 are asked a minute.

Exchange → DEX: buy on the exchange at its book with the taker fee, pay its withdrawal fee on that chain, sell on the DEX at the aggregator’s output (price impact included), pay the swap gas. DEX → exchange: buy on the DEX, pay the swap gas and the gas of sending the token to the exchange’s deposit address (an ERC-20 transfer, about 65,000 gas at the quote’s gas price; Solana estimated at $0.01), sell on the exchange’s book with the taker fee. Net % = net ÷ amount; one trip, not annualised.

Executable only with the exchange’s network open in the needed direction and its status under 15 minutes old, the withdrawal fee known, a fresh exchange book (else the top of book is a reference only) and a quote under 3 minutes old. Ranked by the $10k net; all three sizes are free, the route, impact and gas split and a quote at your own amount are Pro.

Spread chart

Any two legs of a coin, as candles of (A − B) ÷ B. Book mids ((best bid + best ask) ÷ 2) are stored every minute for every market with a live book; before that, and for markets without one, the chart uses mark prices and says so (most exchanges smooth marks, so that is not a tradable spread). “Executable” is A’s best bid − B’s best ask, ÷ B’s best ask, where both mids exist.

Only the granularity the data supports is offered: 10-minute marks give 1-hour candles and up, minute data 1-minute candles. Beyond the stored minutes (35 days by default) hourly aggregates are used. Free: 1-hour candles and longer over 7 days; Pro: 1 minute to 1 day over a year, and 15-second captures from the live books (up to 20 pairs at a time, 6 hours each).

What we do not do

We never hold your funds or place orders. Account monitoring uses read-only keys only. We take no exchange referral fees, so rankings depend only on your net return.

The method behind every number on AfterFees is published; Pro opens each figure into its line-by-line calculation. Estimates from current data, not investment advice. We never hold funds or trade for you.