Chapter 2 Quickstart
If you are new to Uniswap V3 (UniV3) liquidity provision (LP), please follow along as I walk you through the steps of setting up a UniV3 LP position. By the end of the chapter, you will successfully open your first LP position and know what metrics to monitor. But don’t expect to make money on it. Being profitable is the goal of later chapters.
If you are experienced, you can skip the mechanics part and start from section 2.2, where I explained how to calculate Fee APR
. It’s more nuanced than you might realize. Then in section 2.3, I showed how to calculate PnL
and APR
based on common sense, and they are different from the impermanent ones discussed in later chapters. Finally, I close this chapter with an introduction to the concept of Impermanent Loss without explicitly mentioning the term.
Let’s get started!
2.1 Open a Uniswap V3 LP position
Pick a cheap chain. Uniswap exists on at least nine chains: Ethereum, Arbitrum, Optimism, Polygon, Base, BNB, Avalance, Celo, and Blast. I went with Polygon in the example. Arbitrum, Optimism, and Base are also good choices.
Fund your wallet with $50 USD. In addition, have some gas token for the chain you chose. Buy $25 of USDC (or USDT) and $25 of ETH (or WETH). You don’t have to do $50, but definitely keep it less than $100. In my case, I put up $75.15 ($36.79 USDT + $38.36 WETH). You may wonder if WETH is same as ETH. The answer is YES for our purpse! WETH is Wrapped ETH and it’s 1-1 pegged to ETH. It was created because native ETH cannot be issued on chains other than Ethereum. Because WETH and ETH have equal value, people often use them interchangeably. For example, you will often hear me say
ETH-USDC
when it’s clearly written asWETH-USDC
on a DEX’s website.Go to the
Pool
tab of Uniswap’s website (https://app.uniswap.org/pool) and click on+ New Position
.If you bought ETH in step 2, don’t touch the left box under
Select Pair
since ETH is auto-selected by default. If you bought WETH, you want to select WETH for the left box. Then go to the right box and select either USDC or USDT, depending on what you prepared in step 2. For example, I bought 0.0232251 WETH and 36.668957 USDT in step 2, so I selected WETH and USDT.Choose
0.05%
fee tier. Liquidity providers of this pool get paid 0.05% of the trading volume for each ETH-USDC (or USDT) swap that is routed through this pool. In later chapters, I’ll show you how to use historical data to pick fee tiers that maximize yield. The0.05%
fee tier often works well for ETH-USDC (or USDT) pools.Set max and min prices at
current ETH price +/- 150
. For example, if ETH is at $1650, you want to set min price at $1500 and max price at $1800. Because I had you prepare equal valued ETH ($25) and stablecoin ($25) in step 2, this 50-50 equal-distant price range should allow you to send all the ($25) ETH and ($25) stablecoin to the pool.Click on
Preview
andAdd Liquidity
. But first, you may need to click on twoapprove
buttons to allow Uniswap to use your WETH and USDC (or USDT). When you open a UniV3 LP position, you can pay gas up to three times: twice for allowing Uniswap to “interact with” the two coins in your wallet and once for depositing the two coins into the pool.After your liquidity is added, you will see a page where you can
Collect fees
to claim the fees earned without removing liquidity.Remove Liquidity
to remove liquidity and claim fees at the same time. Gas saving, useful on Ethereum.Increase Liquidity
to add more capital to your position.
Notice the NFT on the left side of the screenshot shows a 6-digit ID, which also appears at the end of the URL. For example, ID 111222 corresponds to https://app.uniswap.org/pool/111222.
Now your LP position is opened, you can monitor it on Revert Finance. Simply take your NFT ID and construct the following URL:
https://revert.finance/uniswap-position/chain/nftid
For example, if you opened the position on base and your
nftid
is 111222, you could monitor its performance at https://revert.finance/uniswap-position/base/111222. Go ahead and visit the Revert Finance page of your position now. You will see some big red negative numbers. This is because your position is fresh and hasn’t earned any fees and Revert is subtracting gas cost from your PnL. Give it 30 minutes and the numbers will make sense.You can also look up all UniV3 LP positions of any EVM address on Revert Finance by constructing the following URL:
https://revert.finance/account/0x______________________
For example, https://revert.finance/account/0x1638d75b9ca2dbc33cabfcff80d7c5ae94f45124.
2.2 Monitor your position
Now that you’ve opened a balanced ETH-Stable position and it’s earning swap fees, what metrics should you monitor in order to decide when to close it? The balanced setup, 50% ETH + 50% Stables with min and max prices set equally apart from the current price, expresses the neutral stance that we don’t care how price moves and have no preference of owning more ETH or stables. So we should monitor fees earned and close the position when its earning power significantly drops. There’s a metric for that. It’s called Fee APR and defined as
- Fee APR = Fees Earned / Liquidity Provided, annualized.
For example, say you provided $50 of liquidity and the position earned $2 in 30 days. The fee APR would be $2 / $50 / 30 * 365 = 48.7%
. You can monitor your LP position’s Fee APR on revert finance. For example, the following screen shows the 50-50 ETH-USDT position I created. Let’s focus on the 4 red-boxed metrics:
pooled_assets
shows the current USD value of the liquidity provided.total_fees_usd
shows the current USD value of all fees earned.fee_apr
shows the annualized rate of return from fees.gas_costs
shows the total amount of gas spent from adding, increasing, and removing liquidity and collecting fees.
In my example, I opened the position by sending 36.669 USDT and 0.0232 WETH to the pool, which cost 0.02526 MATIC in gas. At the time of the screenshot, the tokens (42.6886 USDT + 0.0195 WETH) in the position were worth $75.44, and the position earned 10 cents of swap fees, which translated to a fee APR of 62.28%.
2.2.1 How to Calculate Fee APR
There are three ways to calculate fee APR, depending on which point in time you use for calculating the value of the liquidity provided:
- Fee APR = Fees Earned / Liquidity Value at position open.
- Fee APR = Fees Earned / Average Liquidity value between position open and now.
- Fee APR = Fees Earned / Current Liquidity Value.
Take a moment to convince yourself that all three formulas make sense, and remember to annualize the numbers. Formula 1 is the conventional way that you and I are used to. Formula 3 (or 2) is used by revert finance. I primarily use formula 1, but I also use formula 3 since it’s easier to look up current prices than historical ones. I don’t use formula 2 because it requires to track liquidity value continuously over time, but a simple version is to take the mid point between the liquidity values at open time and close time.
Let’s go through an example. Suppose on day 1, ZRO (LayerZero) price was $3.14
and ETH price was $3,504.43
. We opened a ZRO-ETH position by sending 246.0804499
ZRO and 0
ETH to a V3 pool. Our liquidity value was $3.14 * 246.0804499 = $772.69
.
After 81.3132
days, ZRO and ETH prices were $3.64
and $2,338.02
respectively. The position earned $166.93
and ended up with 0
ZRO and 0.28223846129
ETH. Our liquidity value became $2,338.02 * 0.28223846129 = $659.88
.
The simple average of the two liquidity values is ($772.69 + $659.88) / 2 = $716.29
.
The Fee APR of our position, calculated three ways, is:
- Fee APR =
$166.93 / $772.69
*365/81.3132
=96.98%
. - Fee APR =
$166.93 / $716.29
*365/81.3132
=104.61%
. - Fee APR =
$166.93 / $659.88
*365/81.3132
=113.55%
.
We use Fee APR mainly for comparing different pools or positions, so as long as we use the same formula for all positions that we are comparing, we will be fine. Its absolute value doesn’t matter as much as their relative values. On the other hand, if you use formula 1 for one position and formula 3 for another, you will be comparing apples to oranges, so don’t do it.
2.3 Close your position
Congratulations! You now opened your first UniV3 LP position and learned how to track its basic metrics, namely, gas, liquidity value (or pool assets value), fees earned, and fee APR. Now get busy with life and come back in a week to check your position. One of three scenarios will happen:
ETH price falls below the min price of your range. Your position has 100% ETH and stops earning fees.
ETH price is still in your price range. Your position has x% ETH and y% USDC (or USDT), where x and y are not 50 anymore. Your position still earns fees.
ETH price rises above the max price of your range. Your position has 100% USDC (or USDT) and stops earning fees.
Regardless which scenario happens, I want you to calculate the PnL and APR of your position:
- position PnL = Current Liquidity Value - Initial Liquidity Value + Fees Earned - Gas Cost.
- position APR = Position PnL / Initial Liquidity Value / Position Age (days) * 365.
Mathematically, these can be written as
- \(pPnL(t) = LV(t) - LV(t_0) + fees(t) - gas\), where \(LV\) stands for Liquidity Value.
- \(pAPR(t) = \frac{pPnL(t)}{LV(t_0)} * \frac{365}{days}\).
You can get Current Liquidity Value (pooled_assets
), Fees Earned (total_fees_usd
), and Gas Cost (gas_costs
) from revert finance. Initial Liquidity Value is just $50 if you followed my instruction. For example, if revert shows $51 for pooled_assets
, $0.2 for total_fees_usd
, and $0.01 for gas_costs
, your position PnL will be $51 - $50 + $0.2 - $0.01 = $1.19. If the position age is 14 days, your position APR will be $1.19 / $50 / 14 * 365 = 62.05%. On the other hand, if pooled_assets
is $49, your position PnL and APR will be -$0.81 and -42.24%.
If scenario 1 or 3 happens, go ahead close the position. Just click on the Remove Liquidity
button and move the slider to 100% and confirm. It will also claim any fees the position has earned. Click on the Collect fees
button if you want to collect fees without removing liquidity. But avoiding doing that on ETH mainnet because gas can be expensive.
If scenario 2 happens, do nothing as long as fee_apr > 20%
and close the position when fee_apr
falls below 20%. Why 20%? That’s the interest rate Anchor paid to UST (an algorithmic stable coin) deposits before Luna/UST went down in flames. Although it’s not sustainable for a lending protocol to keep paying 20% to stablecoin deposits, it’s easily doable with an ETH-Stablecoin LP, in all market conditions and over a long period of time, as we will see in later chapters.
2.4 What’s the alternative
I don’t remember much from my finance classes. But one thing the professor said stuck with me, and that is “always be asking what’s the alternative.” In our case, instead of putting $25 of ETH and $25 of USDC in a liquidity pool, we could’ve just held them in wallet. Had we done that, would we end up with more money? The answer is
- If ETH pumps,
hodl
wins. - IF ETH dumps,
LP
wins.
It is possible to have a positive PnL on your LP but do worse than holding spot in wallet. To see this, let’s consider a simple example. Alex spent $200 to buy 0.1 ETH at $2000 and sent it to an ETH-USDC liquidity pool with a price range of $2000 ~ $2060. In other words, Alex LP’ed ETH single-sided from the bottom. Say after 7 days, the LP earned $10 in fees and ETH price was at $2160. We can calculate the LP’s PnL as follows:
- day 0: Alex’s LP had 0.1 ETH and 0 USDC. It was worth $200.
- day 7: Alex’s LP had 0 ETH and 202.9778 USDC1. It was worth $202.9778.
- PnL = $202.9778 - $200 + $10 = $12.9778, assuming 0 gas.
If Alex had held the 0.1ETH in wallet instead, its value would’ve been $216 and Alex would’ve made $16, beating the LP.
Although Alex’s example was fictional, countless LPs shared the same fate and got “rekt” due to price appreciation. That’s why people say, “liquidity providers eat well when price ranges but get rekt when price pumps. And price always goes up over time.”
To that, I say, “sure, feel free to ignore liquidity provision if you have the eyes to spot market bottoms and tops, the balls and the capital to buy at distressed prices, the discipline to sell at elevated prices, and the heart to resist high yield while waiting for prices to go up. Otherwise, you may want to learn a thing or two about LP because it’s a great source of income.” This book presents strategies for collecting as much of that income while reducing the gap between hodl
value and LP
value. So keep on reading.
As price rose from $2000 to $2060, the LP’s ETH got converted to USDC at an average price of $2029.778 (\(\sqrt{2000 * 2060}\)).↩︎