关于 dex-pool-analysis
dex-pool-analysis 是面向 Solana DEX 研究者和交易者的技能,比较多种 AMM 池的机制、费用与风险。它还提供池健康度评估和交易执行选池方法。
主要功能
- 01比较 Solana AMM 池类型与费用
- 02评估 TVL、交易量和费用 APR
- 03识别新池及流动性风险信号
- 04按执行质量排列交易池
- 05监控池指标与流动性事件
适用场景
- 01比较 Raydium、Orca、Meteora 和 PumpSwap 池
- 02检查代币池的健康度和风险
- 03为交易规模选择执行池
- 04跟踪池的流动性变化
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ agiprolabs/ claude-trading-skills --skill dex-pool-analysis安装后在 Claude Code 中输入/dex-pool-analysis确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/pool_analysis_guide.mdpool_mechanics.mdscripts/analyze_pools.pypool_monitor.py详细介绍
DEX 池分析 — Solana AMM 池机制与比较
Solana 的 DEX 生态涵盖多种 AMM 设计:恒定乘积池(Raydium V4)、集中流动性(Raydium CLMM、Orca Whirlpool)和基于 bin 的流动性(Meteora DLMM)。每种池类型都有不同的费用结构、资金效率特征和风险状况。了解这些差异,对于选择最佳执行场所、评估流动性质量和识别池级风险至关重要。
此技能涵盖:
- Solana DEX 上各类池的机制与费用结构
- 池健康度指标(TVL、交易量效率、费用 APR、LP 数量)
- 池创建模式(PumpFun 毕业、手动创建)
- 交易执行的最佳池选择
- 池龄与风险评估
相关技能:AMM 公式参见 lp-math,深度评估参见 liquidity-analysis,LP 风险参见 impermanent-loss,执行成本参见 slippage-modeling。
1. Solana 上的池类型
Raydium V4(恒定乘积)
新发行代币最常见的池类型。采用经典的 xy = k 不变量,固定收取 0.25% 的兑换费用。与 OpenBook(原名 Serum)集成,结合 AMM 和订单簿流动性。
Program ID: 675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8
Fee: 0.25% per swap (0.22% to LPs, 0.03% to RAY buyback)
主要特征:
- 全范围流动性(无限价格区间)
- LP 提供流动性简单——按等值存入两种代币
- 资金效率低于集中流动性
- 创建池需要 OpenBook 市场 ID
Raydium CLMM(集中流动性)
集中流动性做市商池允许 LP 指定价格区间,与 V4 相比可将资金效率提高 10 至 100 倍。
Program ID: CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK
Fee tiers: 0.01%, 0.05%, 0.25%, 1%, 2%
Tick spacing: 1, 10, 60, 120, 240 (corresponding to fee tiers)
主要特征:
- LP 为其头寸选择最低价和最高价
- 头寸以 NFT 表示
- 每美元存入资金可获得更高的费用收入(价格在区间内时)
- 头寸可能超出价格区间(不产生费用)
- 针对不同波动性特征提供多个费用档位
Orca Whirlpool(集中流动性)
Orca 的集中流动性实现,在主要代币对(SOL/USDC、SOL/USDT)中占主导地位。
Program ID: whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc
Fee tiers: 0.01%, 0.02%, 0.04%, 0.05%, 0.16%, 0.30%, 0.65%, 1%, 2%
Tick spacing: 1, 2, 4, 8, 16, 64, 128, 256, 512 (varies by fee)
主要特征:
- 头寸以 NFT 表示(类似 Uniswap V3)
- 提供丰富的费用档位,便于精细控制
- SDK 和开发者工具完善
- 在 Solana 蓝筹代币对中占主导地位
Meteora DLMM(动态流动性做市商)
基于 bin 的流动性,其中每个 bin 持有固定价格。LP 使用不同策略模式将流动性分配到各个 bin。
Program ID: LBUZKhRxPF3XUpBCjp4YzTKgLccjZhTSDM9YuVaPwxo
Fee: Dynamic (base fee + variable fee based on volatility)
Bin step: 1-100 basis points per bin
主要特征:
- 使用离散价格 bin,而非连续 tick
- 波动性较高时动态提高费用
- 策略模式:Spot、Curve、Bid-Ask
- 在单个 bin 内滑点为零
- 对稳定币对而言,资金效率极高
Meteora Dynamic Pools
支持单边存入并根据波动性调整费用的多代币池。
Program ID: Eo7WjKq67rjJQSZxS6z3YkapzY3eMj6Xy8X5EQVn5UaB
Fee: Volatility-based dynamic fee
主要特征:
- 支持单边存入
- 根据近期价格波动动态调整费用
- 支持多代币池
- LP 体验比集中流动性更简单
PumpSwap(PumpFun AMM)
PumpFun 为从绑定曲线毕业的代币提供的原生 AMM。
Program ID: PSwapMdSai8tjrEXcxFeQth87xC4rRsa4VA5mhGhXkP
Fee: 0.25% per swap (0.20% to LPs, 0.05% protocol)
Migration fee: 0 SOL (post-March 2025)
主要特征:
- 恒定乘积(
xy = k)机制 - 市值达到约 $69K 时自动从 PumpFun 绑定曲线迁移
- 创作者代币奖励(协议费用的 10% 分配给代币创作者)
2. 费用结构对比
| DEX | 池类型 | 费用范围 | LP 分成 | 协议分成 |
|---|---|---|---|---|
| Raydium V4 | 恒定乘积 | 固定 0.25% | 0.22% | 0.03%(RAY) |
| Raydium CLMM | 集中流动性 | 0.01%–2% | ~84% | ~16% |
| Orca Whirlpool | 集中流动性 | 0.01%–2% | 87% | 13% |
| Meteora DLMM | 基于 Bin | 动态 | 80% | 20% |
| Meteora Dynamic | 动态 | 可变 | ~80% | ~20% |
| PumpSwap | 恒定乘积 | 固定 0.25% | 0.20% | 0.05% |
费用层级选择指南:
- 0.01%:稳定币交易对(USDC/USDT)——价格波动极小
- 0.05%:相关资产(mSOL/SOL、jitoSOL/SOL)——波动性低
- 0.25%–0.30%:标准交易对(SOL/USDC)——波动性中等
- 1%–2%:高波动性/Meme 代币——无常损失风险高
3. 池创建模式
PumpFun 毕业流程
大多数新的 Solana Meme 代币都会遵循以下生命周期:
PumpFun Bonding Curve → ~$69K market cap → Migration → Raydium V4 or PumpSwap
- 代币在 PumpFun 联合曲线上发行
- 买入将市值推升至约 $69K 时,联合曲线完成
- 流动性自动迁移到 Raydium V4 或 PumpSwap
- 自 2025 年 3 月起,PumpFun 默认将流动性迁移至 PumpSwap(其自有 AMM)
- 迁移后,可能会在其他 DEX 上创建更多池
分析方面的启示:
- 通过 PumpFun 毕业流程创建的池,其初始流动性已知(约 $12K)
- 刚毕业不久的池,rug 风险更高
- 检查创建者的 LP 代币是否已锁定或可销毁
手动创建池
并非通过 PumpFun 发行的代币,其池由人工创建:
- Raydium V4 需要 OpenBook 市场及池初始化
- Raydium CLMM、Orca 和 Meteora 支持直接创建池
- 手动创建允许设置任意初始流动性金额
4. 交易量效率(交易量/TVL 比率)
交易量效率衡量池的流动性被使用得有多活跃:
volume_efficiency = volume_24h / tvl
| V/TVL 比率 | 解读 |
|---|---|
| > 5.0 | 换手率极高——可能存在洗盘交易或机器人活动 |
| 1.0–5.0 | 交易活跃——池的利用情况良好 |
| 0.1–1.0 | 活动中等——中市值代币的正常水平 |
| < 0.1 | 活动低迷——池已过时或被弃用 |
| 0.0 | 没有交易——死池 |
根据交易量效率估算费用 APR:
fee_apr = volume_efficiency * fee_rate * 365
# Example: V/TVL of 2.0 at 0.25% fee = 2.0 * 0.0025 * 365 = 182.5% APR
这是理论上的最高值——LP 的实际回报取决于无常损失、仓位区间(针对集中流动性)以及费用分成。
5. 池健康指标
核心指标
pool_health = {
"tvl_usd": 150_000, # Total value locked
"volume_24h_usd": 300_000, # 24-hour trading volume
"volume_tvl_ratio": 2.0, # Volume efficiency
"fee_apr_estimate": 182.5, # Annualized fee rate (%)
"pool_age_hours": 720, # Time since creation
"lp_count_estimate": 45, # Number of LP positions
"tvl_trend_24h": -0.05, # TVL change (-5%)
"price_change_24h": 0.12, # Price change (+12%)
}
风险信号
评估池时,请留意以下警示信号:
| 风险信号 | 阈值 | 风险 |
|---|---|---|
| 池创建时间很短 | 创建不到 24 小时 | Rug pull、代币未经审核 |
| 单一 LP | LP 数量 = 1 | 创建者可撤走全部流动性 |
| TVL 下降 | 24 小时内下降 > 20% | 流动性撤离 |
| 交易量为零 | 6 小时以上无交易 | 已死或被弃用 |
| V/TVL 极高 | > 10x | 洗盘交易、机器人操纵 |
| TVL 极低 | < $1,000 | 任何交易都会产生巨大滑点 |
健康评分算法
def compute_health_score(
tvl_usd: float,
volume_24h: float,
pool_age_hours: float,
lp_count: int,
tvl_change_24h: float,
) -> float:
"""Score from 0-100 indicating pool health.
Components (each 0-20):
- TVL adequacy: Is there enough liquidity?
- Volume efficiency: Is the pool actively traded?
- Maturity: How long has the pool existed?
- LP diversity: How many independent LPs?
- TVL stability: Is liquidity growing or shrinking?
"""
# TVL score (0-20): logarithmic scale, peaks at $1M+
tvl_score = min(20, max(0, 5 * math.log10(max(tvl_usd, 1)) - 10))
# Volume score (0-20): V/TVL ratio, sweet spot 0.5-3.0
v_tvl = volume_24h / max(tvl_usd, 1)
volume_score = min(20, max(0, v_tvl * 10)) if v_tvl < 5 else max(0, 20 - (v_tvl - 5) * 4)
# Age score (0-20): older = more trusted
age_score = min(20, pool_age_hours / 72 * 20) # Max at 72h
# LP diversity score (0-20)
lp_score = min(20, lp_count * 2) # Max at 10 LPs
# Stability score (0-20): penalize large negative TVL changes
stability_score = max(0, 20 + tvl_change_24h * 40) # -50% → 0, 0% → 20
return tvl_score + volume_score + age_score + lp_score + stability_score
6. 执行交易的最佳池选择
当某个代币交易对存在多个池时,选择最适合执行交易的池:
def rank_pools_for_execution(pools: list[dict], trade_size_usd: float) -> list[dict]:
"""Rank pools by execution quality for a given trade size.
Factors:
1. Sufficient TVL (trade size < 2% of TVL for acceptable slippage)
2. Active volume (recent trades confirm the pool is live)
3. Lowest fee tier (when liquidity is sufficient)
4. Pool type efficiency (concentrated > constant product for same TVL)
5. Pool health score (age, LP count, stability)
"""
for pool in pools:
size_ratio = trade_size_usd / max(pool["tvl_usd"], 1)
pool["estimated_slippage"] = size_ratio * 100 # Rough % estimate
# Prefer pools where trade is < 2% of TVL
pool["size_ok"] = size_ratio < 0.02
# Concentrated liquidity is more efficient
efficiency_mult = 1.0
if pool["pool_type"] in ("clmm", "whirlpool", "dlmm"):
efficiency_mult = 0.3 # ~3x less slippage per TVL dollar
pool["adjusted_slippage"] = pool["estimated_slippage"] * efficiency_mult
pool["execution_score"] = (
(1.0 / max(pool["adjusted_slippage"], 0.001)) * 0.5
+ pool.get("health_score", 50) * 0.3
+ (1.0 / max(pool["fee_rate"], 0.0001)) * 0.2
)
return sorted(pools, key=lambda p: p["execution_score"], reverse=True)
7. 程序 ID 速查
PROGRAM_IDS = {
"raydium_v4": "675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8",
"raydium_clmm": "CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK",
"orca_whirlpool": "whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc",
"meteora_dlmm": "LBUZKhRxPF3XUpBCjp4YzTKgLccjZhTSDM9YuVaPwxo",
"meteora_dynamic": "Eo7WjKq67rjJQSZxS6z3YkapzY3eMj6Xy8X5EQVn5UaB",
"pumpswap": "PSwapMdSai8tjrEXcxFeQth87xC4rRsa4VA5mhGhXkP",
"pumpfun_bonding": "6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P",
}
8. 集成点
与 liquidity-analysis 集成
使用池分析为流动性深度评估提供依据。池类型决定适用哪种流动性模型(恒定乘积、集中流动性或基于 Bin)。
与 lp-math 集成
池类型决定适用哪些数学公式。Raydium V4 使用 xy = k,CLMM/Whirlpool 使用基于 tick 的数学计算,DLMM 使用 Bin 数学计算。完整推导请参阅 lp-math。
与 slippage-modeling 集成
最佳池选择会直接影响滑点估算。集中流动性池的滑点曲线与恒定乘积池不同。
与 jupiter-api 集成
Jupiter 会自动聚合所有池类型。池分析有助于理解 Jupiter 为何通过特定池进行路由,并验证路由质量。
9. 工作流示例
import httpx
# Step 1: Fetch all pools for a token from DexScreener
async def analyze_token_pools(token_mint: str) -> dict:
url = f"https://api.dexscreener.com/tokens/v1/solana/{token_mint}"
async with httpx.AsyncClient() as client:
resp = await client.get(url)
pools = resp.json()
results = []
for pool in pools:
dex = pool.get("dexId", "unknown")
pool_info = {
"dex": dex,
"pool_address": pool.get("pairAddress"),
"tvl_usd": pool.get("liquidity", {}).get("usd", 0),
"volume_24h": pool.get("volume", {}).get("h24", 0),
"age_hours": pool.get("pairCreatedAt", 0),
"fee_rate": estimate_fee_rate(dex),
"pool_type": classify_pool_type(dex),
}
pool_info["volume_efficiency"] = (
pool_info["volume_24h"] / max(pool_info["tvl_usd"], 1)
)
results.append(pool_info)
return {"token": token_mint, "pool_count": len(results), "pools": results}
文件
参考资料
references/pool_mechanics.md— 各类池的详细机制,包括程序 ID 和公式references/pool_analysis_guide.md— 池的健康指标、风险信号、交易量效率和最佳池选择
脚本
scripts/analyze_pools.py— 获取并分析代币的所有池,按执行质量排序scripts/pool_monitor.py— 随时间监控池指标,检测流动性事件
此技能提供用于分析 DEX 池特征的工具和信息,不提供财务建议或交易建议。