Stop Using Ranges to Concentrate Liquidity in a Pool

EthCC[9] · 30 Mar 2026 · 20:53

Corinne Powers presents a vector-based approach to allocating concentrated liquidity across ticks. The presentation compares the resulting bid-and-ask distribution with range-based liquidity positions and order-book spreads.

Speakers

Topics

From EthCC[9], hosted by Ethereum France.

Transcript

Well well well. Hello everybody. I'm Corinne Powers. Today I'm going to be talking about concentrating liquidity in an AMM. And the story today that we're going to tell is through the lens of Uniswap version three. But this will apply to any AMM that allows you to concentrate liquidity. So, as the title suggests, stop using ranges. We're going to look today at a an optimization problem that will show through its solution that allocating your liquidity centered on the current price is sub-optimal.

And instead, it's better if you straddle the current price with your liquidity. Uh so, why why trust me and what I'm going to say? Um I'm a DeFi native researcher. I specialize in convex optimization theory, which is a type of mathematical modeling. And I'm a managing partner at a quantitative hedge fund that focuses on market neutral strategies. So, I am professionally and financially incentivized to get this right. Um Now, for those of us in the room, who here has provided liquidity, been an LP before?

Oh, good. Okay. So, more than in the past when I've done this talk. Um so, anyone who's gone to Uniswap these days might see this type of um interface through the UI. You are presented with the option of where you want to center your range and how tight or wide you want that range to be. Generally speaking, the tighter the range, the more fees you expect to earn, but only so long as the price is in that range. So, going wider means you might have fewer fees, but you will also be earning fees for a larger amount of time.

Um Now, let's take a look at how um liquidity is organized across the pool. We use what's called ticks to represent the liquidity across a pool. Now, I like this visual representation um of liquidity over ticks and what I'm showing you here is five different Uniswap pools. And the liquidity across that pool um over the ticks. As you can see, um a very common pattern across each of the pools is that the liquidity is centered around the the current price.

Um this is generally a pattern that I see throughout all of Uniswap, on other protocols as well. Um and there are probably a few forces, both product-driven, culturally driven, that are encouraging, nudging LPs to allocate liquidity this way. But we're going to now dive into how we can show that's actually not the best thing to do. So, we're going to stick with this tick-wise model um of representing liquidity on a tick-wise basis.

And uh let's dive into what ticks are for a moment. So, um a tick is at the most granular level you can allocate liquidity to. So, it's the smallest range that you can put liquidity in. Um if we're talking about ranges, right? People think of it being from low to high, but really you're allocating liquidity uniformly across the ranges that are in that uh range of ticks. So, why limit ourselves to this uniform distribution over a range when you can specify liquidity on a tick-by-tick basis and draw any shape you want?

So um in order to get some more intuition about how to think about it this way, let's take a look at what happens if I put liquidity in a single tick. If I'm going to put all of my capital liquidity in a tick that is at a price much lower than the current price, then I'm taking um I'm taking cash. Um assuming here that the pool is between a stablecoin and cash or in a token. I'm taking that cash and I'm putting it in the tick. And if the price ever gets that low, then I will buy the token at a cheaper price. Um it's not quite a limit buy because if the price goes back, um that token is exchanged for cash again.

Um and every time that my tick is crossed, I'm getting some swap fees in exchange for putting my liquidity in that tick. But in a way, it kind of helps to think of it as a limit buy and I'm putting all the cash at a lower price. That's the price at which at which I want to buy it at a lower price. Um on the other side, if I wanted to put all of my capital in a tick at a higher price, I'm buying the token now, putting it at that higher price, and whenever the price gets that high, it gets swapped for cash. It's kind of like a limit sell. So, we are thinking about liquidity um indexed by ticks.

And I'm going to sketch vectors that are indexed by ticks using this blue curve. So, this one isn't particular is intended to be representation of liquidity over ticks. And we can use it to represent other vectors over ticks as well. So, as an LP, there are two things that drive my returns. There are the swap fees and there's also what is known as impermanent loss. So, I'm guessing based on the number of folks in the room who have been an LP before, you've heard of impermanent loss.

Um on the swap fee side, there's two things that go into the fees. There's how much volume will there be where the will there be and what is the current liquidity across the ticks. Uh for impermanent loss, it's a function of two things. What will be the price of the token when I close my LP position? And how do the ticks behave? And that's depends on the AMM. Let's dive a little bit deeper and actually model how to estimate these two quantities.

Starting with swap fees. So, with swap fees, generally the more swaps that happen, the more fees I would get as an LP. Um one thing that's important is that the swap fees are roughly fixed. And the the fees are distributed across um the LPs proportional to the amount that person is providing to the whole pool. So, what this means is I would expect for each additional dollar I put in as an LP, diminishing returns um on that extra dollar because the fees are not necessarily increasing, but I have to they're distributed amongst my portion, but everyone else's well.

So, uh there are some things that I know and some things I don't know when I want to calculate or estimate my swap fees. One thing that's not known is what the swap volume will be over ticks. Um I might guess that it has this roughly Gaussian shape centered at the current price, but um this could be anything. I might have a better estimate that I can use to swap this out. Um there are things that we do know. We know the current liquidity in each tick. And we know how much liquidity we intend to put into those ticks. So, all three of those pieces give us a way to estimate what our swap fees will be as a function of our prediction of swap volume.

So, pretty straightforward. Um what's not straightforward as much as the impermanent loss. So, with impermanent loss, in general, the more deviation, the worse the loss will be. But uh I actually don't like using the term impermanent loss. And the reason is impermanent loss looks at your opportunity cost in reference to a combination of tokens that you're holding when you enter the range. But if we're not talking about ranges anymore, if we're moving away from ranges, impermanent loss doesn't generalize.

Um so, we're going to instead talk about capital reserves. Think of capital reserves as how much the value of my assets, of my capital, before and after I enter the LP position. Um let's see. So, in order to calculate capital reserves, we actually have to um have an estimate of what we think the future price will be when we close the LP position. And we need to look at the um what the ticks will do at those different prices.

And if we're looking at how to calculate capital reserves for tick number 10, say, then it's going to be the inner product or the expected value of my capital reserves on in tick 10 as a um in expectation over future price. And I can calculate this for every tick individually and that will give me um this capital reserves curve. So, capital reserves are at a high level what the value of my investment, of my capital, um in each tick in expectation when I close out the LP position.

Now, um there's some intuition here that we should talk about because this is a new concept um and it's very confusing. But let's walk through a thought experiment together. If I decide um for whatever reason that I want to put all of my capital in one tick and that tick is a very, very low price. I'm putting cash in that tick. There's a low probability that the price will be lower than that tick when I close my LP position. So, I put in cash, I take cash out, 0% change in my capital reserves off to the left.

Now, I might have a I might decide to put all of my capital liquidity in a tick on the right. I'm buying the token, putting in that tick. My guess of where the price will be might include the probability that it goes up more often than it goes down. And so, there's a slight inexpectation, a slight expected value having a little bit more of a profit if the price goes all the way past that tick on the right. So, hence it being a little bit more than zero. But, generally I expect to lose some value on that capital.

In fact, as we see at the current tick, it's actually at the lowest point. And the reason for that is the reserves in the current tick are have the most to lose. You're buying the token, you're putting it in the tick. Um, so the price could go down. They also have the least to gain. If the price goes up, you're a limit selling at the current price. So, closing your LP position at the price at which you open it, you actually expect to have the worst returns on your capital reserves.

The hope, of course, is that this is balanced against the swap fees. But, we now have the ability to put these pieces together. We have um our capital reserves, which they're unknown because it's a function of where you think the price will be when you exit. This is a random random variable. Um, the better your estimate, the better this will look. Well, I should say the better you the more you can trust the outcome of this model. Um, so I have my capital reserves, which are unknown. I have my liquidity, and then that will give me a sense for how to measure my reserves.

Now, we're ready to pose the mathematical optimization problem. The thing we're going to solve for is how much liquidity do I put in each tick. This is a vector. Um, I'm going to make some very simplifying assumptions for this model. Um, and I'm also going to have to estimate the parameters that I talked about, the unknowns. I have to estimate where do I think the price will be, and I have to estimate where do I think the swap volume will be. And both of these are going to be indexed over ticks. For the talk so far, we've assumed that prices follow geometric Brownian motion, which is just basically Gaussian distributed. Um, and we use historical average for swap volume.

So, this is the math. I promise this is the only slide that has math on it. Um, this is the maximize returns problem. So, in the objective, I have my swap fees that are a function of swap volume and current liquidity, as well as the variable X, which is the liquidity I'm solving for. And then I have my reserves. I will have some capital constraints. Um, I can't put negative liquidity into a tick. And I'm also going to assume that there's some maximum amount of capital that I'm going to allow myself to allocate across this one pool.

But, having posed this problem, it's what's called a convex problem. So, convex problems are really neat. They are tractable, they are scalable, so you can solve this very very quickly. They are certifiably optimal, so if you trust your estimates, you can trust the solution, the outcome of where to put your liquidity. Plus, there is this neat little programming language called CVXPY that lets you solve for the variable very quickly. Um, I wrote this one by hand, but Claude and ChatGPT are doing this just as easily.

Um and this is an example of the shape of the solution. So, in the top row, we have the liquidity um that was already in the pool over ticks. The bottom row is the solution to the optimization problem. And what I'm doing here in each column is I'm allowing myself to allocate more and more capital to the pool. And as you can see, there's this neat little bimodal shape. This is actually quite intuitive. Um, what we're doing here is we're kind of recreating what you'd see in bid-ask spreads in a order book from a traditional exchange.

Um, you also notice that we're getting more liquidity allocated to the ticks that have that are less crowded. Um, this also makes sense because you get higher returns for each additional value when there's less crowded tick. Um, overall in this particular example, we saw some pretty good improvements, but take this number with a grain of salt. This example was run 2 years ago. Um, and things have changed. And there are a lot of assumptions as well about what we are doing in this model that might not apply today. But, generally speaking, there is a lot of value in thinking about how to allocate liquidity over ticks instead of over ranges. Um,

the reason I'm giving this talk today is um you know, these findings run counter to the status quo. And everywhere I look, liquidity is still being concentrated around the current price. This has a lot of downsides for traders, um for people holding tokens. As soon as the price gets pushed out of that concentrated center, you see a lot more volatility than you normally see. Um, and you know, for people who in the audience who are LPs, this approach is now mathematically shown to be suboptimal. Let's try something different. Let's see if we can change the landscape of uh liquidity providing in AMMs.

So, I hope you follow up with us if you like this talk. I'll be around. Um, for those of you in the audience who are LPs, we have more results to share. Uh, if you're a developer, maybe coming up with some tools that make it easier for LPs to allocate their liquidity in a non-centered way could be helpful. Um, if anyone here in here is a researcher, we have this uh these results in a white paper that has been sitting stagnant on archive for 2 years. So, um anyone who's interested in helping us push that forward, we'd love to talk.

And finally, you know, if you or anybody that you know is an investor, like I said I run a quantitative hedge fund that focuses on these market-neutral strategies. So, I love to talk more. All right, and I'm happy to take questions. >> [applause] >> Hello. What is the cost in terms of EVM computational cost of allocating your reserves following a very random uh function?

Uh, I'm sorry, could you repeat the question? Basically, your allocation is not just flat across a number of ticks. It's like a function that depends on a lot of things. So, seen individually, it looks pseudo-random. So, what is the cost of going to Uniswap V4 and say, "Yeah, I want to allocate my capital following this function, which is very strange?" Yes. So, there are a couple ways you could do it. One is you could do the brute-force approach and allocate tick by tick, um which could be very expensive. Layer twos help a little bit. Um, another thing you could do is if you solve for the general shape, you can then approximate that shape with a smaller number of ranges. So, the bimodal, you know, shape means you could even just choose two ranges on either side of the price, and that would be

better than centering those one range at the current price. Uh, you mentioned that you mentioned that the modes approximate bid-ask bounds. Mhm. Uh, does that mean that they're really close, a couple of ticks? So, um every every there's there's um dozens of ticks here. This is probably 20 ticks wide. And the um the spread of the two bimodal peaks is a function of what you estimate the volatility of the price to be.

If I think the price is going to be more volatile, the model will suggest you spread them further apart. And if you think it's going to be less volatile, it'll suggest that you concentrate it more closely around the current price. And again, um So, when you estimate the volatility, how what's the time range of the volatility you're looking at? >> Uh, yes, yes, good question. So, we made an assumption uh before going into the model. One of the assumptions is that um we are going to hold the LP position for some fixed time T.

We also assumed that no external liquidity will be added or removed during that time T. So, T is the time here, and it could be one block, it could be a week. It's a function of how uh how high frequency you want to be updating your position. And then basically you have the Brownian motion running with that volatility over that time? Yes. Yeah, we'll fix the time interval T, and then everything in this analysis is going to be over that time interval T. Uh, I have a bit more of a general question on the DeFi DEX landscape. So,

recently we've been seeing um uh the rise of of CLOB DEXes uh with Hyperliquid and Asterisk, for example. How do you see the the DeFi DEX landscape uh changing? Um, you mean with additional types of AMMs or with additional types of products? Both. Yeah. Yeah, you know, overall I've seen um part of the reason I'm giving this talk, right? I'm a hedge fund, we solve these problems and normally keep them to ourselves. Part of the reason I'm giving this talk is that we've seen a lot of traffic drop off on uh Uniswap, these AMMs where you see liquidity centered. There's kind of an ongoing joke that LP means losing

profit. Um I can kind of see why, right? Given this this result, but um you know, there are a lot of new things happening. Um I think generally traffic is being shifted away from AMMs that that do this, but with this talk, I'm hoping to bring attention back. Um and as to some of the other protocols, I I can't speak to that now. Thank you very much. We are running out of time. Maybe you can Oops sorry. >> [applause] >> Thank you, everyone.