lp-math について
取引や流動性ポジションを評価するトレーダーとLP向けの、AMM数理リファレンス兼計算スキルです。定積モデルと集中流動性の式、価格インパクト、LPシェア、手数料を扱います。
主な機能
- 01定積モデルのスワップと準備金計算
- 02集中流動性ポジションの評価
- 03価格インパクトとマルチホップ推定
- 04LPシェアと手数料の計算
- 05Solanaプールの仕組みの解説
活用シーン
- 01スワップ前の価格インパクト推定
- 02流動性レンジと資本効率の比較
- 03手数料とインパーマネントロスリスクの評価
- 04LP預け入れのシェアと価値の計算
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ agiprolabs/ claude-trading-skills --skill lp-mathインストール後、Claude Code で/lp-mathを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/amm_formulas.mdpool_mechanics.mdscripts/amm_calculator.pyclmm_calculator.py詳細
LP Math — AMM 流動性提供の数学
自動マーケットメーカー(AMM)は、従来のオーダーブックを流動性プールに置き換えます。買い手と売り手をマッチングする代わりに、リザーブの比率に基づいて数式で価格を決定します。流動性提供者(LP)は両方の資産をプールに預け入れ、すべての取引から手数料を獲得します。
AMM の数学を理解することは、次の点で不可欠です。
- インパーマネントロスを考慮したうえで、流動性提供に利益があるかを評価する
- 大口取引を実行する前に価格インパクトを見積もる
- プールの種類(定積型と集中流動性型)ごとの資本効率を比較する
- 特定のプールポジションで見込まれる手数料収益を計算する
関連スキル:IL の計算については impermanent-loss、LP 利回りのモデル化については yield-analysis、プールの厚みの評価については liquidity-analysis を参照してください。
1. 定積型 AMM(xy = k)
Raydium V4 やほとんどの Solana DEX で使われている基礎的な AMM モデルです。
基本不変量
x * y = k
各記号の意味は次のとおりです。
x= トークン X のリザーブ量(例:SOL)y= トークン Y のリザーブ量(例:USDC)k= 定積(手数料によって時間とともに増加します)
スポット価格
P = x / y (price of Y in terms of X)
P = y / x (price of X in terms of Y)
100 SOL と 10,000 USDC のプールの場合、SOL の価格は 10,000 / 100 = 100 USDC です。
取引の実行
トレーダーがトークン X を Δx だけプールにスワップする場合:
# Output amount (before fees)
delta_y = y * delta_x / (x + delta_x)
# With fee (e.g., 0.3%)
delta_y_after_fee = delta_y * (1 - fee_rate)
# New reserves
x_new = x + delta_x
y_new = y - delta_y_after_fee
重要なポイント:大口取引ほど価格が不利になります。各単位を取引するたびに比率がさらに動くためです。
逆算
特定の出力量 Δy を得るために必要な入力は次のとおりです。
delta_x = x * delta_y / (y - delta_y)
取引後の価格
price_new = y_new / x_new
計算例
プール:100 SOL / 10,000 USDC(k = 1,000,000)、手数料 = 0.3%
5 SOL 相当の USDC を購入する場合:
- 手数料控除前の出力量:
10,000 * 5 / (100 + 5) = 476.19 USDC - 手数料:
476.19 * 0.003 = 1.43 USDC - 手数料控除後の出力量:
474.76 USDC - 実効価格:
474.76 / 5 = 94.95 USDC/SOL(スポット価格は 100) - 価格インパクト:
(100 - 94.95) / 100 = 5.05% - 新しいリザーブ:105 SOL / 9,525.24 USDC
- 新しい k:
105 * 9,525.24 = 1,000,150.2(手数料によって k が増加)
完全な導出については references/amm_formulas.md を参照してください。
2. 集中流動性(CLMM)
Orca Whirlpool、Raydium CLMM、Meteora DLMM で使われています。流動性は、指定した価格範囲 [P_lower, P_upper] 内でのみ有効です。
主な概念
L = sqrt(x * y) # Liquidity within the active range
price_at_tick = 1.0001^tick # Tick-to-price conversion
資本効率
狭い範囲に流動性を集中させると、1 ドルあたりの厚みが増します。
# Capital efficiency ratio
efficiency = sqrt(P_upper / P_lower) / (sqrt(P_upper / P_lower) - 1)
# Example: ±5% range around $100 SOL
P_lower, P_upper = 95, 105
efficiency = sqrt(105/95) / (sqrt(105/95) - 1) # ≈ 20.5x
±5% の範囲ではフルレンジと比べて資本効率が約 20 倍になりますが、価格が範囲外に動くとポジションは 100% 片方の資産になります。
ポジション価値
現在価格が P のとき、範囲 [P_lower, P_upper] 内にある流動性 L の CLMM ポジションについて:
if P <= P_lower:
# All in token X (below range)
value_x = L * (1/sqrt(P_lower) - 1/sqrt(P_upper))
value_y = 0
elif P >= P_upper:
# All in token Y (above range)
value_x = 0
value_y = L * (sqrt(P_upper) - sqrt(P_lower))
else:
# In range — holds both tokens
value_x = L * (1/sqrt(P) - 1/sqrt(P_upper))
value_y = L * (sqrt(P) - sqrt(P_lower))
レンジ戦略の比較
| 範囲 | 効率 | IL リスク | 手数料の獲得 | 最適な用途 |
|---|---|---|---|---|
| ±2% | 約 50 倍 | 非常に高い | 範囲内なら高い | ステーブルコイン、狭いペッグ |
| ±5% | 約 20 倍 | 高い | トレンド相場に適している | 積極的な運用 |
| ±25% | 約 4 倍 | 中程度 | 安定している | セミパッシブ運用 |
| ±100% | 約 2 倍 | 低い | 1 ドルあたりでは低め | パッシブ運用、価格変動の大きいペア |
| フルレンジ | 1 倍 | 基準 | 常に獲得 | 設定後は放置 |
CLMM の完全な導出については references/amm_formulas.md を参照してください。
3. 価格インパクト
定積型の価格インパクト
# Price impact as a fraction
price_impact = delta_x / (x + delta_x)
# As percentage of pool
pool_fraction = trade_value / pool_tvl
# Rule of thumb: impact ≈ 2 * pool_fraction for constant product
複数ホップの価格インパクト
複数のプールを経由するルートでは、価格インパクトを複利で計算します。
def multi_hop_impact(hops: list[dict]) -> float:
"""Calculate total price impact across route legs.
Args:
hops: List of {reserve_in, trade_amount} for each leg.
Returns:
Total price impact as a fraction.
"""
remaining = 1.0
for hop in hops:
leg_impact = hop["trade_amount"] / (hop["reserve_in"] + hop["trade_amount"])
remaining *= (1 - leg_impact)
return 1 - remaining
インパクトのしきい値
| インパクト | 評価 | 対応 |
|---|---|---|
| < 0.1% | 無視できる | 通常どおり進める |
| 0.1–0.5% | 低い | ほとんどの取引で許容可能 |
| 0.5–2% | 中程度 | プール間で分割することを検討する |
| 2–5% | 高い | 取引を分割し、TWAP を使う |
| > 5% | 深刻 | サイズを縮小するか、より深いプールを探す |
4. LP シェアの計算
初回預け入れ(空のプール)
shares = sqrt(x_deposited * y_deposited)
最初の預け入れ者が比率を設定し、幾何平均に等しいシェアを受け取ります。
2 回目以降の預け入れ
shares_minted = min(
x_added / x_reserve,
y_added / y_reserve
) * total_shares
預け入れは、現在のリザーブ比率に比例している必要があります。一方のトークンに余剰がある場合、その分は使用されないか、実装によっては返却されます。
出金
x_out = (shares_burned / total_shares) * x_reserve
y_out = (shares_burned / total_shares) * y_reserve
現在の比率に基づき、両方のトークンを常に受け取ります。
シェア価値
share_value = pool_tvl / total_shares
your_value = your_shares * share_value
5. 手数料の蓄積
手数料はプール内に蓄積され、k が増加します。
# Before trade: k = x * y
# After trade with fee:
# k_new = (x + delta_x) * (y - delta_y_net) > k
# The difference is the fee retained in the pool
# Fee APR estimation
daily_volume = 500_000 # USD
fee_rate = 0.003 # 0.3%
daily_fees = daily_volume * fee_rate # $1,500
tvl = 2_000_000 # $2M pool
fee_apr = (daily_fees * 365) / tvl # 27.4%
CLMM ポジションの手数料収益は、以下の要素によって決まります。
- 価格が自分の範囲内にとどまっているかどうか(範囲外では手数料は発生しません)
- その範囲内のアクティブな流動性に占める自分のシェア
- プールを経由する総取引量
# CLMM fee estimation
your_liquidity = 50_000 # Your L
total_liquidity = 1_000_000 # Total L in your tick range
your_share = your_liquidity / total_liquidity # 5%
your_daily_fees = daily_fees * your_share # $75
6. Solana のプールタイプ
Raydium V4(定積)
- モデル:標準的な xy = k
- 手数料:0.25%(0.22% は LP 向け、0.03% は RAY の買い戻し向け)
- 最適な用途:新しいトークンのローンチ、価格変動の大きいペア
- 注:指値注文のフローに対応するため、OpenBook と統合されています
Orca Whirlpool(集中流動性)
- モデル:ティック間隔を使用した集中流動性
- 手数料階層:0.01%、0.05%、0.3%、1%
- ポジション:NFT として表されます(各ポジションは固有です)
- 最適な用途:主要なペア(SOL/USDC)、ステーブルコインのペア
Raydium CLMM
- モデル:集中流動性(Uniswap V3 に類似)
- ティック間隔:1、10、60、200
- 手数料階層:0.01%、0.05%、0.25%、1%
- 最適な用途:予測可能な価格範囲を持つペア
Meteora DLMM(動的流動性マーケットメーカー)
- モデル:連続したティックではなく、離散的なビンを使用
- 戦略:Spot(均等)、Curve(集中)、Bid-Ask(現在価格付近)
- 手数料:動的で、価格変動に応じて調整されます
- 最適な用途:頻繁にリバランスするアクティブな LP
詳細な仕組みと比較については、references/pool_mechanics.md を参照してください。
7. 実践的な判断フレームワーク
LP になるべきでしょうか?
1. Calculate expected fee APR
2. Estimate impermanent loss for expected price movement
3. Net return = fee APR - IL
4. Compare to simply holding the assets
どのプールタイプを選ぶべきでしょうか?
Stablecoin pair → CLMM with tight range (±0.5%)
Major pair (SOL/USDC) → CLMM with moderate range (±10-25%)
New/volatile token → Constant product (full range)
Active management → Meteora DLMM with dynamic rebalancing
LP のポジションサイズ
# Never LP more than you can afford to lose to IL
max_lp_allocation = portfolio_value * 0.20 # 20% max in any single pool
# For volatile pairs, reduce further
volatility_adjustment = 1 - (annualized_vol / 2) # Scale down for vol
adjusted_allocation = max_lp_allocation * max(0.1, volatility_adjustment)
ファイル
リファレンス
references/amm_formulas.md— 定積および集中流動性 AMM の完全な数学的導出references/pool_mechanics.md— Raydium、Orca、Meteora の Solana 固有のプールの仕組み
スクリプト
scripts/amm_calculator.py— 取引シミュレーション、LP シェア、手数料の蓄積に対応した定積 AMM 計算ツールscripts/clmm_calculator.py— ポジション評価、資本効率、価格範囲の比較に対応した集中流動性計算ツール
クイックリファレンス
| 数式 | 式 |
|---|---|
| 定積 | x * y = k |
| スポット価格 | P = y / x |
| 取引出力量 | Δy = y * Δx / (x + Δx) |
| 必要な入力量 | Δx = x * Δy / (y - Δy) |
| 価格への影響 | Δx / (x + Δx) |
| 初期 LP シェア | sqrt(x * y) |
| 以降のシェア | min(Δx/x, Δy/y) * total |
| 手数料 APR | (daily_fees * 365) / TVL |
| CLMM 効率 | sqrt(P_u/P_l) / (sqrt(P_u/P_l) - 1) |
| ティックから価格への変換 | 1.0001^tick |