Your Copy Trading Bot Will Break. Here's How to Build One That Doesn't.
By @CoinMarketMan - 08-Jul-2026
카피 트레이딩 봇은 결국 망가집니다. 망가지지 않는 봇을 만드는 법.
Hyperliquid에서 카피 트레이딩 봇을 만드는 데는 오후 한나절이면 충분합니다. 폴링 루프는 Python 50줄 정도입니다. 특정 지갑의 포지션을 가져오고, 로컬 상태와 비교하고, 델타를 미러링합니다. GitHub에 공개된 오픈소스 구현체들은 대부분 같은 패턴을 따르며, 첫 주 테스트에서는 잘 작동합니다.
그러다 다섯 가지 중 하나가 터집니다. 리드 지갑이 폴링 간격 사이에 포지션을 청산하면, 여러분은 청산 캐스케이드가 진행되는 동안 낡은 트레이드를 들고 있게 됩니다. 복사 중인 지갑이 다른 거래소에서 헤지를 걸어놓으면, 방향성 베팅처럼 보이는 것이 사실 중립 포지션의 한 다리에 불과합니다. 또는 리드 지갑의 레버리지는 $3M 계좌에는 합리적이지만, 봇이 크기 조정 없이 방향만 복사했기 때문에 여러분의 $10K 계좌에서는 마진콜을 유발합니다.
폴링 루프가 어려운 부분이 아닙니다. 그 주변의 리스크 레이어가 몇 달이 걸리는 부분이고, 대부분의 튜토리얼이 완전히 건너뛰는 부분입니다.
이 가이드는 구조적 장애 모드를 처리하는 카피 트레이딩 봇의 4계층 아키텍처를 다룹니다. Hyperliquid의 온체인 인프라와 HyperTracker의 코호트 인텔리전스 API를 위한 구체적인 코드가 포함되어 있습니다. 이미 기본 루프를 구축했다가 프로덕션에서 실패를 목격했다면, 이것이 바로 빠진 레이어입니다.
카피 트레이딩에 Hyperliquid가 최적인 이유
카피 트레이딩에는 투명한 포지션 데이터가 필요합니다. 중앙화 거래소에서는 거래소가 직접 "리드 트레이더"를 선별하고 독점 시스템을 통해 접근 권한을 제공하는 기능을 구축해야만 카피 트레이딩이 가능합니다. Hyperliquid에서는 모든 포지션이 온체인에 있고 기본적으로 조회 가능합니다. 어떤 지갑이 무엇을 하는지 보기 위해 거래소의 허가가 필요 없습니다.
Hyperliquid의 완전 온체인 중앙 지정가 주문서는 초당 약 200,000건의 주문을 처리합니다. 모든 체결, 모든 취소, 모든 포지션 변경은 검증 가능한 체인 이벤트입니다. 카피 트레이딩에 있어 이는 두 가지를 의미합니다. 거래소의 API 키 없이 어떤 지갑의 포지션도 폴링할 수 있고, 오프체인 매칭 엔진을 신뢰하는 대신 봇의 실행이 실제로 온체인에서 발생했음을 검증할 수 있습니다.
Hyperliquid의 최소 주문 크기는 $10 명목 금액입니다. 소규모 계좌에서 비례 크기 조정을 하면 이 하한선 아래로 떨어지는 거래 크기가 생길 수 있기 때문에 관련이 있습니다. 봇은 이를 gracefully하게 처리해야 합니다. 트레이드를 건너뛰고, 로그를 남기고, 계속 진행합니다.
4계층 아키텍처
실거래에서 살아남는 카피 트레이딩 봇에는 네 개의 독립적인 계층이 있습니다. 각 계층은 독립적으로 실패할 수 있으므로, 각각 고유한 오류 처리 및 로깅이 필요합니다.
계층 1: 지갑 발굴
카피 트레이딩 시스템의 품질은 전적으로 지갑 선택에 달려 있습니다. 나쁜 지갑을 완벽하게 실행하는 엔진은 완벽한 충실도로 돈을 잃을 것입니다. 발굴 계층은 Hyperliquid 전체 생태계를 팔로우할 만한 소수의 지갑으로 걸러냅니다.
리더보드부터 시작합니다. HyperTracker의 /leaderboards/perp-pnl 엔드포인트는 전체 기간, 월간, 주간, 일간 누적 퍼프 PnL로 지갑을 순위 매깁니다. 전체 기간 PnL이 가장 신뢰할 수 있는 필터입니다. 여러 시장 국면에 걸친 성과를 포착하여 운 좋은 한 주와 지속적인 엣지를 구분하기 때문입니다.
그런 다음 코호트로 필터링합니다. HyperTracker는 Hyperliquid의 모든 지갑을 16개의 행동 코호트로 분류합니다. 계좌 크기별 8개(Shrimp부터 Leviathan까지)와 전체 기간 PnL별 8개(Giga-Rekt부터 Money Printer까지)입니다. 카피 트레이딩의 경우, Money Printer 코호트(전체 기간 PnL $1M 이상, 세그먼트 ID 8)와 Smart Money 코호트($100K~$1M, 세그먼트 ID 9)가 지속적인 수익성이 분산보다 진정한 트레이딩 스킬을 반영할 가능성이 가장 높은 두 세그먼트입니다.
import requests
API_BASE = "https://ht-api.coinmarketman.com/api/external"
headers = {"Authorization": "Bearer YOUR_JWT_TOKEN"}
# Smart Money wallets with open positions, sorted by PnL
response = requests.get(
f"{API_BASE}/wallets",
headers=headers,
params={
"segmentIds": 9,
"hasOpenPositions": True,
"orderBy": "perpPnl",
"order": "desc",
"limit": 20,
},
)
candidates = response.json()
후보를 가져온 후 활동 빈도를 확인합니다. 한 달에 한 번 거래하는 지갑은 활용할 만한 시그널을 충분히 생성하지 못합니다. 매일 수십 개의 포지션을 여는 지갑은 너무 많은 노이즈를 생성하고 실행 비용이 모든 엣지를 갉아먹습니다. 카피 트레이딩에 유용한 범위는 명확한 진입과 정의된 보유 기간으로 주 몇 번 포지션을 취하는 지갑입니다.
계층 2: 포지션 모니터링
모니터링 계층은 일정 간격으로 각 대상 지갑의 포지션을 폴링하고 변화를 감지합니다. 5분이 HFT가 아닌 카피 트레이딩의 표준 주기입니다. 빠른 폴링은 더 일찍 진입을 포착하지만 API 비용이 증가하고 아직 정산되지 않은 부분 체결에서 노이즈가 추가됩니다. 느린 폴링은 단명하는 포지션을 놓치고 청산 타이밍 편차가 커집니다.
diff 엔진이 이 계층의 핵심입니다. 각 폴링 사이클마다 원격 지갑의 현재 포지션을 로컬 스냅샷과 비교하여 이벤트 세트를 생성합니다. OPEN(새 포지션 등장), INCREASE(기존 포지션 증가), REDUCE(기존 포지션 감소), CLOSE(포지션 소멸). 각 이벤트 유형은 실행 계층에서 다른 처리가 필요합니다.
def diff_positions(local_state, remote_positions):
events = []
remote_map = {p["coin"]: p for p in remote_positions}
local_map = {p["coin"]: p for p in local_state}
for coin, pos in remote_map.items():
if coin not in local_map:
events.append({"type": "OPEN", "coin": coin, "position": pos})
elif abs(float(pos["szi"]) - float(local_map[coin]["szi"])) > 0.001:
if abs(float(pos["szi"])) > abs(float(local_map[coin]["szi"])):
events.append({"type": "INCREASE", "coin": coin, "position": pos})
else:
events.append({"type": "REDUCE", "coin": coin, "position": pos})
for coin in local_map:
if coin not in remote_map:
events.append({"type": "CLOSE", "coin": coin, "position": local_map[coin]})
return events
계층 3: 리스크 게이트
이것이 대부분의 튜토리얼이 건너뛰는 계층이며, 봇이 실거래에서 살아남을지 결정하는 부분입니다. 리스크 게이트는 모니터링 계층과 실행 계층 사이에 위치합니다. 트레이드 시그널을 받아 승인, 수정, 또는 완전히 거부합니다.
비례 크기 조정. 가장 흔한 카피 트레이딩 실패는 크기 불일치입니다. 리드 지갑에 $3M의 자산이 있고 $300K 상당의 포지션을 열면, 그들에게는 측정된 배분입니다. 봇이 $10K 계좌에서 같은 달러 금액을 미러링하면, 단일 트레이드에 30배 레버리지가 걸립니다. 비례 크기 조정은 계좌의 자산 비율로 포지션을 조정합니다.
def calculate_copy_size(lead_size, lead_equity, my_equity):
ratio = my_equity / lead_equity
scaled = lead_size * ratio
# Hyperliquid minimum notional is $10
if scaled * current_price < 10:
return None # Skip: below minimum
return scaled
레버리지 캡. 비례 크기 조정을 하더라도 리드 지갑이 여러분의 리스크 허용 범위를 초과하는 레버리지를 사용할 수 있습니다. 봇은 리드 지갑이 사용하는 레버리지와 무관하게 독립적으로 자산별 레버리지 상한선을 강제해야 합니다. 시그널이 20배를 요구하지만 상한선이 5배라면, 리스크 게이트는 그에 따라 크기를 줄이거나 트레이드를 건너뜁니다.
노출 한도. 단일 포지션이 계좌 전체를 소진해서는 안 됩니다. 트레이드당 최대 자산 비율을 설정합니다. 리스크 게이트가 이 한도를 초과하는 시그널을 받으면 크기를 줄이거나 거부합니다.
서킷 브레이커. 단일 세션에서 계좌 자산이 임계값 아래로 떨어지면, 봇은 새 포지션 진입을 중단해야 합니다. 이것이 연쇄 손실이 청산으로 복리화되는 것을 막는 킬 스위치입니다. 기존 포지션을 청산하지는 않습니다(일시적 하락 중 손실을 확정짓는 것이기 때문). 단순히 새 진입을 일시 중단하고 여러분이 수동으로 검토할 때까지 기다립니다.
계층 4: 실행
실행 계층은 승인된 시그널을 공식 Python SDK를 사용하여 Hyperliquid의 주문으로 변환합니다. 핵심 함수는 exchange.order()로, 자산, 방향, 크기, 가격, 주문 유형을 받습니다.
from hyperliquid.exchange import Exchange
from hyperliquid.info import Info
from hyperliquid.utils import constants
info = Info(constants.MAINNET_API_URL, skip_ws=True)
exchange = Exchange(wallet, constants.MAINNET_API_URL)
# Place a market buy order for ETH
result = exchange.order(
coin="ETH",
is_buy=True,
sz=0.5,
px=None, # market order
order_type={"limit": {"tif": "Ioc"}}, # IOC for market-like execution
)
실행 후 봇은 체결을 검증해야 합니다. SDK는 resting(주문이 호가창에 등록됨) 또는 filled(평균 가격으로 즉시 체결됨) 중 하나의 상태 객체를 반환합니다. 카피 트레이딩에서는 대부분의 경우 IOC(즉시 체결 또는 취소) 주문을 원합니다. 특정 가격을 기다리는 것이 아니라 지금 리드 지갑의 포지션에 맞추는 것이 목적이기 때문입니다.
모든 실행에 대해 리드 지갑의 진입 가격, 여러분의 진입 가격, 감지와 체결 사이의 시간 델타, 슬리피지를 로그로 남깁니다. 이 로그는 나중에 시스템을 튜닝하는 진단 도구가 됩니다.
다섯 가지 장애 모드(와 각각의 대처법)
기본 폴링 루프로 만들어진 모든 카피 트레이딩 봇은 동일한 다섯 가지 구조적 장애에 취약합니다. 이것들은 버그가 아닙니다. 아키텍처적 해결책이 필요한 설계상의 한계입니다.
숨겨진 헤징. 리드 지갑이 Hyperliquid에서 ETH 롱을 열고 다른 거래소에서 같은 크기의 ETH 숏을 냅니다. 그들의 순 노출은 제로입니다. 여러분의 카피는 무방비 롱입니다. ETH가 하락하면 그들은 아무것도 잃지 않고 여러분은 모든 것을 잃습니다. 헤지가 다른 체인이나 중앙화 거래소에 존재하기 때문에 온체인 데이터만으로는 이를 감지할 방법이 없습니다. 완화책은 단일 지갑 대신 코호트 수준의 시그널을 사용하는 것입니다. Smart Money 코호트 전체가 ETH에서 순 롱으로 전환할 때, 그것은 수백 개 지갑의 합의 시그널입니다. 그들이 모두 동시에 헤징할 수는 없습니다.
시그널 감쇠. 카피 트레이딩에 인기 있는 지갑일수록 더 많은 봇이 같은 시그널에 몰립니다. 리드 지갑이 $3,500에 진입합니다. 다른 카피 트레이더들이 이미 매수했기 때문에 봇이 감지하고 실행할 때쯤 가격은 $3,512로 이동해 있습니다. 이 슬리피지는 모든 트레이드에서 복리로 쌓여 엣지를 잠식합니다. 진입 가격과 리드 지갑의 체결 가격을 모니터링합니다. 슬리피지가 지속적으로 임계값을 초과하면 해당 지갑은 너무 혼잡하여 수익성 있게 복사하기 어렵습니다.
크기 불일치. 리스크 게이트 섹션에서 이미 다뤘습니다. 비례 크기 조정과 독립적인 레버리지 캡이 핵심 방어선입니다.
청산 타이밍 편차. 리드 지갑이 폴링 간격 사이에 포지션을 청산합니다. 청산 시그널을 놓치고 낡은 포지션을 들고 있게 됩니다. 그 간격 동안 포지션이 반전되면, 리드 지갑이 피한 손실을 여러분이 고스란히 떠안습니다. 활성 포지션이 있는 지갑의 폴링 간격을 줄이세요(복사된 포지션이 살아있을 때는 1분마다, 유휴 상태일 때는 5분마다 폴링). 백스톱으로 자신의 포지션에 독립적인 트레일링 스톱을 설정하세요.
생존 편향. 리더보드는 지금 수익성 있는 지갑을 보여줍니다. 비슷한 전략을 따르다 날아간 수천 개의 지갑은 보여주지 않습니다. 전체 기간 수익이 $2M인 지갑은 결국 평균 회귀할 공격적인 레버리지를 통해 거기 도달했을 수 있습니다. 트레이드 수(최소 수백 건)로 필터링하고 총 PnL 대비 드로우다운을 살펴보세요. 드로우다운이 큰 고PnL 지갑은 부드러운 자산 곡선을 가진 중간 PnL 지갑보다 나쁜 카피 대상입니다.
더 안전한 대안으로서의 코호트 시그널
단일 지갑 카피 트레이딩은 표본 크기가 하나입니다. 하나의 주소가 지속적인 엣지를 가지고 있고, 다른 곳에서 헤징하지 않으며, 봇이 따라갈 수 있는 패턴으로 계속 트레이딩할 것이라는 데 베팅하는 것입니다. 그 연쇄의 모든 가정이 무너질 수 있습니다.
코호트 수준 시그널은 같은 수익성 프로필을 가진 수백 개 지갑의 포지셔닝을 집계합니다. 우리 데이터가 Money Printer 코호트가 BTC에서 순 롱으로 전환하는 동안 Giga-Rekt 코호트(전체 기간 PnL $1M 미만, 세그먼트 ID 15)가 같은 자산에서 순 숏으로 가는 것을 보여줄 때, 그 괴리는 통계적으로 의미 있는 시그널입니다. 하나의 지갑은 틀리거나 헤징 중일 수 있습니다. 전체 수익성 코호트가 일제히 행동하는 것은 다른 종류의 정보입니다.
HyperTracker의 /cohort-metrics 엔드포인트는 세그먼트별 집계 포지셔닝을 5분마다 갱신하여 제공합니다. 개별 지갑 대신 코호트 편향을 모니터링하는 시스템을 구축할 수 있으며, 이는 숨겨진 헤징 문제를 제거하고, 시그널 감쇠를 줄이고(몰릴 단일 주소가 없음), 다각화된 시그널 소스를 제공합니다.
# Fetch Smart Money cohort metrics for BTC
cohort_data = requests.get(
f"{API_BASE}/cohort-metrics",
headers=headers,
params={"coin": "BTC", "segmentId": 9},
).json()
# Check net bias: are Smart Money wallets net long or short?
net_bias = cohort_data.get("netBias")
트레이드오프는 정밀도입니다. 코호트 시그널은 Smart Money가 축적하고 있다는 것을 알려주지만, 진입 가격, 레버리지, 정확한 타이밍은 알려주지 않습니다. 방향성 편향에는 코호트 시그널을 사용하고, 기술적 레벨, 지정가 주문, DCA를 통해 자신만의 진입을 직접 관리합니다.
라이브 전 드라이런 실행
자본을 투입하기 전 최소 2주간 실시간 데이터와 모의 실행으로 배포하세요. 드라이런은 백테스팅이 잡아낼 수 없는 문제들을 드러냅니다. 프로덕션 부하 하에서의 API 속도 제한, Hyperliquid가 새 자산을 상장할 때 diff 엔진의 엣지 케이스, 체결 시뮬레이션 정확도 등입니다.
감지 시 가격, 모의 체결 가격(중간가를 대리값으로 사용할 수 있음), 실제로 실행했을 경우의 결과로 모든 모의 트레이드를 로그로 남깁니다. 드라이런 기간 전체의 승률, 평균 슬리피지, 최대 드로우다운을 추적합니다. 모의 결과가 백테스트 가정과 합리적인 범위 내에서 일치하지 않으면, 간극은 보통 실행에 있습니다. 백테스트가 포착하지 못한 슬리피지, 타이밍, 또는 포지션 크기 조정 엣지 케이스입니다.
오픈소스 Hyperliquid 카피 트레이딩 봇 중 일부는 드라이 모드를 기본 지원합니다. Python 기반 봇들은 보통 주문 제출 없이 실제 시그널을 처리하는 모의 잔액 추적기로 이를 구현하는데, 자본 위험 없이 지갑 발굴부터 리스크 게이트, 실행 로직까지 전체 파이프라인을 검증할 수 있습니다.
코호트 인텔리전스로 카피 트레이딩 시스템 구축하기
HyperTracker의 API는 지갑 발굴과 시그널 계층을 구동하는 리더보드 데이터, 코호트 필터링, 집계 포지셔닝 지표를 제공합니다. 무료 티어(하루 100건 요청)로 시작하고, 프로덕션 폴링 주기에 준비가 되면 Pulse($179/월)로 확장하세요.
시그널보다 아키텍처가 중요합니다
대부분의 카피 트레이딩 봇 가이드는 시그널에 집중합니다. 어떤 지갑을 팔로우할지, 어떤 트레이드를 복사할지. 시그널은 시스템의 10% 정도입니다. 그 주변의 아키텍처가 나머지 90%입니다. 리스크 게이트, 포지션 크기 조정 로직, 서킷 브레이커, 청산 타이밍 핸들러, 슬리피지 모니터, 드라이런 프레임워크. 이것들이 봇이 첫 번째 드로우다운에서 살아남을지, 아니면 어느 화요일 오후에 계좌를 청산할지 결정하는 구성 요소들입니다.
리스크 레이어를 먼저 구축하세요. 극단적인 입력값으로 테스트하세요. 그 다음 시그널을 위에 올리세요. 최고의 카피 트레이딩 봇은 언제 아무것도 하지 않아야 하는지 아는 봇입니다.