삼각 차익거래: 세 번의 수수료와 실제 손익분기점 계산

English version

TECH INSIGHT / EXPLAINED

세 토큰을 한 바퀴 교환했을 때, 모든 비용을 뺀 시작 토큰 수량이 늘어야 이익입니다. 화면 가격 세 개의 곱은 후보를 찾는 계산이지 실제 체결 견적이 아닙니다.

세 사람이 순환 교환, 홉마다의 수수료, 가스 비용을 나눠 설명합니다.
AI로 제작한 설명용 일러스트. 세 사람이 순환 교환, 홉마다의 수수료, 가스 비용을 나눠 설명합니다.

단위가 서로 소거되게 계산하기

A → B → C → A에서 환율을 각각 입력 1단위당 출력 수량으로 정의합니다. 곱의 단위는 A/A가 됩니다. 매수는 매도호가, 매도는 매수호가를 사용해야 합니다. 페어 방향을 뒤집을 때는 해당 호가의 역수를 써야지 같은 숫자를 재사용하면 안 됩니다.

로그에는 전체 경로와 그 견적의 블록 또는 호가 스냅숏 시점을 함께 남깁니다. 서로 다른 시점에서 얻은 세 가격을 곱하면 동시에 존재하지 않았던 기회가 만들어질 수 있습니다.

1,000단위로 계산하는 비용 예제

수수료 전 경로 수익률을 가상의 1.2%, 각 홉 수수료를 예시 0.3%로 가정하겠습니다. 이는 모든 거래소에 적용되는 수수료가 아닙니다. 세 번의 수수료와 시작 토큰 2단위 상당의 가스비를 빼면 남는 금액은 0.919296676단위입니다.

from decimal import Decimal as D
start = D('1000')
gross_multiplier = D('1.012')  # hypothetical, before trading fees
keep = D('0.997') ** 3
gas_in_start_token = D('2')
end = start * gross_multiplier * keep - gas_in_start_token
print(end)  # 1000.919296676000
print(D(1) / keep - 1)  # fee-only break-even: about 0.9054%

약 0.9%와 정확한 손익분기점

수수료만 고려한 손익분기 배수는 1/(0.997³)입니다. 따라서 필요한 수수료 전 격차는 약 0.9054%이며 가스와 가격 충격은 아직 포함되지 않았습니다. 견적이 이미 수수료를 포함한다면 0.997을 다시 곱하면 이중 차감입니다.

AMM의 실제 교환 비율은 주문 크기에 따라 달라집니다. 앞 홉의 실제 예상 출력량을 다음 홉의 입력으로 사용합니다. 극소량의 현물 비율을 큰 주문에 그대로 적용하면 안 됩니다. 중앙화 거래소에서는 호가 깊이와 수량 단위에 따른 반올림도 반영해야 합니다.

실행 방식에 따라 실패 비용이 다르다

하나의 원자적 온체인 트랜잭션은 전체가 되돌려져도 가스를 쓸 수 있습니다. 별도 거래소 주문 세 개는 일부만 체결되어 중간 토큰이 남을 수 있습니다. 두 문제를 같은 실패로 처리하지 마세요.

예상 출력, 최소 허용 출력, 예상·실제 비용, 남은 재고를 함께 기록합니다. 오래된 견적은 버리고 불확실성 여유를 둡니다. 이 계산은 조건부 결과를 추정할 뿐 기회가 얼마나 자주 있는지나 제출 후 수익을 보장하지 않습니다.

고정 가스비를 포함하면 주문 크기도 조건이 된다

앞의 가정을 그대로 유지하고 시작 수량만 바꾸어 봅시다. 수수료 후·가스 전 배수는 1.002919296676이고 고정 가스비는 시작 토큰 2단위입니다. 따라서 가상 순증가는 시작 수량 × 0.002919296676 − 2입니다. 아래는 계산 결과를 소수 여섯 자리로 반올림한 표이며 실거래 관측값이 아닙니다.

시작 수량비용 후 순증가
500−0.540352
1,0000.919297
2,0003.838593

이 단순 모형의 손익분기 시작 수량은 약 685.096522입니다. 그러나 이를 실제 최소 주문으로 적용하면 안 됩니다. 수량을 늘려도 같은 환율과 가스비가 유지된다는 가정만 검산한 값입니다. 유한한 풀에서는 가격 충격이, 호가창에서는 더 깊은 가격대가 결과를 바꾸므로 수량별로 전체 경로를 다시 견적해야 합니다.

한 홉의 출력이 다음 홉의 주문 가능 수량과 다를 수 있다

중앙화 거래소의 가상 경로에서 앞 홉의 수수료 후 잔고가 12.3456 B이고 다음 주문의 수량 단위가 0.01 B라면, 보유량 안에서 넣을 수 있는 수량은 내림한 12.34 B입니다. 나머지 0.0056 B는 장부에 남습니다. 가까운 값으로 반올림해 12.35를 보내면 가용 잔고를 초과합니다. 수량을 맞추었더라도 최소 거래대금을 충족하는지는 별도로 검사해야 합니다.

Binance Spot의 필터 문서는 LOT_SIZE의 최소·최대 수량 및 stepSize와 거래대금 필터를 구분합니다. 실제 구현은 선택한 주문 유형에 적용되는 필터와 수수료 차감 통화를 확인합니다. 남은 토큰을 임의의 화면 가격으로 환산해 모두 확정이익에 더하지 말고, 수량과 평가액 및 실제 처분 가능성을 나누어 보고합니다.

가스 예산과 경로의 최소 수령액을 연결하기

온체인 순환에서 시작 토큰 수량 검사만으로 수익 조건이 완성되는 것은 아닙니다. 가스가 다른 네이티브 자산으로 지불되면 그 비용을 시작 토큰 기준으로 평가한 예산이 따로 필요합니다. 시뮬레이션 장부에는 경로 출력, 가스 사용량, 유효 가스 가격, 환산 가격과 시각을 분리해 기록합니다. 이미 차감된 거래 수수료와 외부에서 지불한 가스의 위치도 구분해야 합니다.

경로 자체가 시작량보다 조금 많은 토큰을 돌려주더라도 외부 가스 지출까지 포함하면 손실일 수 있습니다. 최소 수령액 설정은 그 호출이 허용할 출력의 하한일 뿐, 블록에 포함될 확률이나 가스 환산가를 보장하지 않습니다. 가스비가 늘어나거나 경로가 되돌려지는 경우를 별도 결과로 보존합니다.

경로 검증은 작은 경계 사례로 시작하기

기준 수량 바로 아래와 위, 수량 단위의 경계, 한 홉만 잔량이 부족한 경우를 입력합니다. 수수료가 없는 모형과 수수료가 있는 모형을 비교해 차감 위치를 찾고, 출력에 수수료가 포함된 견적에는 다시 비용을 곱하지 않는지 확인합니다. 모든 경로에 같은 비율을 붙이는 검사보다 각 홉의 입력·출력·잔여량을 대조하는 검사가 오류 위치를 잘 보여 줍니다. 표와 내림 계산은 Python Decimal로 오프라인 실행했으며 실제 경로의 수익성 시험은 아닙니다.

공식 자료와 함께 읽기

Uniswap fees · EIP-1559

내용·예제 검토: 2026-10-01

댓글