How to make 100%+ returns using Uniswap v3 Liquidity Pools

Swiss
14 min readSep 25, 2021

Did you know that, if you play your cards right, you can earn far more in the v3 pools of Uniswap, than in the v2 pools? Annualised returns in the 100s of percent are possible. If you tweak it right, you may even achieve returns above 1000% p.a. Below I am going to take you on a walk-through as I try to achieve a high return of at least 100% p.a.

There are hundred’s of Uniswap v3 pools you can choose from. How do you choose the best ones?

You have a large choice of Uniswap v3 Pools to choose from

By the end of this blog I will have followed my own instructions, and you will see how it worked out in practice. Will I exceed that 100% p.a. return? Read-on to find out. I’m going to do this in real-time, as I write this blog. No cheating. I don’t know for sure that I will succeed, but I am at least 60% confident I will get there. I have done it several times before. You can follow along the exact steps I took, and see if you can get a better return than me.

Fair warning for Noobs

This blog is intended for experienced users. If you have never put assets into a liquidity pool, or don’t understand the difference between Uniswap’s v2 and v3 pools, then maybe you want to read a beginner’s guide to Uniswap pools. On the other hand, if you are a fast learner, you will understand everything below.

Not financial advice

Nothing in this blog should be taken as financial advice. I am not your financial advisor. I am not your nanny state. Nobody is going to protect you if you screw up and lose it all. The prices of digital assets, go up and down very fast. The percentage changes in a single day can be huge. You can easily and quickly lose 100% of your investment. Nothing mentioned in this blog is likely to perform according to my expectations. The complete opposite might happen. Consult a financial advisor before you do anything and listen to your spouse (they always know best what you shouldn’t do). Only read-on if you are prepared to lose 100% of your investment.

Different tokens pairs can have different returns

When you look at all the v3 pairs available, you will be presented with 27 pages of pools and statistics which looks something like this:

The 10 largest Uniswap v3 Pools

Skill and guesswork are needed.

You need to pick the right pairs. If you want to maximise your returns, you need to examine all the available pairs. That takes time. Then you are going to need to use both skill and guesswork in setting the parameters to optimise the returns according your objectives.

How to choose the right token pair (for you)

Eliminate all scam and meme coins

There are around 270 pairs. You won’t have time to study them all. As a first step, I would eliminate all pairs of coins you have not heard of. Don’t include any suspected meme or scam coins, even if the return seems high.

High Return Pairs

Firstly I want to draw up a short-list of pairs which have relatively high trading volume relative to the Total Value Locked (TVL). This will tell me which token pairs are likely to have a good return.

Draw up a short-list and calculate the return for each pair.

Here is my short-list:

Average annual historical fee returns based on the previous 7 days volume:

DAI-ETH (0.3%) 22.7%
GET-ETH (1.0%)123.2%
LINK-ETH (0.3%) 34.8%
MATIC-ETH (0.3%) 26.4%
MKR-ETH (0.3%) 2.9%
UNI-ETH (0.30%) 10.1%
USDC-ETH (0.05%) 54.2%
USDT-ETH (0.05%) 86.6%
WBTC-ETH (0.05%) 21.4%
WBTC-renBTC (0.05%) 1.9%

I used the formula: “Volume_7d_$ x (365/7) / TVL” to calculate the annualised return.

Average returns can be improved upon

Set the parameters right, and your returns will be much higher than the average.

Experiment: Can I make 100%+ p.a. return?

I am going to try to do this using the Token GET (GET Protocol) which you can see on my short-list above.

Why GET?

The GET-ETH pair has a number of the features I am looking for — small pool size and relatively high traded volume. It’s not a scam or meme coin. It is in daily use.

Small pool size

I am looking for a token where the Total Value Locked is small. In other words, my addition to a small pool will earn me a larger share of the transaction fees. GET meets that requirement.

GET Protocol Tokens

GET is used in pop-concert tickets to prevent scalping and ticket fraud. It has been around for 4 or 5 years and is still going strong. There are regular blogs from the developer team. There are lots of current developments going on. There’s an active and loyal community.

GET seems like Good Value

It’s a small-cap token, with a fixed, fully issued, supply. The small size means that it could move fast. Right now, the price of the token is less than a third of its recent peak. I think the potential is for the token to move up. That’s important. I want to pair my Ethereum with a token which has good prospects to rise.

I started by using some of my Ethereum (about 16 ETH) to buy GET. I bought the GET gradually in small sizes to try and get an average price over several weeks. I now have over 18'000 GET in one of my wallets. It’s not my only holding in GET. This is just the holding I will use to earn a little extra income via a liquidity pool.

Maximising the Return

Let’s see how I can use my skill to make a good return by putting some GET and ETH into a pool. You can apply the below techniques to any coin that you want to put in a pool. I am just using GET because it seems like a really good choice to me. You may find a better choice.

Trading Volume:

The more other people trade, the more fees you will earn. I can immediately see that GET has had relatively good volume in the last 7 days, compared to many other tokens.

Try to pick a pair where the volume is high relative to TVL

Past volume doesn’t tell you about future volume, but at least it’s an indication that there is active trading interest.

Ideally you want to choose a token pair where volume is about to increase.

You can actually make that happen if you choose a token with a low Total Value Locked (TVL). The mere fact that there will be more liquidity in a particular price range will cause more of the order flow to go to v3 instead of v2.

I see there is only $42k locked into the v3 version of the GET-ETH pair. That compares with around $1.9 million on v2. My addition to the v3 pool should make a meaningful difference. My investment will be around $50k.

Buy a token where you think the volume of trading will increase

I expect the volume of trading in GET to increase. There are various new developments on the way. As these developments are announced, it should attract more investors. You can read about upcoming developments on the GET Protocol website. Specifically these include the “Digital Twin” and the “NFT Event-Financing tokens”.

Fee:

With Uniswap v3 you have 3 choices of fee that you can choose. 0.05%, 0.30% or 1.00%. For many pairs only one of the three fee levels has been created. You can create another one. That’s an expensive process likely costing more than $1000. I would not do it.

Pick the fee you want to earn on each trade

Where several fee levels are available, the highest fee, (i.e. the 1% fee), may seem like the obvious choice. However, you will usually find that the volume is much greater in the lower fee pools. In many cases you will earn more with the lowest fee option. I have actually tested this on the USD-ETH pair where all three fee options are available. There wasn’t much difference in my earnings between the three pools, (using the same amount and same range). However the lowest fee pool, (0.05%), came out very slightly ahead due to its very high volume.

I prefer to find a token where only the third choice (1.00%) fee is available. The GET-ETH pair on Uniswap v3 earns a 1% fee for Liquidity Providers, so that’s a good choice. It’s three-times better than the 0.3% you get on the v2 version of the Uniswap pools.

Range:

The narrower your range, the more you will make while the token remains in range. This is because your share of the trading at each price point will be higher. There is also the added benefit of more total volume moving to v3 from v2 (See “Trading Volume” above).

However with a narrow range you have a greater risk of dropping out of the range. At that point you will stop earning fees. It’s a tough decision where to set the range.

With the GET-ETH pair I have looked at where the liquidity lies (from other investors). It looks like this:

Amount of tokens locked (X scale) at each price (Y scale)

There is no X and Y scale on this graph. However by hovering my mouse over each of the bars I can see the relevant numbers, like this:

White vertical bar is where my mouse is. Red vertical bar is the current price

The vertical white bar shows where my mouse is. In the left hand chart I can see that at a price of 897.5421 GET per ETH there are 780 GET available. In the right-hand chart I can see that there are 0.68 ETH available at a price of 1236.0104 GET per ETH. The current price, represented by the vertical red bar is 1118.394 GET per ETH.

I expect the price of GET to rise vs ETH. Therefore, the price might rise from the current 1118 GET per ETH to say 800 GET per ETH in the short run. Since I am not expecting GET to fall there is not much point in setting my range to cover falling prices (the right hand side of the chart). Therefore, I am thinking that I would probably want to set my range (GET per ETH) as something like 800 to 1120. To home in on the exact range I am going to use the chart below.

Picking the range

The wider your range, the longer it will stay in the range. The longer the token price remains in your range, the more you will earn. On the other hand, with a very wide range, your share of the fees will be lower. It’s a trade-off. You need to use your skill to decide what will work out best. Look at the past chart to have a guess at how long the price will stay in your range. Here is the chart of GET per ETH over the last few months.

A chart can help you select the best range

My guess is that it could stay in the range of 764 to 1118 over the next month or so. I have marked that range with blue horizontal lines on the graph above. I would be happy with the earnings on that. (See next paragraph for the maths).

Working out how much you will earn

This is pure speculation, but it is educated speculation.

I intend to invest around $50k or around 18'000 GET.

If I spread that across the range mentioned above (764 to 1118), I estimate that the GET available at each price will increase from the 680 to 780 range, to closer to 1780 GET at each price point.

Since the amount of GET at each price point (in v3) increases, I also expect more of the v2 volume to trade through v3. The old v3 volume was $114k per week. I’ll guess that will increase to more than $270k.

So that would give fees of $2700 per week (at 1%). Since I will be the Liquidity Provider for around 55% of the GET tokens in my range, I could expect to earn over $1570 per week — assuming that my guesses are correct. That’s $224 per day. That would be an annualised return of over 160% of my investment.

Below you can see the maths in spreadsheet form:

Use Excel to help you calculate expected returns.

Impermanent loss:

If the price ratio between the two tokens deviates from the original ratio, you will have what is called an “impermanent loss”. When you withdraw your tokens from the pool the total value of the two tokens will be less than what it would have been if you had done nothing. Fees earned will compensate you for the loss. The longer you earn fees, the more likely it is that the fees you earned will cover any impermanent loss. Time and lots of fees are your friends.

It is possible to avoid the impermanent loss by using a tactic I describe below. See “Avoiding impermanent loss”

Avoiding Impermanent Loss

You can avoid the potential “impermanent loss” by “single-side staking”, or nearly single-side staking. Let me explain. In my case, I like GET protocol, so I was happy to buy it at the current price. I used about 16 ETH to buy the approx 18k GET. That’s what I am going to put in the pool. Only three things can happen:

  1. GET goes down relative to ETH. In that case I will keep all of my GET. I am happy to keep it because of the great prospects.
  2. GET goes up relative to ETH. In that case the GET put into the pool will be gradually converted to ETH. If the GET price rises from 1118 to 764 (GET per ETH), then all of my GET in the pool will be converted to ETH at an average rate of 941 GET per ETH. That means I will receive 18.66 ETH (plus all the fees), which is more than the 16 ETH I started with, so I will be in profit. It might not be in as much profit as it would have been if I had kept the GET without putting it in the pool, but it’s still a nice profit.
  3. After rising and falling the price returns to the original level of 1118 GET per ETH. In this case I will be happy because I will receive back the same number of tokens that I started with. In addition I will have earned the Liquidity Provider fees.

Skill based investing

By tweaking each of the above parameters, you can improve your chances of maximizing your return.

The Proof of the pudding is in the eating (or not)

Now it’s time to put my strategy to the test. It’s around 9pm. I will need to let the strategy run for 24 to 48 hours before I publish this blog, so you can all see how I am doing and whether I am achieving the hoped for 100% p.a. returns.

Here goes my provision of Liquidity to the pool .

Adding Liquidity to a Uniswap v3 Pool

Before

Number of tokens pooled at each price point

After:

Number of tokens pooled at each price point

As you can see, I have literally doubled the liquidity in the price range I chose. This should cause more trades to occur in the v3 pool, as well as giving me more than half of the fees generated.

Liquidity pool token

I have now finalised my investment into the GET-ETH liquidity pool. Let’s see what it looks like:

All pool tokens can be viewed as NFTs

Update after 1 hour

Whoah! That was quick. I already earned $6.99 in fees in less than an hour. I can’t wait to see how much it will be tomorrow when I wake up.

Update after 24 hours

The NFT updates its value in real time

I made my investment yesterday just after 9pm. We are now just after 10pm today. My GET-ETH Uniswap v3 pair has now been running for 1.1 days, and I have earned over $200. The run rate is currently 115%. Objective achieved.

Fees

I have not discussed the impact of fees. Entry and exit from a pool incurs GAS fees for using the Ethereum network. The fee is related to the cost of gwei at the time of the transaction, and not to the size of the transaction. You want to be doing your pool transactions when the price of gwei is relatively low. With the price of transactions at around 100 gwei it will be costing you over $100 to do a pool transaction. This may be insignificant if the size of your investment is large, the fees earned high, and the investment period is long. The opposite is also true. Fees can take a big bite out of smaller investments.

I like to wait for the gwei price to come down (e.g. below 60 gwei) before I do a transaction. I usually wait if the gwei price is above 100.

Conclusions

The Uniswap v3 pools gives the investor much more control over his investments. In v2 the pool range is set from zero to infinity, and there will always be equal amounts, in value, of each token — 50%/50% . All investors earn the same percentage according to the value locked.

In v3 each investor has the flexibility to set his own range, and in doing so can set it so that he has an un-equal value of tokens. Users of v3 pools can thus set the range so that the lower end of the range is close to the current price, or so that the upper end of the range is close to the current price, or so that the middle of the range is close to the current price.

Also v3 users can set the width of their range to narrow, or wide or anywhere in between.

A user can maximise his returns by selecting the more attractive pairs, making an educated guess about future price action, and then choosing the width of his ranges and where to place the ranges compared to the current prices. If done correctly, and intelligently, the annualised returns can be pushed towards 100% and beyond.

Whilst impermanent loss will diminish potential returns, v3 allows users to intelligently manage the risks more efficiently than v2, and to improve the expected return.

Did I receive the expected 100%+ return?

Answer: Yes (so far).

After 25 hours, I earned more than $200 in fee income on a $50k investment. That’s much more than 100% p.a. annual rate.

At least that’s how it is going in the first 24 hours. It’s not fair to judge a return over just 24 hours. A week or a month would be a better time-frame, but so far, so good!

I have applied these techniques to other pairs, and I am receiving similar 100%+ returns over longer periods.

--

--