mcpField
L
lp-math

lp-math

github.com/agiprolabsその他456436 回インストール8 週間前に更新
リポジトリ

lp-math について

取引や流動性ポジションを評価するトレーダーとLP向けの、AMM数理リファレンス兼計算スキルです。定積モデルと集中流動性の式、価格インパクト、LPシェア、手数料を扱います。

主な機能

  1. 01定積モデルのスワップと準備金計算
  2. 02集中流動性ポジションの評価
  3. 03価格インパクトとマルチホップ推定
  4. 04LPシェアと手数料の計算
  5. 05Solanaプールの仕組みの解説

活用シーン

  1. 01スワップ前の価格インパクト推定
  2. 02流動性レンジと資本効率の比較
  3. 03手数料とインパーマネントロスリスクの評価
  4. 04LP預け入れのシェアと価値の計算

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/agiprolabs/claude-trading-skills --skill lp-math

インストール後、Claude Code で/lp-mathを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
amm_formulas.md
pool_mechanics.md
scripts/
amm_calculator.py
clmm_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 を購入する場合:

  1. 手数料控除前の出力量:10,000 * 5 / (100 + 5) = 476.19 USDC
  2. 手数料:476.19 * 0.003 = 1.43 USDC
  3. 手数料控除後の出力量:474.76 USDC
  4. 実効価格:474.76 / 5 = 94.95 USDC/SOL(スポット価格は 100)
  5. 価格インパクト:(100 - 94.95) / 100 = 5.05%
  6. 新しいリザーブ:105 SOL / 9,525.24 USDC
  7. 新しい 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

コメント