# Fees, volume and APR

All rates on rangebound are yearly and simple (not compounded). A window is 5m, 1h, 6h or 24h.

## Fee rates

Every pool has a **fee tier**, for example 0.10%. Part of each swap fee goes to the venue's protocol and funds, and the rest goes to LPs:

```
LP fee rate = fee tier × LP share        e.g. 0.10% × 84% = 0.084% on Raydium
```

Some Raydium pools charge a **dynamic surcharge** on top of the tier while the price is moving fast, up to 10% in total. rangebound reads the surcharge from the pool every cycle and uses two rates:

- **the last swap's rate**, to turn fees into volume,
- **the rate now**, which a new swap would pay, to estimate re-centring costs.

## Fees and volume

```
fees paid   = change in the pool's running fee counters, grossed up from the protocol share
volume      = fees paid ÷ fee rate
LP fees     = fees paid × LP share
```

Fees are exact. Volume depends on the fee rate, so on dynamic-fee pools during very fast markets it can be off by more than usual. See [Limitations](limitations.md).

## Pool-level rates

```
fee APR       = LP fees in the window ÷ TVL × (365 days ÷ window)
active APR    = fee APR × TVL ÷ active TVL
fees / TVL    = fees in the window ÷ TVL                 not annualised
vol / TVL     = volume in the window ÷ TVL
```

**Fee APR** spreads the fees over all deposited capital, as if liquidity were spread evenly. It is useful for comparing pools, not for predicting what a concentrated position earns.

**Active APR** spreads them only over liquidity whose range covers the price. It is closer to what an in-range LP earns, and usually several times higher than fee APR.

## What a range would have earned

For the planner, the width table and vol ratio, rangebound asks what a specific range would have earned: $10,000 over ±w, re-centred on the price as it moved. For every minute:

```
range fees = LP fees that minute × range liquidity ÷ (liquidity in range that minute + range liquidity)
```

and zero for minutes when the price was outside the range. The minute's fees are shared with **the liquidity actually in range at that minute**, not today's.

This matters. Tight LPs often follow the price, closing and reopening every few hours. Using today's liquidity for past minutes misses them, and on one busy pool overstated a tight range's fees by around 75%.

The minute results are added up and annualised.

## Net APR

```
net APR = range fee APR − LVR − re-centring costs − hurdle
```

The **hurdle** is the T-bill yield when measuring against cash, or zero when measuring against holding the same mix of tokens. LVR and re-centring costs are explained in [LVR and re-centring costs](lvr-and-recentring.md).

The headline net APR is at the width where it is highest, among ±0.5%, 1%, 2%, 5%, 10%, 25% and 50%.

> [!NOTE]
> Net APR is being reworked. [Vol ratio](../vol-ratio/README.md) answers the same underlying question, whether fees cover the risk, with fewer assumptions.

## Short windows

Annualising 5 minutes or 1 hour magnifies noise: one swap can make a pool read thousands of percent. Use short windows to spot bursts, and the 24-hour window, or seven days in vol ratio, to judge a pool.
