跳转到主要内容

Documentation Index

Fetch the complete documentation index at: https://docs.raydium.io/llms.txt

Use this file to discover all available pages before exploring further.

本页内容由 AI 自动翻译,所有内容以英文版本为准。查看英文版 →
Raydium UI 上 CLMM 流动性池显示的 APR 是过去 24 小时 在范围内流动性 实现费用 APR,推算到一年。它不是你的头寸会赚取的 APR — 那取决于你的价格范围、在范围内的时间和你在交易窗口期间活跃流动性中的份额。

基本公式

Raydium 上 CLMM 流动性池的日 APR 计算公式为:
apr_24h = (fees_24h / tvl_in_range_24h) · 365
其中:
  • fees_24h 是过去 24 小时内 LP 端交换费积累的总额(美元计)。
  • tvl_in_range_24h 是该时间窗口内 在范围内 流动性的时间加权平均美元价值。
分母是 CLMM APR 与 CPMM APR 的区别所在。CPMM 使用总流动性池 TVL,因为每一美元总是在贡献。CLMM 只使用在范围内的部分,因为超出范围的美元收益为零。

你实际的 APR

基本 APR 是流动性池的统计量,而不是你的头寸统计量。你的 APR 取决于四个乘数:
your_APR = headline_APR
         · (your_in_range_fraction / pool_in_range_fraction)     # 浓度加成
         · time_in_range                                          # 范围纪律
         · (1 − transfer_fee_haircut)                             # token-2022 税费
         · compounding_factor                                     # 如果你自动复投
  • 浓度加成。如果你的价格范围比流动性池平均范围更紧凑,每个活跃刻度上你的流动性按美元计更多。范围越紧 = 加成越大(且成比例的 IL 放大更大)。
  • 在范围内的时间。如果你只有 40% 的时间在范围内,乘以 0.40。
  • 转账费扣除。对于有转账费的 Token-2022 代币铸币,每次费用收取都会通过一次转账,本身会流失基点。
  • 复投。如果你每周 collectFee 并重新部署到相同范围,有效 APR 约为 (1 + daily_APR)^365 − 1。不复投时是线性的。

详细示例

假设一个 SOL/USDC CLMM 流动性池有:
  • 24h 交易量:$120M
  • 费用等级:0.05%(LP 获得协议切分后 88% 的费用)
  • 总 TVL:$40M
  • 在范围内 TVL:$18M(目前流动性池的 45% 在范围内)
fees_24h = 120M · 0.0005 · 0.88 = $52,800
apr_24h  = (52,800 / 18,000,000) · 365 = 107%
Raydium UI 显示该流动性池的 107% APR。(本示例使用深度、高交易量流动性池保持数字具体;典型 CLMM 流动性池显示的 APR 从 10% 到 50% 不等,低交易量流动性池远低于 10%。) 现在你考虑开仓:
  • 你的价格范围:足够紧凑,你拥有 2 倍的平均浓度。
  • 预期在范围内时间:70%(你会每周检查一次)。
  • 无 Token-2022 费用。无自动复投。
your_APR ≈ 107% · 2 · 0.70 = 150%
这是估计值,不是保证。实现交易量在一周内可能翻倍或减半。

为什么尾随 APR 是滞后信号

CLMM APR 相对于 CPMM APR 移动快速,因为在范围内的 TVL 分母移动快速:
  • 大幅价格移动会推动大量头寸超出范围,缩小分母。突然你剩余的在范围内 TVL 看起来”更高 APR” — 但仅是因为竞争对手离开了,通常交易量也会下降。
  • 流动性池达到新高时,可能会在短时间内显示 500-1000% APR,因为大多数头寸是根据更低价格设置的,只有少数激进的 LP 仍在范围内。
  • 一旦市场稳定,LP 重新平衡,APR 均值回归。
经验法则:
  • 忽略 sub-24h APR。噪声太多。
  • 偏好 7d 和 30d 时间窗口。Raydium 通过 GET /pools/info/ids 公开两者 — 字段 week.aprmonth.apr
  • 在承诺重要资本之前,对你的特定价格范围进行历史回测,使用历史交易量和价格数据。

数学工作原理(单刻度步长)

在单个刻度内,CLMM 的表现类似于 CPMM,针对该刻度内活跃的流动性数量 L。费用以 fee_growth_global_Xfee_growth_global_Y 每单位流动性积累。对于跨越刻度范围 [i_lo, i_hi] 的流动性为 Lₚ 的头寸:
fees_earned_X = Lₚ · (fee_growth_inside_X(i_lo, i_hi, now) − fee_growth_inside_X(i_lo, i_hi, t_open))
fees_earned_Y = Lₚ · (fee_growth_inside_Y(i_lo, i_hi, now) − fee_growth_inside_Y(i_lo, i_hi, t_open))
其中 fee_growth_inside 从全局累加器中减去 i_lo 以下和 i_hi 以上的费用增长。详见 algorithms/clmm-math 要计算未来期间的预期费用用于预期范围,估计:
expected_fees_per_day = Σ_ticks_in_range (volume_at_tick · fee_rate · your_share_at_tick)
Raydium SDK 公开 getEstimateAprFromPositionAndPool,它使用近期的每刻度交易量直方图进行此估计。

SDK 辅助函数

import { Raydium, TxVersion } from "@raydium-io/raydium-sdk-v2";

const raydium = await Raydium.load({ owner, connection });
const pool = await raydium.clmm.getPoolInfoFromRpc({ poolId });

const apr = await raydium.clmm.estimatedApr({
  poolInfo: pool.poolInfo,
  poolKeys: pool.poolKeys,
  tickLower: -100,   // 你的预期范围
  tickUpper:  100,
  volumeUsd24h: pool.poolInfo.day.volume, // 或自定义估计
});

console.log(`Expected APR: ${apr.feeApr * 100}% (fee-only, excludes farm incentives)`);
该方法如果流动性池有附加农场,还会单独返回任何农场 APR。你的完整”LP APR”是 feeApr + farmApr

农场 APR 如何融入

Raydium CLMM 流动性池可以有 Farm v6 激励叠加在其上。农场奖励以奖励铸币(通常是 RAY 或合作伙伴代币)支付,独立于交换费。Raydium UI 通常显示:
Total APR = Fee APR + Farm APR [in $X, Y, Z reward mints]
农场 APR 计算类似,但使用奖励发放计划和当前奖励铸币的美元价格。与费用 APR 不同,它不受波动性依赖 — 它是固定计划。 参见 products/farm-staking/overview 了解农场发放数学。

常见错误

  • “APR 自动复投。” 不是。费用必须通过 collectFee 声称,然后手动重新部署。Raydium 不会自动复投 CLMM 费用。
  • “我的 APR = 基本 APR。” 仅当你的浓度是平均的、你的在范围内时间是 100%,且你的复投频率相同时。这三个通常都不成立。
  • “更高费用等级 = 更高 APR。” 仅当交易量能承受更高费用。在 1% 时,一对可能报价 50% APR 但交易量 1/10;净收益少于 0.25%,即 120% × 0.1 = 12%。
  • “超出范围的头寸零风险。” 它们有零费用收入但对现有代币组成有完整 IL — 头寸现在是”100% 某一侧”。

相关链接

来源:
  • Raydium SDK v2 estimatedApr 实现。
  • Raydium UI 流动性池页面(实时 APR 字段)。
  • Uniswap V3 费用增长推导。