Research tools for liquidity position analysis, impermanent loss modeling, and AMM microstructure studies.
- CPMM (
ConstantProductPool): Uniswap V2 / SushiSwap x*y=k model with fee accounting and IL calculation - Concentrated (
ConcentratedPool): Uniswap V3 tick-based model with range tracking and per-position fee distribution - StableSwap (
StableSwapPool): Curve-style hybrid invariant with amplification coefficient
- Backtester: LP position performance over historical or synthetic price series
- GBM price generator: Geometric Brownian Motion for Monte Carlo simulations
- PoolFetcher: On-chain V2/V3 pool data via JSON-RPC (no web3 dependency)
from lptk.models import ConstantProductPool
pool = ConstantProductPool(1000, 3000000, fee_bps=30)
print(f"Price: {pool.price:.2f}")
print(f"IL at 2x: {ConstantProductPool.il_from_price_ratio(2.0)*100:.2f}%")
# simulate trades
pool.swap_0_to_1(10)
print(f"Fees: {pool.accumulated_fees()}")from lptk.sim import LPBacktester
from lptk.sim.backtest import BacktestConfig
prices = LPBacktester.generate_gbm_prices(3000, mu=0.5, sigma=0.8, steps=365, seed=42)
bt = LPBacktester(BacktestConfig(initial_capital=10000, fee_bps=30))
result = bt.run(prices)
print(result.summary())python -m pytest tests/ -v