How to Calculate your Price Range on Uniswap v3
How do you LP on Uni v3 with a ±% range? E.g. if you wanted ±30% should you do:
or
Let's find out! 👇
The upper price is the same since . But what about the lower price? Should it be 70% or 76.9%? ()
It turns out that only one of these is correct! Let's analyze.
- Pool: ETH-USDC
- Price: $1,528
- Our capital: split evenly (1 ETH and 1,528 USDC)
Let's try method 1 for a ±30% range: LP between 70% ($1,069) and 130% ($1,986).
Spoiler alert: we can’t! When we go to Uniswap it won’t let us LP all our capital. In fact, it will only let us deposit 0.75 ETH. That's of our ETH not earning any yield!
Now let's try method 2.
Since and , we LP between 76.9% (~$1,176) and 130% ($1,986).
Uniswap lets us deposit all our capital. Success!
So why is the lower range rather than ?
It turns out that we have to follow the equation:
E.g. if the lower range is of P, then P must be of the upper range. See @atiselsts paper (3.2.2) for more here.
This seems unintuitive 🤔 Why can’t we simply do ±30% of P?
The answer is that we are working with tick math, which involves exponents. So LP ranges are linear in “tick space”, but non-linear in “price space”. There is a direct mapping between ticks and prices in Uni v3:
A price of $1,528 corresponds to tick 73,325 (since ).
If we LP on tick 73,325 with ±2,620 ticks, we get:
Key Insights:
- The math is ±ticks, not ±%. This generalizes to any LP range.
- For any LP Strategy of width ±X% (we used X = 30%), the proper price range to fully utilize capital is:
Caveats/Questions:
- Don’t forget to leave some tokens to pay for gas (e.g. ETH on Ethereum, MATIC on Polygon).
- How well do ±X% LP strategies perform?
- What is a good X to pick?
Disclaimer: This content is for educational purposes only and should not be relied upon as financial advice.