MCPInstall

lp-math

AMM liquidity provision mathematics including constant-product, concentrated liquidity, price impact, and LP share calculations

Installs
433
Last 24h
—
Trending rank
—
Security
Not audited

Install

Works with every agent the skills CLI supports.

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

    Install

    Run the command in your project. The CLI asks which agents to install for.

  2. 02

    Describe the task

    Ask your agent for something this skill covers. It loads lp-math automatically when relevant.

  3. 03

    Review the result

    The agent follows the SKILL.md steps, scripts and references bundled with the skill.

SKILL.md

The instructions your agent reads when the skill is triggered.

LP Math — AMM Liquidity Provision Mathematics

Automated Market Makers (AMMs) replace traditional orderbooks with liquidity pools. Instead of matching buyers and sellers, a mathematical formula determines prices based on reserve ratios. Liquidity providers (LPs) deposit both assets into a pool and earn fees from every trade.

Understanding the math behind AMMs is essential for:

  • Evaluating whether providing liquidity is profitable after impermanent loss
  • Estimating price impact before executing large trades
  • Comparing capital efficiency across pool types (constant product vs concentrated)
  • Calculating expected fee revenue for a given pool position

Related skills: See impermanent-loss for IL calculations, yield-analysis for LP yield modeling, liquidity-analysis for pool depth assessment.


1. Constant Product AMM (xy = k)

The foundational AMM model used by Raydium V4 and most Solana DEXes.

Core Invariant

x * y = k

Where:

  • x = reserve amount of token X (e.g., SOL)
  • y = reserve amount of token Y (e.g., USDC)
  • k = constant product (increases over time from fees)

Spot Price

P = x / y    (price of Y in terms of X)
P = y / x    (price of X in terms of Y)

For a pool with 100 SOL and 10,000 USDC: price of SOL = 10,000 / 100 = 100 USDC.

Trade Execution

When a trader swaps Δx of token X into the pool:

# 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

The key insight: larger trades get worse prices because each unit moves the ratio further.

Inverse Calculation

To get a specific output amount Δy, the required input is:

delta_x = x * delta_y / (y - delta_y)

Price After Trade

price_new = y_new / x_new

Worked Example

Pool: 100 SOL / 10,000 USDC (k = 1,000,000), fee = 0.3%

Buy 5 SOL worth of USDC:

  1. Gross output: 10,000 * 5 / (100 + 5) = 476.19 USDC
  2. Fee: 476.19 * 0.003 = 1.43 USDC
  3. Net output: 474.76 USDC
  4. Effective price: 474.76 / 5 = 94.95 USDC/SOL (vs spot 100)
  5. Price impact: (100 - 94.95) / 100 = 5.05%
  6. New reserves: 105 SOL / 9,525.24 USDC
  7. New k: 105 * 9,525.24 = 1,000,150.2 (k increased from fees)

See references/amm_formulas.md for complete derivations.


2. Concentrated Liquidity (CLMM)

Used by Orca Whirlpool, Raydium CLMM, and Meteora DLMM. Liquidity is only active within a chosen price range [P_lower, P_upper].

Key Concepts

L = sqrt(x * y)           # Liquidity within the active range
price_at_tick = 1.0001^tick  # Tick-to-price conversion

Capital Efficiency

Concentrating liquidity in a narrow range provides more depth per dollar:

# 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

A ±5% range is ~20x more capital-efficient than full-range, but the position goes 100% into one asset if price moves outside the range.

Position Value

For a CLMM position with liquidity L in range [P_lower, P_upper] at current price P:

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))

Range Strategy Comparison

RangeEfficiencyIL RiskFee CaptureBest For
±2%~50xVery highHigh if in rangeStablecoins, tight pegs
±5%~20xHighGood for trendingActive management
±25%~4xModerateConsistentSemi-passive
±100%~2xLowLower per $Passive, volatile pairs
Full range1xBaselineAlways earningSet and forget

See references/amm_formulas.md for full CLMM derivations.


3. Price Impact

Constant Product Impact

# 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

Multi-Hop Impact

For a route through multiple pools, compound the impacts:

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

Impact Thresholds

ImpactAssessmentAction
< 0.1%NegligibleProceed normally
0.1–0.5%LowAcceptable for most trades
0.5–2%ModerateConsider splitting across pools
2–5%HighSplit trade, use TWAP
> 5%SevereReduce size or find deeper pools

4. LP Share Calculations

Initial Deposit (Empty Pool)

shares = sqrt(x_deposited * y_deposited)

The first depositor sets the ratio and receives shares equal to the geometric mean.

Subsequent Deposits

shares_minted = min(
    x_added / x_reserve,
    y_added / y_reserve
) * total_shares

Deposits must be proportional to the current reserve ratio. Any excess of one token is not used (or returned, depending on implementation).

Withdrawal

x_out = (shares_burned / total_shares) * x_reserve
y_out = (shares_burned / total_shares) * y_reserve

You always receive both tokens in the current ratio.

Share Value

share_value = pool_tvl / total_shares
your_value = your_shares * share_value

5. Fee Accrual

Fees accumulate inside the pool, increasing 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%

For CLMM positions, fee earnings depend on:

  • Whether price stays within your range (out-of-range = no fees)
  • Your share of active liquidity in that range
  • Total volume routed through the pool
# 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 Pool Types

Raydium V4 (Constant Product)

  • Model: Standard xy = k
  • Fee: 0.25% (0.22% to LP, 0.03% to RAY buyback)
  • Best for: New token launches, volatile pairs
  • Note: Integrated with OpenBook for limit order flow

Orca Whirlpool (Concentrated Liquidity)

  • Model: Concentrated liquidity with tick spacing
  • Fee tiers: 0.01%, 0.05%, 0.3%, 1%
  • Position: Represented as NFT (each position is unique)
  • Best for: Major pairs (SOL/USDC), stablecoin pairs

Raydium CLMM

  • Model: Concentrated liquidity (similar to Uniswap V3)
  • Tick spacing: 1, 10, 60, 200
  • Fee tiers: 0.01%, 0.05%, 0.25%, 1%
  • Best for: Pairs with predictable ranges

Meteora DLMM (Dynamic Liquidity Market Maker)

  • Model: Discrete bins instead of continuous ticks
  • Strategies: Spot (uniform), Curve (concentrated), Bid-Ask (around current price)
  • Fees: Dynamic, adjusting based on volatility
  • Best for: Active LPs who rebalance frequently

See references/pool_mechanics.md for detailed mechanics and comparison.


7. Practical Decision Framework

Should You 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

Which Pool Type?

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

Position Sizing for 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)

Files

References

  • references/amm_formulas.md — Complete mathematical derivations for constant product and concentrated liquidity AMMs
  • references/pool_mechanics.md — Solana-specific pool mechanics for Raydium, Orca, and Meteora

Scripts

  • scripts/amm_calculator.py — Constant product AMM calculator with trade simulation, LP shares, and fee accrual
  • scripts/clmm_calculator.py — Concentrated liquidity calculator with position valuation, capital efficiency, and range comparison

Quick Reference

FormulaExpression
Constant productx * y = k
Spot priceP = y / x
Trade outputΔy = y * Δx / (x + Δx)
Required inputΔx = x * Δy / (y - Δy)
Price impactΔx / (x + Δx)
Initial LP sharessqrt(x * y)
Subsequent sharesmin(Δx/x, Δy/y) * total
Fee APR(daily_fees * 365) / TVL
CLMM efficiencysqrt(P_u/P_l) / (sqrt(P_u/P_l) - 1)
Tick to price1.0001^tick

FAQ

What does the lp-math skill do?

AMM liquidity provision mathematics including constant-product, concentrated liquidity, price impact, and LP share calculations

How do I install lp-math?

Run npx skills add https://github.com/agiprolabs/claude-trading-skills --skill lp-math in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/lp-math/ (personal) or .claude/skills/lp-math/ (project).

Which AI agents can use lp-math?

Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.

Is lp-math safe to install?

No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.

Who maintains lp-math?

It is published by agiprolabs in agiprolabs/claude-trading-skills. It has 433 recorded installs.

More from agiprolabs/claude-trading-skills

View all →

walk-forward-validation

agiprolabs/claude-trading-skills

Walk-forward validation framework for trading strategies and ML models with time-series-aware splits, overfit detection, and regime-aware validation

Business & Finance714 installs

risk-management

agiprolabs/claude-trading-skills

Portfolio-level risk controls, drawdown management, exposure limits, and circuit breakers for crypto trading

Business & Finance637 installs

pandas-ta

agiprolabs/claude-trading-skills

Technical analysis with 130+ indicators using pandas-ta for crypto market data

Data & Databases593 installs

position-sizing

agiprolabs/claude-trading-skills

Trade sizing methods including fixed fractional, volatility-adjusted, Kelly criterion, and liquidity-constrained sizing

Business & Finance581 installs

regime-detection

agiprolabs/claude-trading-skills

Market regime identification using volatility clustering, trend detection, and statistical methods for adaptive trading

Business & Finance578 installs

kelly-criterion

agiprolabs/claude-trading-skills

Kelly criterion optimal sizing with fractional variants, edge estimation, and practical application for crypto trading

Business & Finance534 installs

Popular education & science skills

View category →

teach

mattpocock/skills

Teach the user a new skill or concept, within this workspace.

Education & Science874K installs

scaffold-exercises

mattpocock/skills

Create exercise directory structures with sections, problems, solutions, and explainers that pass linting. Use when user wants to scaffold exercises, create exercise stubs, or set up a new course section.

Education & Science488.2K installs

paper-context-resolver

lllllllama/rigorpilot-skills

Rigor Paper Context helper for README-first deep learning repo reproduction. Use only when the README and repository files leave a narrow reproduction-critical gap and the task is to resolve a specific paper detail such as dataset split, preprocessing, evaluation protocol, checkpoint mapping, or runtime assumption from primary paper sources while recording conflicts. Do not use for general paper summary, repo scanning, environment setup, command execution, title-only paper lookup, or replacing README guidance by default.

Education & Science478.3K installs

caveman-learn

juliusbrussee/caveman

Act on a Caveman learn report - review the ranked token sinks, apply cost-lowering fixes with per-edit consent, and report what those fixes returned. Use when asked to lower an agent's token cost, what caveman has saved, to trim a heavy CLAUDE.md, or to offload re-pasted context into cavemem.

Education & Science107.9K installs

gsap-plugins

greensock/gsap-skills

Official GSAP skill for GSAP plugins — registration, ScrollToPlugin, ScrollSmoother, Flip, Draggable, Inertia, Observer, SplitText, ScrambleText, SVG and physics plugins, CustomEase, EasePack, CustomWiggle, CustomBounce, GSDevTools. Use when the user asks about a GSAP plugin, scroll-to, flip animations, draggable, SVG drawing, or plugin registration.

Education & Science67.9K installs

teach-impeccable

pbakaus/impeccable

DEPRECATED: Use /impeccable teach instead. This command has been folded into the impeccable skill.