Why are market makers important?
Market making in finance always meant more than an x*y=k equation. In a traditional Central limit order book (CLOB) market, market makers specialize in submitting both buy and sell side orders of the book. When you market buy on FTX, your counterparty probably isn’t another directional trader, but a market-making firm instead! Most high frequency trading firms, and even banks, allocate a portion of their portfolio to market-making activities. Notable firms include Two Sigma, Citadel, and Jump Trading.
Market makers are particularly important in traditional markets because directional traders alone don’t provide enough liquidity for the market to function. This is due to a few reasons:
- There is a fragmentation of information. Buyers can’t communicate with sellers efficiently, especially when trading long-tail assets.
- Some market participants require trades to be executed instantly. But in reality, trades take time to clear.
- Liquidity is asymmetrically affected by market sentiment. It increases in bull runs, but dries up in bear markets. You see this play out on the dollar value of Open Interest on Deribit’s options.
- Block trades (huge buys and sells) suffer from high price impact.
These problems obscure price discovery and increase market volatility, generally making the market more inefficient. In DeFi, the lack of market makers providing liquidity can explain why newly launched tokens see huge gains and losses in price. It’s also the reason why, as leaked in our office hours, you should set smart alerts for token transfers above a USD value based on the depth of the liquidity pool for that token.
Why do people market make?
Market makers in DeFi profit off trading fees and receive certain liquidity incentives. This isn’t very different from traditional market makers who profit off the bid-ask spread. That is, the difference between the buy and sell orders they set.
Revenue comes with risk. DeFi users are afraid of Impermanent Loss, while institutional market makers attempt to reduce exposure to variation in asset prices over time. Market-making has traditionally been a complicated business; Institutions compete in a variety of ways. They constantly adjust their spreads and buy and sell amounts, purchase hedging instruments from derivative markets, and execute light-speed orders on low-latency software.
Because of this, it is difficult for the lone trader to do market-making on CLOB markets. Though there are programmes that may help you do so, Institutions have the advantage of scale in almost all aspects of market-making.
Enter Automated Market Making.
Automated market makers (AMMs) introduced the concept of “lazy market making” that completely turned this model on its head. Assets in DeFi would be deposited into a contract, known as a “liquidity pool”, and various traders can then trade against that pool. It is termed “automated” because the price of assets in AMMs change according to a predefined mathematical formula. One such formula is Uniswap’s constant product formula x * y = k, where x and y are the reserves of two tokens. The balance of both reserves must multiply to form constant k at all times. This article provides a great introduction to AMMs.
Over the years, other AMM formulas have also been introduced, each with their own pricing curves. One feature persisted across them all: Market-making was automated, and perhaps, easy.
Enter Uniswap V3
Uniswap V3 presents a marked change to the AMM model. It increases the customizability of liquidity positions by allowing users to pool assets along a predefined range of prices instead. You can think of a single V3 liquidity position as an x * y = k AMM that only works in that set range of prices. Quoting from Dan Robinson’s work, the relationship between pooled assets in a single V3 position is represented can also be represented by a formula:
The “offset” here is a function of the lower limit and upper limit of the set price range. As I mentioned in an earlier piece, this greatly enhances the capital efficiency of pooled assets. It gives users the ability to customize an over-arching market-making position by owning different liquidity positions at once.
Capital efficiency, however, comes at a cost. You risk having market prices falling out of your set market-making range. An illustration: you pool liquidity for the ETH/USDC pool at a $1000-$2500 price range. You would end up holding only ETH when the price of ETH drops below $1000. You end up holding only USDC when the price of ETH exceeds $2500. In both cases, you stop earning fees on your assets and get exposed to the downside of the single asset you are holding.
Therein lies the difficulty of market-making on Uniswap V3. Liquidity provisioning is no longer simple and passive, but requires monitoring and strategic adjustments. In this piece, we analyze on-chain data to discover empirical insights into market-making behaviour on Uniswap V3.
Each Uniswap V3 position is represented by a unique NFT token. We parse data for 5 different events relating to the management of liquidity positions.
- IncreaseLiquidity, DecreaseLiquidity, & Transfer events emitted by NonfungiblePositionManager.sol
- Mint & Burn events emitted by UniswapV3Pool.sol
By piecing together data from these events, we are able to find how often a specific liquidity position (i.e NFT) has been updated. Using the Transfer events, we are able to find the final owner of these current NFT positions. If the final owner is the burn address, we take the second last owner as the arbitrary “owner” of that NFT position.
It is assumed that NFTs transferred from an Ethereum address to another Ethereum address ultimately belong to the same owner. There is no open marketplace for buying and selling Uniswap V3 NFT Positions. Neither is there any reason for someone to buy an NFT instead of buying the underlying assets and providing liquidity his/herself.
If Uniswap V3 liquidity providers (LPs) were actively managing liquidity, one would expect V3 LPs to make frequent changes to their liquidity positions. This could be done in a discretionary manner, via some off-chain algorithm, or via an on-chain contract. We do a brief exploratory analysis to profile how Uniswap V3 is being used by LPs.
Out of all current V3 position owners, an overwhelming 58% of addresses own only 1 liquidity position. In fact, less than 10% of addresses that provide liquidity on V3 own more than 5 NFT positions.
Using the data, we can calculate an arbitrary activity score by summing the number of “IncreaseLiquidity” and “DecreaseLiquidity” events attributed to that address. This includes NFTs that were burnt by that address. We plot a scatterplot of number of positions owned against this activity score for each address.
The trend indicates activity scores of addresses consistently exceed the number of positions they own. Few addresses ever own more than 150 NFT positions. We might also infer that activity increases more than proportionately to the number of positions owned.
Let’s put a bit more color to that data with a classification heuristic shown below.
A “Simple Passive” address is an address that only owns one Uniswap V3 position, and has not made any changes to it since. It is a lazy liquidity provider in every sense. “Complex Active” then refers to liquidity providers with multiple positions that they manage actively. This can be inferred if it has an activity score than the number of tokens it owns. We pick 2 as an arbitrary threshold to qualify as being active.
In total, we find that there are 22,864 unique addresses who own/had owned positions on Uniswap V3. A large proportion (77%) of these owners are still considered passive liquidity providers. This means they have almost never changed their liquidity positions after minting them. 14% of owners are classified as “Simple Active”, while less than 1% are “Complex Active”.
There are exactly 8 “Complex Passive” liquidity providers. I expected most of these to be staking pools e.g Raini’s LP V3 Staking Pool, but 6 out of the 8 addresses were actually wallet addresses (i.e not a contract).
Historical patterns for Liquidity Provisioning
Let’s now observe patterns in liquidity provisioning since May, till 28th of June. This can be done by tracking the historical mints and burns for each day.
Some exploratory observations that can be made, but requires further testing to be validated:
- Sudden tall “spikes” in liquidity at certain prices appear to lead changes in ETH prices for the very next day.
- The overall liquidity depth has generally decreased since Mid June
How well does liquidity in the ETH/USDC pool track Ethereum prices? We plot the values for the 25th, 50th, and 75th percentile of liquidity amounts each day, and compare it to ETH/USD prices. Liquidity is usually concentrated within this range.
In the month of May, the liquidity distribution on V3 had tracked changes in ETH prices closely. This makes sense as market-makers could have adjusted positions to earn more fees in range. Since the middle of June, however, liquidity on V3 has not kept up with the fall in Ethereum prices. As ETH prices dipped below 2,000 USD, LPs on Uniswap responded by widening their market-making range instead, as seen from the widening gap between liquidity at the 25th and 75th percentile. Would this trend sustain? Only time and data will tell.
The active liquidity management landscape remains nascent in DeFi. Visor Finance currently runs a strategy which derives Bollinger Bands from ETH/USD prices to create a projected active liquidity range. Charm Finance, on the other hand, runs a passive rebalancing strategy to ensure that the concentrated liquidity range “catches up” to market prices.
As the data has shown, the potential of Uniswap V3 remains untapped. Passive, simple liquidity positions still dominate, and most positions are managed in a discretionary, unoptimized manner. This gap is a shining opportunity for new protocols to build automated on-chain strategies that help actively manage liquidity assets, which would democratize access to market-making for the everyday DeFi user. These protocols are crucial to the success of Uniswap itself.