Estimated APR for CLMM
Learn how Raydium estimates CLMM APR and how the delta and multiplier methods work.
Overview
In a CLMM pool, fees are distributed proportionally to in-range liquidity at each tick. Calculating an accurate APR across all ticks and LPs is extremely complex. Traditional constant product APR formulas do not apply.
Projected returns for CLMMs should be considered estimates at best.
Raydium displays three APR estimation methods:
Overall pool estimated APR - pool-wide average
Delta method - based on your position's share of liquidity
Multiplier method - based on historical price range overlap
Overall pool estimated APR
Assumes trading fees and emissions are distributed across all liquidity in the pool, including out-of-range positions.
Delta method
Calculates estimated APR based on your position's implied change (delta) in pool liquidity, determined by your price range and size.
Condition
Where:
i_l
lowerTickId
i_c
currentTickId
i_u
upperTickId
Token amounts in a position
Calculating Delta L
For estimation of tokenA (ΔX) and tokenB (ΔY), you need to know ΔL:
So you take:
Then:
After calculating ΔL, you can calculate ΔX and ΔY using:
Estimated daily fee
Where:
volume24H
Average of 24h volume
L
Total liquidity (cumulative of liquidityNet from all ticks that i≤i_c)
ΔL
Delta liquidity
Liquidity amounts
And can be calculated from:
Condition
ΔL
If i_c<i_l
ΔL=liquidityAmount0
If i_c>i_u
ΔL=liquidityAmount1
If i_c≥i_l && i_c≤i_u
ΔL=min(liquidityAmount0,liquidityAmount1)
Multiplier method
Calculates estimated APR based on how much your price range overlaps with historical trading activity.
Assumptions
Historical price data is used to extrapolate future price data (not the best indicator of future performance, but it provides a workable estimate)
Price fluctuation within the historical range is assumed to be consistent across the time interval, resembling a periodic function with amplitude equal to the upper and lower price boundaries
Variables
u_lower
Lower bound of the user's concentrated liquidity price range
u_upper
Upper bound of the user's concentrated liquidity price range
h_lower
Lower bound of the historical price range across a time period
h_upper
Upper bound of the historical price range across a time period
Retroactive range intersection
Range definitions
Where retroRange is the retroactive intersection between userRange and histRange.
Multiplier calculation
Let m = multiplier of rewards or fees that the user will receive.
retroRange≤0
m=0
userRange=retroRange
m=retroRangehistRange
histRange=retroRange
m=userRangeretroRange
Otherwise
m=tradeRangeretroRange×userRangeretroRange
Important notes
These are estimates, not guaranteed returns
Actual returns depend on trading volume, price movements, and competition from other LPs
Last updated
Was this helpful?