AI 트레이딩 봇 14세션 기록: Claude Code로 XRP 자동매매 봇 만들기

CLAUDE.md에 레버리지, 손절폭, 심볼 목록, 타임프레임을 명세서 수준으로 써두고 “이 CLAUDE.md 기반으로 봇 전체 만들어줘”라고 한 마디 던졌다. 2시간 48분 뒤에 AI 트레이딩 봇 27개 파일이 나왔다. 14세션, 961번의 도구 호출. Claude Code 트레이딩 봇 개발의 전 과정을 기록한다.

TL;DR: CLAUDE.md 품질이 코드 품질을 결정한다. 버그 수정 프롬프트는 에러 코드 + 원인 가설 + 요구사항 번호 목록으로 써야 한 번에 원하는 결과가 나온다. 5인 에이전트 리뷰로 승률 60%인데 순손실인 구조적 문제를 발견했다.

한 줄 프롬프트로 27개 파일이 생성됐다

첫 세션의 첫 프롬프트는 이거였다.

이 CLAUDE.md 기반으로 봇 전체 만들어줘

2시간 48분, 104번의 도구 호출 뒤에 bot.py, exchange.py, strategy.py, risk_manager.py, telegram_bot.py 등 27개 파일이 생겼다. CLAUDE.md에 전략 파라미터, 리스크 한도, API 연동 방식을 미리 정의해뒀기 때문에 가능했다. Claude는 파일을 읽고 바로 구현에 들어갔다.

이 방식의 핵심은 CLAUDE.md 품질이다. “트레이딩 봇 만들어줘”가 아니라 레버리지, 손절폭, 심볼 목록, 타임프레임까지 명세서 수준으로 써둔 CLAUDE.md가 있어야 한다. 문서가 코드 품질을 결정한다.

Claude가 실전 모드에서 스스로 멈춘 순간

테스트넷에서 확인 후 실전 전환을 요청했다.

실전으로 전환해서 돌려봐

여기서 흥미로운 일이 생겼다. 세션 5에서 Claude가 .env를 확인하고 BYBIT_TESTNET=false 상태를 발견하자 스스로 멈췄다.

“BYBIT_TESTNET=false — this is LIVE/mainnet. Per the hard rules, I will NOT trade or restart the bot without confirming this is safe.”

CLAUDE.md에 “실주문 전 반드시 확인”을 명시해뒀기 때문이다. 실전 봇 작업 시 이 규칙이 없으면 재시작 명령 하나에 실제 포지션이 열릴 수 있다. Claude가 주도적으로 판단하게 두려면 제약 조건을 미리 적어둬야 한다.

Bybit ErrCode 10001: 에러 코드로 프롬프트를 쓰면 한 번에 해결된다

세션 3~5는 Bybit API 에러 수정에 집중했다. Short 진입 시 ErrCode 10001 (position idx not match position mode)가 반복 발생했다.

원인은 Bybit가 One-way 모드와 Hedge 모드에서 positionIdx 값이 달라지는데, 봇이 항상 0을 보내고 있었던 것. 세션 4에서 프롬프트를 이렇게 작성했다.

1) Add an exchange API call on startup to detect position mode
2) Store as enum in Config (ONE_WAY | HEDGE)
3) When creating orders, derive correct positionIdx from side + mode
4) Add ErrCode 10001 retry logic with mode re-detection

요구사항을 번호로 나열하고 기술 용어를 정확히 쓰는 게 핵심이다. “숏이 안 돼요”가 아니라 에러 코드, 원인 가설, 해결 방향까지 포함한 프롬프트가 한 번에 원하는 코드를 뽑아낸다.

세션 5에서 수정 코드를 배포하고 봇을 재시작하자 로그에 POSITION_MODE: Hedge (양방향) 감지가 찍혔다.

5인 에이전트 리뷰: 승률 60%인데 순손실 -$39.20인 이유

세션 8이 가장 흥미로웠다. 코드 품질 진단을 위해 가상의 5명을 설정했다.

너는 코인 선물 트레이딩 봇의 전략/리스크/실행 품질 개선을 위한
'5인 에이전트' 리뷰를 오케스트레이션하는 역할이다.
(가상의 5명: 전략(퀀트), 리스크, 실행/거래소 API, 데이터/백테스트, 운영/관측)

결과는 10건 거래 기록 분석 후 총점 4.2/10이라는 냉정한 진단이었다. 승률 60%인데 순손실 -$39.20. 이유는 역 리스크/보상 구조 — 소액으로 이기고 대액으로 졌다. 일일 최대손실 제한이 코드에 없었고, 포지션 사이징 로직에 버그가 있었다.

이 패턴의 장점은 같은 코드를 서로 다른 시각으로 보게 만든다는 것이다. Claude 하나에게 “전략 검토해줘”라고 하면 표면적인 분석만 나온다. 퀀트, 리스크 매니저, API 엔지니어 역할을 각각 부여하면 각 도메인에서 놓친 문제가 드러난다.

5개 전략 병렬 백테스트에서 유일하게 수익 난 전략

세션 12에서 백테스트 인프라를 먼저 구축하고 에이전트 5개를 동시에 띄웠다.

5개 에이전트가 각자 전략수립해서 제일 수익률 좋은 것과,
결과를 가지고 회의해서 수정하는 작업 해줘

90일치 26,000개 5분봉 데이터로 테스트한 결과:

전략수익률승률Profit Factor거래수
EMA Momentum+0.32%33.3%1.08120
나머지 4개음수-<1.0500~739

유일하게 수익이 난 EMA Momentum이 거래수가 가장 적었다. 많이 거래할수록 수수료와 슬리피지에 잡아먹혔다. “필터를 늘려서 거래 빈도를 줄여라”는 결론이 나왔다.

이 과정에서 worktree를 활용했다. claude/clever-blackburn 브랜치를 격리된 환경으로 만들어서 메인 코드에 영향을 주지 않고 실험했다.

14세션 중 4번 컨텍스트가 터졌다

14세션 중 4번 컨텍스트 한계에 도달했다. 세션 2, 14에서 대화가 중단됐고, 다음 프롬프트가 이전 컨텍스트 요약을 포함하는 방식으로 이어받았다.

This session is being continued from a previous conversation that ran out of context.
The summary below covers the earlier portion of the conversation.

이 방식이 실제로 잘 동작했다. Claude가 요약을 읽고 정확히 이어서 진행했다. 장기 프로젝트라면 중요한 상태(현재 실행 중인 전략, 테스트 결과, 다음 할 일)를 docs/STATUS.md에 지속적으로 업데이트해두는 게 유효하다. 세션이 끊겨도 STATUS.md를 읽으면 상황을 빠르게 파악한다.

961번의 도구 호출 통계

항목수치
총 세션14
총 소요 시간~7시간
총 tool calls961
Bash293
Read217
Edit158
Write67
생성 파일59개
수정 파일22개

Read가 217번이라는 게 인상적이다. 코드를 수정하기 전에 항상 읽는다. 수정할 부분만 Edit으로 바꾸고 전체를 다시 쓰지 않는다. 이 패턴이 불필요한 변경을 막는다.

Claude Code 트레이딩 봇에서 배운 3가지

CLAUDE.md를 잘 쓰면 “전체 만들어줘” 한 마디로 프로젝트 골격이 나온다. 하지만 실전 운영 환경에서는 안전 규칙을 명시적으로 적어둬야 Claude가 스스로 브레이크를 밟는다.

버그 수정 프롬프트는 에러 코드, 원인 가설, 요구사항 번호 목록으로 작성하면 한 번에 원하는 결과가 나온다. “왜 안 되지?”가 아니라 엔지니어가 티켓을 작성하듯이 써야 한다.

5인 에이전트 패턴은 코드 리뷰, 전략 검토, 다각도 분석이 필요한 상황에서 유효하다. 도메인 전문가 역할을 명시적으로 부여하면 각자 다른 시각에서 문제를 찾는다.


관련 글

댓글 0

0 / 1000