# Half of Uniswap LPs lose money. Here is how to check first.

> Over half of Uniswap v3 positions finish behind once impermanent loss is counted. The advertised APY cannot tell you that. Here is the number that can.

- Source: https://defiloops.com/blog/half-of-lps-lose-money
- Published: 2026-08-25
- Category: Strategy
- Tags: liquidity, impermanent-loss, backtesting, uniswap
- Author: DeFiLoops

---
[Research from Bancor and IntoTheBlock](https://cryptobriefing.com/half-uniswap-v3-liquidity-providers-underperform-holding-bancor-study/) followed about 17,000 wallets across 17
Uniswap v3 pools — 43% of the exchange's liquidity — for the first five months after
launch. Those pools earned **$199 million in fees and took $260 million in impermanent
loss**, leaving roughly half of the liquidity providers with negative returns.

The percentage moves depending on what you count: wallets or positions, every pair or only
the volatile ones. The direction does not move, and neither does the gap between the two
numbers.

Those figures get quoted a lot and argued about almost never, which is a shame, because
the interesting question is not whether they are true. It is why somebody would find out
*afterwards*.

## The advertised rate is answering a different question

A pool quotes an APY. That number is the last twenty-four hours, across the pool's entire
book, for liquidity spread everywhere.

Your position is not spread everywhere. It sits in a band. On any day the price is outside
that band it earns **nothing** — while the quoted rate carries on being quoted.

<Callout type="note" title="Three questions an advertised rate cannot answer">
  Which network. Which fee tier. Which range. Those are the decisions that determine what
  you actually collect, and the headline number is blind to all three.
</Callout>

Search for help with this and you will find calculators. A calculator takes the inputs you
already guessed and does arithmetic on them. It cannot tell you what a band would have
done, because it has no history to walk.

## What the number looks like when you do have the history

Here is a real run: recentre-on-exit, $100,000, one year, on the Ethereum USDC/WETH 0.05%
pool.

```
  in range        96.7% of days
  fee APR         57.9%
  net APR         57.1%   after gas and swap costs
  impermanent     -62.8%/yr
  kept            -5.7%/yr  fees after impermanent loss

  fees collected  $57,910
  impermanent     $-62,828
  total           -6.4%
```

<StatRow>
  <Stat value="57.9%" label="fee APR" note="The number people read as the result." />
  <Stat value="$-62,828" label="impermanent loss" />
  <Stat value="−6.4%" label="the actual outcome" accent />
</StatRow>

<Callout type="danger" title="Read that again">
  The fee APR is 57.9%. The position still finished **down 6.4%**. The fee figure is one
  side of a ledger and the other side was larger.
</Callout>

For completeness: simply holding the same two tokens over that window returned −11.5%, so
this position beat holding by five points. That is worth knowing and it is not the verdict.
The verdict is that you put in $100,000 and finished with less, in a year where the
headline number said 57.9%.

## In range comes first, and it decides everything else

The in-range figure leads the report for a reason: **every rate beneath it is computed
across the whole window regardless.**

A band that held the price 19% of the time earned nothing for the other 81%, and its fee
APR is still quoted over the full period — because that is what an APR is. Two positions
can advertise the same APR and have spent wildly different fractions of the year actually
working.

## The band decides the answer, and the best one is not obvious

Same pool, same size, same window — $100,000 in `ethereum|USDC/WETH|500`, January 2025 to
September 2026. Only the band changes:

| band | fees | in range | total |
| --- | --- | --- | --- |
| 1,200–5,000 | $27,144 | 99.8% | +16.3% |
| 2,000–4,200 | $33,496 | 65.9% | +20.1% |
| 2,400–3,400 | $39,449 | 35.5% | +27.2% |
| 2,800–3,200 | $37,044 | 12.6% | +21.1% |

A narrower band earns more **while it holds**, and holds for less of the window. The two
effects pull against each other, and **the best of these four is neither the widest nor the
tightest.**

You cannot reason your way to that third row. You can only measure it.

## Three findings that survive every test we have run

Measured across 2024–2026, on all three networks, and repeated with every answer because
they are the conclusions people most often reach the other way round.

<Steps>
  <Step title="One wide band beats several narrow ones, at the same capital">
    Splitting lost money at every division tested — 2, 3, 5, 10 and 20 bands, on every
    chain, on both assets. A narrow band sits near its own edge more often, and a position
    at its edge holds one asset and earns least.
  </Step>
  <Step title="Fee tier depends on the asset *and* the band, not the asset alone">
    On single wide bands, 0.05% beat 0.30% on BTC and lost to it on ETH — by about 13% each
    way. Narrow the band and it flips. Compare tiers within one band; across bands the
    comparison means nothing.
  </Step>
  <Step title="If a band is too large for the pool, spread across chains, not across ranges">
    Splitting the range does not reduce your share of any single pool. It only idles
    capital.
  </Step>
</Steps>

That second one is worth sitting with. "Use the 0.05% tier for stable pairs and 0.30% for
volatile ones" is standard advice, and it is a claim about the asset. The measurement says
the tier interacts with your band, which means the advice is answering a question you did
not ask.

## Defaults are real answers to different questions

If you backtest a ladder and do not say how many rungs, it runs at four:

| rungs | fees | in range |
| --- | --- | --- |
| 2 | $32,793 | 33.0% |
| 4 | $32,617 | 16.5% |
| 6 | $32,578 | 11.0% |
| 8 | $32,448 | 8.2% |

More rungs, less of your money working at any moment. A four-rung ladder runs at about a
quarter utilisation — which is the strategy's own claim, here measurable rather than
asserted.

## What to distrust, including in our own numbers

A backtest that never warns about itself is one to be suspicious of. Ours returns two
warnings that change how much the figures are worth:

<Spec rows={[
  ['The indexer priced none of this volume', 'Fees were rebuilt from the stable leg rather than read. An estimate, and labelled one.'],
  ['The protocol fee could not be read', 'The cut taken out of every fee is assumed. On a pool where that cut is 25%, assuming none overstates the result by a third.'],
  ['The strategy flatters itself', 'Recentre-on-exit reopens the band the day it goes out of range, so it is in range almost always BY CONSTRUCTION. The answer says so, and says what a single day of delay costs.'],
]} />

And size is an input, not a scale. Fees split by liquidity, so a large position earns a
share it could not earn twice. Past roughly a tenth of the pool, the answer describes a
pool your own deposit would have changed — and the tool tells you which fraction you are.

<Callout type="warn" title="We shipped a version of this that was wrong">
  Until 12 September 2026, those four band rows were **identical**. The band was accepted,
  sent, and then dropped by a service whose request did not declare it, so every answer was
  the default half-width — labelled with whichever range had been asked for.

  Nothing failed. Every figure looked reasonable. Only a comparison between two bands could
  reveal it, which is exactly why the table above has four rows and not one.
</Callout>

## The history underneath

41 pools across Ethereum, Base and Arbitrum, reaching back to 5 May 2021.

There is one copy of it. There used to be two — this system kept its own synced copy beside
the backtester's, and they drifted to 39 pools against 32, with 30 in common, because the
two syncs ran on different schedules against an indexer that backfills.

<Quote>
  Two copies of one history is not redundancy. It is two answers to the same question, and
  which one you see depends on which service you happened to ask.
</Quote>

A survey and a backtest of the same pool disagreeing about what it earned is not a defect
somebody would find. It is one they would believe.

## Ask before you commit

None of this spends anything. Of fifty-two tools, five move money and the rest only read.
Naming a pair and every band you are weighing costs one call, and the answer comes back in
two halves — the fee table, and then what the deposit was actually worth at the end.

<Callout type="note" title="Pass every band at once">
  Each additional range costs nothing extra in the same call, against a round trip per range
  otherwise. And a pool with no stored history comes back as **unread**, never as a pool
  that earned nothing — those two must never read the same way.
</Callout>

If you are about to provide liquidity, the honest order of operations is: measure the bands
you are considering, look at the total rather than the fee line, and only then decide
whether the position is worth opening.

Half the liquidity providers in that study did it the other way round.