3월 31일, 저는 전략 하나, 온체인 기록 하나 없이 100점 만점에 58점짜리 AI 트레이딩 에이전트를 배포했습니다.
그로부터 열하루 뒤, 그 에이전트는 참가팀 58개 중 리더보드 5위에 올라 있었습니다. 검증 점수 98, 평판 점수 94. 그리고 제가 가장 자랑스러운 부분 — 올해 들어 가장 변동성이 심했던 장세를 통과하며 10만 달러 포트폴리오의 최대 낙폭이 고작 0.4% 였다는 것입니다.
이건 LabLab.ai의 “AI Trading Agents with ERC-8004” 해커톤에서 저희가 WaveRider를 만든 실제 이야기입니다. 포장된 버전이 아닙니다. 버그, 실패, 새벽 3시 디버깅이 고스란히 담긴 진짜 이야기입니다.
우리가 풀고 싶었던 문제
해커톤에서 AI 트레이딩 에이전트들은 죄다 백테스트 수치를 들고 나옵니다. “승률 90%!” “수익 3배!” 슬라이드는 그럴듯합니다.
그런데 단 하나의 질문을 던져보세요 — “이 에이전트가 한 번도 본 적 없는 데이터에서는 어떻게 됩니까?” — 그 순간 대부분의 숫자는 무너집니다.
이유는 단순합니다. 일반적인 백테스트는 함정입니다. 같은 데이터로 파라미터를 최적화하고, 같은 데이터로 테스트합니다. 모델이 사실상 정답을 미리 보는 셈입니다. 당연히 잘 됩니다. 정답지를 외우고 시험을 잘 봤다고 실력 있다고 말하는 것과 같습니다.
우리가 만들고 싶었던 건 달랐습니다. 누구든 그 주장을 직접 검증할 수 있는 에이전트.
1–3일차: 소박한 출발
WaveRider는 전략 하나로 시작했습니다 — EMA 골든크로스 + RSI 모멘텀 + 거래량 확인. 고전적인 추세 추종 방식이었습니다.
처음 몇 거래는 괜찮아 보였습니다. 그러다 시장이 횡보에 접어들었습니다.
횡보장에서 추세 전략은 호수에 서핑보드를 들고 간 것과 같습니다. 파도를 기다리며 앉아 있는데, 파도는 오지 않고 작은 물결 하나하나가 다 손실입니다.
첫 번째 교훈: 전략 하나로는 부족합니다.
전략을 두 개 더 추가했습니다. BB 스퀴즈 (볼린저밴드 압축 돌파)와 MACD 다이버전스 (가격-모멘텀 괴리를 이용한 반전 포착). 추세, 돌파, 반전 세 가지 시장 유형을 커버하는 상호보완적인 전략 조합입니다.
그런데 어떤 상황에서 어떤 전략을 써야 할까요? 그래서 나온 게 시장 국면 감지였습니다. ADX, 볼린저밴드 폭, EMA 수렴 정도를 활용해 시장을 여섯 가지 상태로 분류합니다: 상승 추세, 하락 추세, 횡보, 고변동성, 돌파 형성, 소진.
각 상태에 따라 전략 조합을 달리 배분했고, 결국 36칸 매트릭스 — 코인 6개 × 국면 6개 — 가 만들어졌습니다. 각 칸에는 독립적으로 최적화된 파라미터 세트가 있습니다.
4–5일차: 워크 포워드가 진실을 드러내다
여기서부터 불편해졌습니다.
모든 전략에 워크 포워드 최적화(WFO)를 돌렸습니다. 일반 백테스트와 달리, WFO는 특정 시간 구간으로 훈련한 뒤 다음 구간의 미공개 데이터로 테스트합니다. 이걸 8번 반복해 360일 데이터를 다 씁니다. 실제로 거래하지 않고도 실전 성과에 가장 근접한 검증 방법입니다.
결과는 냉정했습니다.
전통 백테스트에서 훌륭해 보이던 BTC 롱 전략의 샘플 외 승률은 40% 였습니다. 즉시 블랙리스트에 올렸습니다.
DOGE 롱? 샘플 외 30.3%. 블랙리스트.
하지만 ETH는? 샘플 외 91회 거래에서 롱 93.3%, 숏 97.8%. SOL은 72–76%를 유지했고, LINK 롱은 100%를 기록했습니다(샘플 수가 적지만 일관성 있음).
전체 샘플 외 포트폴리오 성과: 최적화 과정에서 한 번도 보지 못한 366번의 거래에서 승률 82.2%.
두 번째 교훈: 워크 포워드를 통과하지 못하는 전략은 실전도 못 버팁니다. 자존심이 아닌 데이터로 전략을 버려야 합니다.
6–7일차: 이중 AI 앙상블, 그리고 새벽의 대붕괴
원시 전략 신호는 잡음이 많습니다. 횡보장에서 나온 추세 신호는 기술적으로는 유효하지만 실제로는 무쓸모입니다. 신호 품질을 걸러낼 무언가가 필요했습니다.
그래서 도입한 것이 이중 AI 앙상블입니다. MiniMax M2.7 (클라우드 기반, 추론 능력 우수)과 Qwen 2.5 (Ollama 로컬, 빠른 추론). 모든 신호를 두 모델이 독립적으로 검토합니다. 시장 맥락, 복합 요인, 리스크-리워드 비율을 각자 평가하고, 양측이 동의하면 신뢰도에 보너스를 줍니다.
이 구조로 신호 기각률이 87% 에 달했습니다 — 가장 확신도 높은 셋업만 통과합니다.
그러다 92번째 스캔, 새벽 3시에 세 AI 백엔드(MiniMax, Claude, Ollama)가 동시에 타임아웃됐습니다. 에이전트가 눈을 잃었습니다.
세 번째 교훈: AI는 도구이지 목발이 아닙니다.
모델별 타임아웃을 45초에서 25초로 줄이고, 빠른 실패를 위한 폭포식 구조로 재설계했습니다. 그리고 AI를 쓸 수 없을 때 포지션 크기 50%로 실행하는 규칙 기반 폴백을 추가했습니다. 에이전트는 우아하게 성능을 낮출 수 있어야 하지, 아예 꺼져버려서는 안 됩니다.
8–9일차: SOL이 가르쳐준 코인별 리스크 관리
SOL/USDT가 연속으로 세 번 손절됐습니다. 전체 연속 손실 카운터가 3이었는데 — 이 전역 카운터는 모든 코인을 합산해서 봅니다. 감소 조치가 발동됐을 때 SOL은 이미 전량 포지션으로 세 번을 다 얻어맞은 뒤였습니다.
네 번째 교훈: 전역 리스크 통제는 너무 거칩니다.
6단계: 코인별 쿨다운을 새로 만들었습니다. 같은 코인에서 연속 두 번 손실이 나면 해당 코인에 스캔 3회 쿨다운이 적용됩니다. 리스크 시스템은 5단계에서 7단계로 확장됐습니다.
- 포지션 사이징 (거래당 최대 5%)
- 일일 손실 한도 (3% → 자동 중단)
- 최대 낙폭 (10% → 전량 긴급 청산)
- 전역 연속 손실 일시 정지
- 연속 손실 포지션 축소 (50% 크기)
- 코인별 쿨다운 (신규)
- 분할 익절 (TP1→본전 이동, TP2→손절 조임, TP3→청산)
결과: 11일간의 악조건 장세에서 총 낙폭 0.4% 방어. 7단계 시스템이 최악의 샘플 외 시나리오 대비 8,300달러 이상의 잠재 손실을 막아냈습니다.
10일차: 평판 위기
해커톤은 점수 산정에 공유 스마트 컨트랙트를 사용합니다. 그 중 하나인 ReputationRegistry는 에이전트가 온체인에 평판 업데이트를 올릴 수 있게 해줍니다.
아니, 올릴 수 없습니다. 적어도 자기 자신에 대해서는.
에이전트 지갑으로 submitFeedback을 호출할 때마다 트랜잭션이 되돌아왔습니다. 컨트랙트는 설계상 자기평가를 막습니다 (점수 부풀리기 방지). feedbackType 0, 1, 2 — 전부 거절됐습니다.
대부분의 팀이라면 평판 점수 0을 받아들이고 넘어갔을 겁니다. 우리는 다른 방향을 택했습니다.
제로 베이스 평판 공식을 처음부터 직접 만들었습니다. 시작점은 0 — 50도 아니고, 65도 아니고, 부진한 성과를 가려주는 어떤 보정값도 없이. 모든 점수는 실적으로 삽니다.
- 리스크 통제: 최대 30점 (낙폭 0.5% 미만 = 30/30)
- 투명성: 20점 (거래당 감사 자료 비율)
- 검증 품질: 15점
- 활동성: 15점
- 승률: 10점
- 손익: 10점 (음수 가능)
우리 점수: 79/100. 화려하지 않습니다. 하지만 모든 점수는 측정 가능하고 검증 가능한 성과를 반영합니다. make reputation을 실행하면 전체 계산 과정을 볼 수 있습니다.
다섯 번째 교훈: 시스템이 문을 막으면, 더 나은 시스템을 직접 만드세요. 제약은 혁신의 원점입니다.
10일차 (계속): Merkle 무결성 검증
검증 감사 자료를 신뢰해달라고 요청한다면, 그 자료가 사후에 손대지지 않았음을 스스로 확인할 방법도 함께 줘야 합니다.
거래 의도, 리스크 체크, 전략 체크포인트를 포함한 205개의 검증 기록 전체에 SHA-256 Merkle 트리를 구축했습니다. 루트 해시는 에이전트 카드에 담겨 온체인에 기록됩니다.
make verify를 실행하면 독립적으로 Merkle 루트를 재계산할 수 있습니다. 일치하면 어떤 기록도 수정되지 않은 것입니다. 불일치하면 무언가가 바뀐 것입니다.
이것은 트러스트 최소화 검증을 트레이딩 에이전트에 적용한 사례입니다. “제 숫자를 믿어주세요"가 아닙니다. “직접 확인할 수 있는 수학이 여기 있습니다.”
11일차: 돌파
해커톤 주최측이 ValidationRegistry의 Solidity 버그를 수정했다고 발표했습니다. postEIP712Attestation 함수가 this.postAttestation(...)을 사용하고 있었는데, 이 외부 호출이 msg.sender를 운영자 지갑에서 컨트랙트 자신으로 바꿔버렸습니다. 컨트랙트가 자신의 화이트리스트에 없으니, 모든 체크포인트 제출이 되돌아간 것입니다.
수정 발표 몇 분 만에, 리스크 관리, WFO 결과, Merkle 무결성, 평판 방법론, 이중 AI 앙상블 설계를 담은 검증 체크포인트 6개를 올렸습니다.
검증 점수 98로 점프. 평판 94. 리더보드: 58팀 중 5위.
자랑스러운 숫자, 그리고 숨기지 않는 숫자
솔직하게 공개합니다.
| 지표 | 샘플 외 백테스트 | 실전 모의거래 |
|---|---|---|
| 승률 | 82.2% (366거래) | 40.0% (25거래) |
| 최대 낙폭 | -8.7% | -0.4% |
| 신호 기각률 | — | 87% 필터링 |
실전 승률 40%는 사실이고, 우리는 이를 숨기지 않습니다. 해커톤 기간은 횡보와 변동성 장세가 지배했습니다 — 추세 추종 전략이 가장 고전하는 환경입니다. WFO 백테스트 구간에는 추세 장세가 약 60% 포함돼 있었는데, 실전은 정반대였습니다.
그러나 핵심은 이겁니다. 리스크 시스템이 제 역할을 했습니다. 승률 40%에 낙폭 0.4%라는 것은 에이전트가 질 때 작게 지고 자본을 지켰다는 의미입니다. 시장이 우리 전략에 유리하게 돌아설 때, 검증된 우위는 여전히 거기 있습니다. 그렇지 않을 때는 7단계 리스크 시스템이 피해를 무시할 수 있는 수준으로 유지합니다.
나쁜 장세에서 0.4%만 잃는 프로덕션 에이전트는, 선별된 데이터로 80%+를 보여주는 데모 에이전트보다 훨씬 가치 있습니다.
우리가 만든 것 (기술 스택)
- 36칸 국면 적응형 라우팅을 갖춘 전략 엔진 3개
- 코인별 쿨다운과 분할 익절을 포함한 7단계 리스크 관리
- 이중 AI 앙상블 (MiniMax M2.7 + Qwen 2.5), 신호 기각률 87%
- 워크 포워드 최적화 (8개 구간, 366회 샘플 외 거래)
- 205개 검증 기록을 아우르는 SHA-256 Merkle 트리
- 제로 베이스 평판 공식 (기준점=0, 전량 실적으로)
- ERC-8004 온체인 신원 (Agent #17, 이중 컨트랙트 등록)
- EIP-712 서명 거래 의도 79건 RiskRouter 제출
- 테스트 93개 (유닛 + 통합 + 무결성 검증)
- SIGTERM/SIGINT 처리를 포함한 우아한 종료
- 모든 소스 파일 800줄 이하. Docker + systemd 배포 지원.
전체 오픈소스: github.com/JudyaiLab/hackathon-trading-agent
make test && make validate && make verify && make reputation을 실행하면 이 글의 모든 수치를 직접 검증할 수 있습니다.
내가 배운 것
1. 검증 방법론이 백테스트 숫자보다 중요합니다. 어떤 모델도 인샘플 데이터에서 90%를 보여줄 수 있습니다. 워크 포워드가 정직한 시험입니다.
2. 리스크 관리가 곧 제품입니다. 전략도 AI도 화려한 지표도 아닙니다. 시장이 역행할 때, 중요한 것은 오직 얼마나 잃느냐입니다.
3. 투명성은 경쟁 우위입니다. 성공과 실패를 나란히 공개하는 것이 완벽한 트랙 레코드보다 더 깊은 신뢰를 만듭니다.
4. 제약이 혁신을 낳습니다. 자기평가를 막는 컨트랙트가 제로 베이스 평판 공식을 만들게 했습니다. AI 타임아웃이 폴백 시스템을 만들게 했습니다. SOL 연속 손실이 코인별 쿨다운을 만들게 했습니다. 모든 문제가 에이전트를 더 강하게 만들었습니다.
5. 온체인 신원이 게임을 바꿉니다. ERC-8004는 해커톤 요건에 그치지 않습니다 — 에이전트 책임성의 미래입니다. 모든 에이전트가 검증 가능한 신원을 등록하고 이식 가능한 평판을 쌓을 수 있을 때, 생태계 전체가 한 단계 올라섭니다.
WaveRider는 Sepolia의 Agent #17입니다. 검증 점수: 98. 평판: 94. 리더보드: 58팀 중 5위.
JudyAI Lab이 잠 못 이룬 11일 동안 만들었습니다.