
GaiaEx API로 AI 트레이딩 봇 만들기
신호 생성부터 실행까지 — 완전한 파이프라인
3년간 단 한 푼도 벌지 못한 봇
2021년, 23세의 한 엔지니어가 인터넷을 뜨겁게 달군 백테스트 결과를 공개했습니다. 그의 크립토 봇은 2년치 과거 데이터에서 1,000달러를 420만 달러로 불렸습니다. 수익 곡선은 완벽한 45도 직선을 그리며 상승했습니다. 사람들은 그에게 코드를 달라고 애원했습니다. 그는 직장을 그만두고 친구들에게서 투자금을 모아 실전에 뛰어들었습니다.
그런데 매주 손실이 났습니다. 4개월 만에 계좌는 60% 하락했고, 그는 봇을 껐습니다.
봇에 문제가 있었던 것은 아닙니다. 코드는 완벽하게 작동했습니다. 문제는 백테스트가 과거에 완벽히 맞아떨어지도록 조정되어 있었다는 점이었습니다 — 그리고 과거는 정확히 똑같이 반복되지 않습니다. 이 전략은 일반적인 규칙을 배운 것이 아니라 2019년과 2020년을 통째로 외워버린 것이었습니다. 한 번도 보지 못한 시장을 만나는 순간, 무엇을 해야 할지 전혀 알지 못했습니다.
이것이 AI 트레이딩 봇에 관한 가장 중요한 진실이며, 거의 아무도 이 점을 먼저 이야기하지 않습니다. 봇은 그 주위를 감싸는 규율만큼만 훌륭할 수 있습니다. 화려한 부분 — 모델, AI — 은 전체 작업의 약 20%에 불과합니다. 나머지 80%는 데이터 위생 관리, 실행 배관, 그리고 여러분이 잠든 사이 버그나 플래시 크래시가 계좌를 텅텅 비우지 못하게 막는 리스크 관리입니다. 이 레슨은 바로 그 80%를 다룹니다.
AI 트레이딩 봇이란 실제로 무엇인가
마케팅 문구를 걷어내면 트레이딩 봇은 그저 시장을 관찰하고 규칙에 따라 주문을 넣는 소프트웨어일 뿐입니다 — 사람이 버튼을 클릭하지 않아도 됩니다. 'AI'는 이런 규칙 중 일부가 직접 작성된 것이 아니라 데이터로부터 학습되었다는 의미이지만, 하는 일은 동일합니다. 정보를 결정으로 바꾸는 일을, 자동으로, 하루 24시간 내내 하는 것입니다.
사람들이 봇을 찾는 데는 세 가지 정직한 이유가 있습니다:
- 시장은 절대 닫히지 않습니다. 크립토는 연중무휴 24시간 거래됩니다. 일요일 새벽 4시에 BTC를 지켜볼 수 있는 사람은 없지만, 봇은 할 수 있습니다.
- 감정이 없습니다. 봇은 바닥에서 패닉셀을 하거나 꼭지에서 FOMO 매수를 하지 않습니다. 환희에 차 있든 공포에 질려 있든 — 사람이 최악의 판단을 내리는 바로 그 순간에도 — 같은 계획을 그대로 실행합니다.
- 속도와 일관성. 봇은 수십 개의 자산을 동시에 평가하고 밀리초 단위로 반응할 수 있으며, 스톱로스를 설정하는 것을 절대 '잊지' 않습니다.
하지만 이 목록에 없는 것을 주목하십시오: 수익 보장. 봇은 전략을 더 빠르고, 지치지 않고, 감정 없이 실행하는 수단일 뿐입니다. 전략이 나쁘면 봇은 그저 돈을 더 빠르고 더 꾸준하게 잃을 뿐입니다. 자동화는 여러분이 가진 우위 — 또는 결함 — 을 그대로 증폭시킵니다.
봇이 실제로 실행하는 전략들
머신러닝을 건드리기 전에, 실제 봇 대다수를 움직이는 주력 전략들을 먼저 이해해야 합니다. 각 전략은 특정한 유형의 시장을 가정하며 — 시장의 성격이 바뀌면 조용히 무너집니다.
- 그리드 봇은 가격 구간 전체에 걸쳐 매수·매도 주문을 사다리처럼 배치합니다. 가격이 오르내릴 때마다 봇은 각 단계에서 싸게 사고 비싸게 팝니다. 횡보하며 요동치는 시장에서는 훌륭하지만, 강한 추세장에서는 재앙이 됩니다 — 가격이 그리드를 벗어나면 손실 물량을 그대로 들고 있거나(또는 움직임을 완전히 놓치게) 됩니다.
- DCA(정기·정액 분할매수) 봇은 일정 주기로 고정된 금액을 매수하며, 많은 경우 더 낮은 가격에 '안전 주문'을 추가해 평균 진입가를 끌어내립니다. 하락 구간에서 물량을 모으기에는 훌륭하지만, 가격이 계속 떨어지면 칼날을 계속 붙잡고 사는 셈이 되어 평균가가 계속 깎여 나갑니다.
- 추세추종/모멘텀 봇은 이동평균 교차 같은 신호를 이용해 강세를 사고 약세를 팝니다. 깨끗한 추세에서는 크게 이기지만, 횡보장에서는 '난도질'을 당합니다 — 수많은 작은 손실이 쌓여 죽는 죽음입니다.
- 차익거래 봇은 같은 자산이 서로 다른 거래소에서 다른 가격에 거래되는 상황을 노려, 싸게 사고 비싸게 팝니다. 수학은 단순하지만 엔지니어링은 가혹합니다. 이것은 순전히 속도 게임으로, 마이크로초, 수수료, 전송 지연이 그 '공짜' 수익이 진짜인지 신기루인지를 결정합니다.
- 마켓 메이킹 봇은 매수호가와 매도호가를 동시에 제시해 스프레드를 벌며 유동성을 공급합니다. 조용한 시장에서는 수익이 나지만 빠른 시장에서는 위험합니다 — 갑작스러운 움직임은 취소할 시간도 없이 잘못된 방향으로 체결시켜 버릴 수 있습니다.
이 목록에 숨겨진 교훈은 이렇습니다: 모든 전략은 지금이 어떤 시장인지에 대한 베팅입니다. 그리드 봇이 '좋다'거나 '나쁘다'는 것이 아니라 — 횡보장에는 맞고 추세장에는 맞지 않을 뿐입니다. 자동매매에서 가장 어려운 문제는 봇을 만드는 것이 아니라, 그 전제가 더 이상 유효하지 않은 시점을 아는 것입니다.
봇은 실제로 어떻게 연결되어 있는가
사람들은 'AI 트레이딩 봇'을 마치 하나의 스크립트인 것처럼 이야기합니다. 실제 운영 환경에서는 파이프라인입니다: 수집, 특징, 모델, 신호, 실행, 리스크 — 각 단계는 전체 스택을 재구성하지 않고도 교체할 수 있습니다. 이렇게 구성하는 것은 학술적인 결벽증이 아니라, 실거래 손익이 백테스트와 어긋나는 새벽 3시에 어느 단계가 실패했는지 파악하며 정신을 유지하는 방법입니다.
하나의 의사결정이 지나가는 경로를 따라가 보겠습니다:
- 수집(Ingest)은 거래소에서 실시간 시장 데이터 — 가격, 체결, 오더북 — 를 가져옵니다. GaiaEx는 주문과 잔고를 위한 REST와 오더북·체결을 위한 WebSocket을 제공합니다.
- 특징(Features)은 원시 숫자를 의미 있는 입력값으로 바꿉니다: 변동성, 모멘텀, 펀딩비, 오더북 불균형 등.
- 모델(Model)(규칙 기반 또는 ML)은 이 특징들을 읽고 판단을 형성합니다.
- 신호(Signal)는 그 판단을 구체적인 주문으로 바꿉니다: 방향, 크기, 가격.
- 실행(Execution)은 주문을 거래소에 전송하며 재시도와 확인 처리를 담당합니다.
- 리스크(Risk)는 모든 것을 감싸며 — 다른 모든 단계에 대한 거부권을 갖습니다.
이 규율의 핵심은 각 단계를 결정론적이고 로그로 기록되게 유지하는 것입니다. 모든 신호에 ID를 붙이고, 모든 주문에 클라이언트 ID를 붙이고, 모든 단계에 지연 시간 스탬프를 붙이십시오. 무언가 잘못되었을 때 — 반드시 그런 일이 생깁니다 — 로그를 읽고 현실이 계획에서 정확히 어디서 벗어났는지 확인하고 싶을 것입니다. 추측이 아니라.
규칙이 먼저, 그다음이 머신러닝
유행은 'AI를 써라'라고 말합니다. 프로들은 이렇게 말합니다: 평범한 언어로 읽을 수 있는 규칙부터 시작하십시오. RSI의 임계값, MACD 교차, 이동평균을 웃도는 거래량 등입니다. 규칙은 기록하기 쉽고, 설명하기 쉽고, 무언가 잘못되었을 때 원인을 지목하기도 쉽습니다. 규칙 기반 전략이 돈을 벌지 못한다면, 신경망을 붙여도 그것을 살려낼 수 없습니다 — 그저 여러분이 디버깅할 수 없는 방식으로 돈을 잃게 만들 뿐입니다.
머신러닝은 패턴이 손으로 작성한 규칙으로는 너무 미묘하거나 너무 다차원적일 때 제자리를 찾습니다: 테이블형 특징에 대한 그래디언트 부스팅 트리, 가격 바 시퀀스에 대한 시퀀스 모델 등입니다. 잘 활용하면 ML은 지저분한 입력값에서도 신호를 뽑아낼 수 있습니다. 하지만 드리프트(drift)라는 악질적인 실패 양상이 있습니다: 실거래 시장이 서서히 모델이 학습했던 데이터와 닮지 않게 되고, 성능은 조용히 저하됩니다. 모델은 계속해서 확신에 찬 예측을 내놓지만 — 이제는 그저 틀렸을 뿐이고, 오류 하나 나지 않습니다.
이것이 성숙한 데스크가 하이브리드 방식을 운영하는 이유입니다: 모델은 제안하고, 하드코딩된 규칙과 리스크 한도가 거부합니다. AI는 거래를 제안할 수는 있지만, 일일 손실 한도나 포지션 한도를 무시할 권한은 결코 갖지 못합니다. 기계는 좋은 직관을 가졌지만 회사를 걸고 베팅할 권한은 없는 신입 애널리스트입니다.
계산할 가치가 있는 특징들
모델은 여러분이 입력해주는 데이터만큼만 똑똑합니다. 원시 가격만으로는 충분한 경우가 거의 없습니다 — 진짜 기술은 피처 엔지니어링(feature engineering)입니다: OHLCV, 오더북, 파생상품 데이터를 실제로 정보를 담은 신호로 바꾸는 작업입니다.
무기한 선물 데스크에서는 종가를 넘어서는 특징들이 중요합니다. 펀딩비(Funding)는 '이기고 있는' 전략을 순식간에 마이너스로 뒤집을 수 있는 실질적이고 반복적인 비용 또는 수익입니다. 여러 구간의 수익률은 여러 시간대에 걸친 모멘텀을 포착합니다. 거래량 비율은 이상 활동을 알려줍니다. 오더북 불균형 — 매수호가 대 매도호가 심도의 비율 — 은 L2 데이터를 구독한다면 초단기 마이크로구조 신호가 됩니다. 크로스에셋 컨텍스트(ETH가 BTC에 대해 어떻게 움직이는지)는 시장 전체에 대한 시각을 더해줍니다.
아마추어와 프로를 가르는 한 가지 규율이 있습니다: 제 역할을 못 하는 특징은 버리십시오. 특정 특징의 순열 중요도(permutation importance)가 거의 0이라면, 노이즈를 위해 지연 시간과 과적합 위험을 지불하고 있는 것입니다. 더 적고 더 강한 특징이 거의 언제나 온갖 재료를 다 쏟아부은 모델을 이깁니다.
def engineer_features(df):
df["log_ret"] = np.log(df["close"] / df["close"].shift(1))
df["vol_20"] = df["log_ret"].rolling(20).std()
df["vol_ratio"] = df["volume"] / df["volume"].rolling(20).mean()
return df.dropna()
그리고 피처 작업의 근본적인 죄를 명심하십시오: 미래 참조 편향(look-ahead bias)입니다. 어떤 특징이 의사결정 시점에는 존재하지 않았을 정보 — 미래의 바(bar), 동일 구간의 종가 — 를 우연히 사용한다면, 백테스트는 화려해 보일 것이지만 실거래 계좌는 그렇지 않을 것입니다. 모든 특징은 그 순간에 가지고 있었을 데이터만으로 계산 가능해야 하며, 예외는 없습니다.
실행, 서명, 그리고 실제 돈을 잃게 만드는 지루한 버그들
화려하지 않은 실행 계층이 바로 돈이 조용히 새어나가는 곳입니다. 제대로 하면 아무도 알아채지 못하고, 잘못하면 완벽한 신호가 실제 손실로 바뀝니다.
- 주문 유형. 가격에 신경 써야 할 때는 지정가(limit) 주문을 사용하십시오 — 받아들일 최악의 가격을 직접 정하는 것입니다. 시장가(market) 주문은 진짜로 긴급할 때만 남겨두고, 얇거나 빠른 시장에서는 가혹할 수 있는 스프레드와 슬리피지를 함께 지불한다는 점을 존중하십시오.
- 멱등성(Idempotency). 항상 클라이언트 주문 ID를 붙이십시오. 네트워크는 가끔 끊깁니다. ID 없이 재시도된 POST 요청은 포지션을 두 배로 만들 수 있습니다. ID가 있으면 거래소가 중복을 인식하고 무시합니다. 이 습관 하나가 재앙적인 버그의 한 부류 전체를 막아줍니다.
- 백오프를 두고 재시도. 429(속도 제한) 또는 5xx(서버 오류)가 발생하면, 기다렸다가 지수적으로 늘어나는 간격으로 재시도하십시오 — API를 두드려 밴을 자초하지 마십시오.
- 시계 규율. 서명된 요청은 보통 HTTP 메서드, 경로, 본문, 밀리초 타임스탬프를 이어 붙여 HMAC 서명을 만듭니다. 거래소는 시계가 어긋난 요청을 거부하므로, 서명하는 머신에서는 NTP를 실행하십시오. 시계가 틀어지면 모든 주문이 거부되는데도 왜인지 전혀 알 수 없게 됩니다.
이 중 어느 것도 'AI'가 아닙니다. 하지만 이 모든 것이 여러분의 AI가 언젠가 1달러라도 벌 수 있을지를 결정합니다. 백테스트와 실거래 계좌 사이의 간극은 대부분 이 계층에서 발생합니다 — 수수료, 슬리피지, 지연, 예외 상황 — 그리고 이것이 바로 다음 두 섹션이 존재하는 이유입니다.
알파보다 먼저 리스크
오래 살아남는 트레이더와 폭발하는 트레이더를 가르는 작업 순서는 이렇습니다: 리스크는 모든 주문 앞의 관문이며, 거래 후의 사과가 아닙니다. 엔진을 튜닝하기 전에 브레이크를 설계하십시오.
타협할 수 없는 통제 장치들:
- 포지션 한도. 단일 종목 노출을 제한하십시오 — 흔히 자산의 2~5% — 그러면 단 한 번의 거래로 무너지지 않습니다.
- 스톱. ATR 기준(변동성에 맞춰 조정)이나 고정 틱 기준으로 설정하고, 머릿속의 의도가 아니라 실제 주문으로 걸어두십시오.
- 일일 손실 정지. 하루 손실이 예를 들어 계좌의 3%에 도달하면 봇은 거래를 멈춥니다. 완전 정지입니다. 이 단일 규칙이 어떤 정교한 신호보다도 더 많은 계좌를 살렸습니다. 버그나 안 좋은 하루가 낼 수 있는 피해에 상한선을 씌우기 때문입니다.
- 킬 스위치. 모든 진행 중인 주문을 취소하고 모든 포지션을 청산하는 단 하나의 동작입니다. 매달 테스트하십시오. 그것이 고장 났다는 것을 발견하기에 가장 나쁜 날은 바로 그것이 필요한 날입니다.
무기한 선물의 경우, 펀딩비 손실과 청산까지의 거리를 같은 관문에 포함시키십시오 — 가격상으로는 '괜찮은' 포지션도 펀딩비로 계속 피를 흘리거나 청산까지 심지 하나 남은 상태일 수 있습니다.
커스터디도 이 대화에 포함되어야 합니다. GaiaEx는 MPC를 사용하며, 이는 키 자료를 여러 당사자로 분산시켜 공격자가 탈취할 수 있는 파일 하나에 봇이 원시 개인키를 통째로 보관하는 일이 없도록 합니다. 그리고 거래 권한은 출금 권한과 분리해서 범위를 지정할 수 있습니다 — 즉 봇이 주문을 넣는 데 쓰는 API 키는 플랫폼에서 자금을 빼돌리는 데는 결코 사용될 수 없어야 합니다.
사기: 봇 자체가 함정일 때
화려한 봇 광고들은 절대 언급하지 않는 위험이 여기 있습니다: 리테일에 마케팅되는 'AI 트레이딩 봇' 중 상당수는 트레이딩 도구가 전혀 아니라 — 그 자체가 강도짓입니다. 정직한 교육이라면 이 점을 분명하게 짚어야 합니다. '봇'에게 돈을 잃는 사람들 대부분이 실제로 돈을 잃는 지점이 바로 여기이기 때문입니다.
패턴은 반복됩니다:
- 수익 보장 봇. '우리 AI는 하루 2%를 무위험으로 벌어들입니다.' 어떤 정당한 전략도 수익을 보장하지 않습니다. 시장은 정의상 불확실합니다. 꾸준하고 절대 손해 보지 않는 수익을 약속한다는 것은 폰지를 약속하는 것입니다.
- 과도한 권한을 가진 API 키. 많은 사기성 봇들은 출금 권한이 있는 API 키를 연결하라고 요청합니다. 연결하는 순간, 그들은 계좌를 비워버릴 수 있습니다. 2025년 하반기, 바이낸스는 정확히 이런 방식으로 승인받지 않은 제3자 봇에서 발생한 계정 해킹과 다섯 자릿수 손실 사례를 확인해 문서화했습니다.
- 불투명하고 감사받지 않은 코드. 소스가 폐쇄적이고 보안 감사가 없는 제3자 봇은 백도어를 숨길 수 있습니다. 그 코드가 여러분의 키로 무엇을 하는지 알아챌 수 있는 것은 이미 늦은 후입니다.
- 워시 트레이딩 및 거래량 파밍 봇은 거래소 규정을 조용히 위반하여 — 계좌가 제한되거나 정지되는 결과를 낳으며, 손실에 대한 지원도 없습니다.
방어책은 구체적이며 외워둘 가치가 있습니다. 트레이딩 봇에 출금 권한을 절대 부여하지 마십시오 — API 키의 범위를 거래로만 한정하십시오. 출금 주소 화이트리스트를 사용해 자금이 사전에 승인한 주소로만 나갈 수 있도록 하십시오. 강력한 2FA(인증 앱이나 하드웨어 보안 키, SMS는 안 됨)를 활성화하십시오. 정체를 알 수 없는 텔레그램 봇이 달콤한 약속을 던지는 것보다는 공식적으로 감사받은 도구를 선호하십시오. 그리고 금융에서 가장 오래된 규칙을 기억하십시오: 믿기 힘들 정도로 좋게 들린다면, 그것은 사기이고, 'AI'는 그저 그 위장일 뿐입니다.
폭발 없이 페이퍼에서 실전으로
전략도 있고, 깨끗한 특징도 있고, 실행 계층도 있고, 리스크 관문도 있습니다. 실제 자금으로 그냥 실전에 뛰어들고 싶은 유혹이 생길 것입니다. 그러지 마십시오. 죽은 봇들의 무덤은 종이 위에서는 완벽해 보였지만 준비 없이 현실을 만난 전략들로 가득합니다.
규율 있는 경로는 다음과 같습니다:
- 완전히 동일한 코드 경로로 페이퍼 트레이딩을 하십시오. 원금을 위험에 노출시키지 않은 채 실거래 데이터를 상대로 실거래 주문 로직을 최소 몇 주간 실행하십시오. 체결과 타임스탬프를 전략이 기대했던 것과 비교하십시오. 페이퍼와 백테스트가 이미 서로 다르다면, 멈추고 원인을 찾으십시오.
- 최소 규모로 실전에 들어가십시오. 첫 실전 단계의 목표는 수익이 아니라 — 진실을 측정하는 것입니다: 실제 슬리피지, 실제 수수료, 실제 지연 시간. 많은 팀들은 숫자를 신뢰하기 전에 백테스트 대비 30~50%의 헤어컷을 가정합니다.
- 실전이 모델과 일치할 때만 규모를 키우십시오. 실제 슬리피지와 수수료가 여러분의 가정과 맞아떨어지면 규모를 점진적으로 늘리십시오. 맞지 않는다면 모델이 여러분에게 거짓말을 하고 있는 것입니다 — 자금을 투입하기 전에 고치십시오.
그리고 나쁜 날이 오기 전에 미리 대비하십시오. 플래시 크래시와 API 장애는 가설이 아닙니다 — 날짜만 모르는 예정된 사건들입니다. 유일한 대책이 '아침에 알게 되겠지'라면, 대책이 없는 것입니다. 거래소가 지원한다면 연결 끊김 시 자동 청산을 자동화하십시오. 그러면 끊긴 연결이 여러분이 잠든 사이 노출된 포지션을 그대로 방치하는 일을 막을 수 있습니다.

