> ## 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.

# 估算 CLMM APR

> Raydium 如何计算 CLMM 流动性池展示的 APR 数值、如何在开仓前估算假设头寸的 APR，以及使尾随 APR 误导性的边界情况。

<Info>
  **本页内容由 AI 自动翻译，所有内容以英文版本为准。**

  [查看英文版 →](/algorithms/clmm-apr)
</Info>

<Info>
  Raydium UI 上 CLMM 流动性池显示的 **APR** 是过去 24 小时 **在范围内流动性** 实现费用 APR，推算到一年。它**不是你的头寸**会赚取的 APR — 那取决于你的价格范围、在范围内的时间和你在交易窗口期间活跃流动性中的份额。
</Info>

## 基本公式

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`](/zh/sdk-api/rest-api) 公开两者 — 字段 `week.apr` 和 `month.apr`。
* **在承诺重要资本之前，对你的特定价格范围进行历史回测**，使用历史交易量和价格数据。

## 数学工作原理（单刻度步长）

在单个刻度内，CLMM 的表现类似于 CPMM，针对该刻度内活跃的流动性数量 `L`。费用以 `fee_growth_global_X` 和 `fee_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`](/zh/algorithms/clmm-math)。

要计算未来期间的*预期*费用用于预期范围，估计：

```
expected_fees_per_day = Σ_ticks_in_range (volume_at_tick · fee_rate · your_share_at_tick)
```

Raydium SDK 公开 `getEstimateAprFromPositionAndPool`，它使用近期的每刻度交易量直方图进行此估计。

## SDK 辅助函数

```ts theme={null}
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`](/zh/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% 某一侧"。

## 相关链接

* [`algorithms/clmm-math`](/zh/algorithms/clmm-math) — 费用增长累加器的完整推导。
* [`algorithms/impermanent-loss`](/zh/algorithms/impermanent-loss) — LP 方程的损失端。
* [`user-flows/choosing-a-pool-type`](/zh/user-flows/choosing-a-pool-type) — 使用此 APR 估计的决策框架。
* [`sdk-api/rest-api`](/zh/sdk-api/rest-api) — 实时交易量 / APR 端点。

来源：

* Raydium SDK v2 `estimatedApr` 实现。
* Raydium UI 流动性池页面（实时 APR 字段）。
* Uniswap V3 费用增长推导。
