DEX 유동성 풀 수익 전략

DEX 유동성 풀이란?

탈중앙화 거래소(DEX)의 유동성 풀은 두 개의 토큰을 일정 비율로 예치하여 거래 유동성을 제공하고, 그 대가로 거래 수수료를 받는 구조다. Uniswap, Curve, PancakeSwap 등이 대표적이며, 퀀트 투자 관점에서 보면 하나의 수익 전략 자산군이 된다.

유동성 공급자(LP)가 되면 거래가 발생할 때마다 수수료의 일정 비율을 받는다. 하지만 단순히 높은 APY만 보고 진입하면 비영구적 손실(Impermanent Loss)로 오히려 손해를 볼 수 있다. 이 글에서는 유동성 풀 수익을 체계적으로 분석하고 최적화하는 퀀트 접근법을 다룬다.

비영구적 손실 정확히 이해하기

비영구적 손실(IL)은 LP가 풀에 예치한 후 두 토큰의 가격 비율이 변할 때 발생하는 손실이다. 단순 보유(HODL) 대비 손실을 의미한다.

import numpy as np

def impermanent_loss(price_ratio):
    """가격 비율 변화에 따른 비영구적 손실 계산
    price_ratio: 현재가/진입가 비율 (예: 2.0 = 2배 상승)
    반환값: 손실 비율 (음수 = 손실)
    """
    return 2 * np.sqrt(price_ratio) / (1 + price_ratio) - 1

# 가격 변화별 IL 계산
for change in [0.5, 0.75, 1.0, 1.25, 1.5, 2.0, 3.0, 5.0]:
    il = impermanent_loss(change)
    print(f"가격 {change:.2f}배 → IL: {il*100:.2f}%")
가격 변화 비영구적 손실 필요 APY (손익분기)
±25% -0.6% ~1%
±50% -2.0% ~4%
2배 상승 -5.7% ~12%
3배 상승 -13.4% ~30%
5배 상승 -25.5% ~60%

핵심은 수수료 수익이 비영구적 손실을 상회해야 순수익이 양수가 된다는 것이다. 이를 정량적으로 분석하는 것이 퀀트 LP 전략의 출발점이다.

Uniswap V3 집중 유동성 전략

Uniswap V3는 특정 가격 범위에 유동성을 집중할 수 있다. 범위가 좁을수록 자본 효율이 높아지지만, 가격이 범위를 벗어나면 수수료 수입이 0이 된다.

def v3_capital_efficiency(price_lower, price_upper, current_price):
    """V3 집중 유동성의 자본 효율 배수"""
    sqrt_lower = np.sqrt(price_lower)
    sqrt_upper = np.sqrt(price_upper)
    sqrt_current = np.sqrt(current_price)
    
    # V2 대비 자본 효율
    efficiency = sqrt_current / (sqrt_current - sqrt_lower)
    efficiency *= sqrt_upper / (sqrt_upper - sqrt_lower)
    return efficiency

def optimal_range(current_price, volatility, confidence=0.95):
    """변동성 기반 최적 가격 범위 설정
    volatility: 일간 변동성
    confidence: 범위 내 유지 확률
    """
    from scipy.stats import norm
    z = norm.ppf((1 + confidence) / 2)
    daily_range = volatility * z
    
    # 7일 유지 가정
    weekly_range = daily_range * np.sqrt(7)
    
    lower = current_price * (1 - weekly_range)
    upper = current_price * (1 + weekly_range)
    return lower, upper

# 예시: BTC 현재가 $65,000, 일간 변동성 3%
lower, upper = optimal_range(65000, 0.03, confidence=0.90)
print(f"추천 범위: ${lower:,.0f} ~ ${upper:,.0f}")
efficiency = v3_capital_efficiency(lower, upper, 65000)
print(f"자본 효율: V2 대비 {efficiency:.1f}배")

범위 설정의 핵심 원칙:

  • 변동성이 높은 자산 → 넓은 범위 (가격 이탈 방지)
  • 스테이블코인 페어 → 매우 좁은 범위 (USDC/USDT 등)
  • 추세 시장 → 추세 방향으로 비대칭 범위 설정

수수료 수익 시뮬레이션

LP 수익을 정확히 추정하려면 거래량, 수수료율, TVL, 자신의 지분 비율을 계산해야 한다.

def estimate_lp_return(
    deposit_amount,
    pool_tvl,
    daily_volume,
    fee_tier=0.003,  # 0.3%
    days=30,
    price_change=1.0
):
    """LP 예상 순수익 계산"""
    # 내 지분 비율
    share = deposit_amount / (pool_tvl + deposit_amount)
    
    # 수수료 수익
    daily_fees = daily_volume * fee_tier * share
    total_fees = daily_fees * days
    
    # 비영구적 손실
    il = impermanent_loss(price_change) * deposit_amount
    
    # 순수익
    net_return = total_fees + il
    apy = (net_return / deposit_amount) * (365 / days) * 100
    
    return {
        'total_fees': total_fees,
        'impermanent_loss': il,
        'net_return': net_return,
        'apy': apy
    }

# 예시: $10,000 예치, TVL $5M, 일 거래량 $2M
result = estimate_lp_return(
    deposit_amount=10000,
    pool_tvl=5_000_000,
    daily_volume=2_000_000,
    fee_tier=0.003,
    days=30,
    price_change=1.3  # 30% 상승
)
print(f"수수료 수익: ${result['total_fees']:,.2f}")
print(f"비영구적 손실: ${result['impermanent_loss']:,.2f}")
print(f"순수익: ${result['net_return']:,.2f}")
print(f"연환산 APY: {result['apy']:.1f}%")

리밸런싱 자동화 전략

Uniswap V3에서 가격이 설정 범위를 벗어나면 유동성을 회수하고 새로운 범위로 재설정해야 한다. 이 리밸런싱 빈도가 수익에 큰 영향을 미친다.

class LPRebalancer:
    def __init__(self, web3, pool_contract, nft_manager):
        self.web3 = web3
        self.pool = pool_contract
        self.nft = nft_manager
        self.position_id = None
    
    def check_in_range(self):
        """현재 가격이 포지션 범위 내인지 확인"""
        slot0 = self.pool.functions.slot0().call()
        current_tick = slot0[1]
        
        if self.position_id:
            pos = self.nft.functions.positions(self.position_id).call()
            tick_lower = pos[5]
            tick_upper = pos[6]
            return tick_lower <= current_tick <= tick_upper
        return False
    
    def rebalance(self, volatility):
        """범위 이탈 시 리밸런싱"""
        if self.check_in_range():
            return  # 범위 내면 유지
        
        # 1. 기존 포지션 회수
        self.remove_liquidity()
        
        # 2. 새 범위 계산
        current_price = self.get_current_price()
        lower, upper = optimal_range(current_price, volatility)
        
        # 3. 새 포지션 생성
        self.add_liquidity(lower, upper)
        print(f"리밸런싱 완료: {lower:.2f} ~ {upper:.2f}")

리밸런싱 시 가스비가 발생하므로, 가스비 대비 수수료 수익이 충분한지 사전에 계산해야 한다. 이더리움 메인넷에서는 가스비가 $20~100 수준이므로, 소액 LP는 폴리곤이나 아비트럼 같은 L2 체인이 유리하다.

위험 관리와 풀 선택 기준

성과 지표 분석과 마찬가지로, LP 전략도 리스크를 정량화해야 한다.

풀 선택 체크리스트

  • TVL $1M 이상 — 유동성이 너무 낮으면 슬리피지 위험
  • 일 거래량/TVL 비율 20% 이상 — 낮으면 수수료 수익 부족
  • 스마트 컨트랙트 감사(Audit) 완료 — 해킹 리스크 확인
  • 토큰 기초체력 — 한쪽 토큰이 0에 수렴하면 전체 원금 손실
  • 프로토콜 인센티브 — 추가 토큰 보상이 있는지 확인

리스크 분산 전략

PORTFOLIO = {
    # 안정형 (50% 배분) - 낮은 IL, 꾸준한 수수료
    'USDC/USDT': {'allocation': 0.25, 'fee_tier': 0.0001},
    'DAI/USDC':  {'allocation': 0.25, 'fee_tier': 0.0001},
    
    # 중간형 (30% 배분) - 적정 IL, 높은 거래량
    'ETH/USDC':  {'allocation': 0.15, 'fee_tier': 0.003},
    'WBTC/ETH':  {'allocation': 0.15, 'fee_tier': 0.003},
    
    # 공격형 (20% 배분) - 높은 APY, 높은 IL 위험
    'ARB/ETH':   {'allocation': 0.10, 'fee_tier': 0.003},
    'SOL/USDC':  {'allocation': 0.10, 'fee_tier': 0.003},
}

스테이블코인 페어를 포트폴리오의 기반으로 삼고, 계좌 생존 규칙을 적용하여 공격형 풀에는 전체 자금의 20% 이하만 배분하는 것이 안전하다.

실전 모니터링 자동화

LP 포지션은 한번 설정하고 방치하면 안 된다. 아래 항목을 자동으로 모니터링해야 한다:

  • 가격 범위 이탈 여부 — 이탈 즉시 알림
  • 누적 수수료 수익 — IL 대비 수익 추적
  • 풀 TVL 급감 — 러그풀 조기 경고
  • 가스비 추이 — 리밸런싱 타이밍 최적화
  • APY 변동 — 거래량 감소로 APY 하락 시 이탈 검토

정리

DEX 유동성 풀은 퀀트 투자자에게 새로운 수익원이 될 수 있지만, 비영구적 손실을 정확히 이해하고 수수료 수익과의 손익분기를 계산해야 한다. Uniswap V3의 집중 유동성은 자본 효율을 극대화하지만 리밸런싱 비용과 범위 관리가 필수다. 변동성 기반 범위 설정, 포트폴리오 분산, 자동 모니터링을 결합하면 체계적인 LP 수익 전략을 구축할 수 있다.

위로 스크롤
WordPress Appliance - Powered by TurnKey Linux