최종 업데이트: 2026-09-23
이 글은 투자 조언이 아니에요. 제 봇의 거래 기록을 직접 집계한 운영 리뷰이고, 손익 금액은 적지 않고 건수·승률·비율만 써요.
![]()
클로드코드(Claude Code)로 만든 AI 판단 단타 봇을 2026년 6월 26일부터 7월 9일까지 14일간 Hyperliquid 실계좌에서 돌린 결과, 청산 57건의 거래 손익 합계는 본전 근처였어요. 승률 36.8%, 손익비(Profit Factor) 1.00. 새로 만든 AI 봇을 실계좌에 처음 올린 2주치고는 나쁘지 않은 성적이에요. 최대 단일 손실이 포지션 금액의 −1.4% 였고, 레버리지 상한 10배 중 실제 노출은 자본의 1.05배(중앙값)에 그쳤고, 5연패 중에도 일일 손실 상한을 건드리지 않았어요. 그리고 합계를 청산 종류·종목·방향으로 쪼개니 다음에 고칠 것이 세 가지로 보였어요. AI 재량 청산 24건은 평균 0, 순이익은 SOL 한 종목뿐, 방향은 롱 51건 대 숏 6건이었어요.
이 글은 3편 AI 판단 봇 구조의 데이터 후속이고, 5편의 사고 ④(재시작 누락)가 바로 이 리뷰 직후에 일어났어요.
왜 “나쁘지 않았다” 고 보나요?
| 항목 | 수치 | 의미 |
|---|---|---|
| 최대 단일 손실 | 포지션 금액의 −1.4% | 57번 중 가장 아팠던 한 번이 이 정도. 하드 손절이 매번 제자리에서 끊었어요 |
| 평균 익절 vs 평균 손절 | +1.15% vs −0.65% (1.8배) | 이길 때 크게, 질 때 작게. 승률 37% 로도 본전이 나온 이유예요 |
| 실제 노출 | 자본의 1.05배(중앙값), 최대 2배 | 상한은 10배였는데 AI 가 스스로 절제했어요. 첫 거래도 상한 5배에서 3배만 썼어요 |
| 최장 연패 | 5연패 1회 | 연패 중에도 규칙대로 손절했고, 일일 손실 상한(15%)은 한 번도 안 건드렸어요 |
| 첫 실거래 | 6/26 ETH 숏 → 하드 익절 | 감시→AI→주문→익절→알림 루프가 첫날 그대로 돌았어요 |
수수료까지 넣으면 소폭 마이너스예요. 그래도 돈을 잃지 않으면서 57건의 실거래 데이터를 모은 것이 이 2주의 진짜 성과예요. 백테스트로는 못 얻는 숫자이고, 그 숫자가 아래 발견 세 가지를 만들었어요.
어떤 봇이었나요?
| 항목 | 내용 |
|---|---|
| 구조 | 코드가 2분마다 BTC·ETH·SOL 감시 → 급변·돌파·RSI 극단 같은 셋업일 때만 AI 호출 → AI 가 방향·확신도·손절·익절 제안 → 코드가 한도 안으로 자름 |
| 청산 방식 | 하드 손절, 하드 익절, 일일 손실 상한 + AI 가 보유 중 재평가해서 나가는 재량 청산 |
| 기간·표본 | 2026-06-26 ~ 07-09, 14일, 진입 56건 / 청산 57건 |
| 포지션 | 한 번에 1개, 레버리지 상한 10배(첫 주는 5배) |
발견 3가지는 무엇이었나요?

발견 ①: AI 재량 청산 24건은 왜 평균 0 이었나요?

| 청산 종류 | 건수 | 승률 | 평균 손익 (손절 1회 평균 = −1) |
|---|---|---|---|
| 하드 익절 | 12 | 100% | +1.71 |
| AI 재량 청산 | 24 | 37.5% | +0.02 |
| 하드 손절 | 21 | 0% | −1.00 |
번 돈은 전부 하드 익절에서, 잃은 돈은 전부 하드 손절에서 나왔고 그 둘이 거의 상쇄돼서 본전이에요. 바꿔 말하면 기계 규칙만으로 이미 본전 구조가 나왔다는 뜻이고, 좋은 출발점이에요. 그 사이의 AI 재량 청산 24건은 평균이 0 에 붙어 있어요. AI 가 “지금 나가는 게 좋겠다” 고 판단한 24번이 있으나 없으나 결과가 같았고, 보유 중 재평가는 매번 AI 를 호출하니 비용은 들었어요. 그래서 재량 청산을 껐어요. 보유 포지션은 하드 손절·익절·일일 상한으로만 나가고 보유 중에는 AI 를 부르지 않아요. 진입 판단은 AI, 청산은 기계예요.
발견 ②: 왜 승률이 가장 높은 BTC 가 손실이었나요?
| 종목 | 건수 | 승률 | 순손익 |
|---|---|---|---|
| SOL | 29 | 37.9% | 플러스 |
| BTC | 14 | 42.9% | 마이너스 |
| ETH | 14 | 28.6% | 마이너스 |
BTC 는 익절 폭이 작고 손절이 컸어요. 승률만 보고 종목을 고르면 틀리고, 승률과 손익비를 같이 봐야 해요. SOL 은 승률은 평범한데 익절이 컸어요. 변동성이 큰 종목이 이 봇의 익절 구조에 맞았던 거예요. 승률과 손익비의 관계는 Investopedia 의 Profit Factor 설명이 짧게 정리해요.
발견 ③: 롱 51건, 숏 6건은 무엇을 말하나요?
AI 가 방향을 스스로 고르는데 89% 가 롱이었어요. 설계에 롱 편향은 없고, 프롬프트가 추세 정렬을 강조한 것과 그 2주가 상승 구간이었던 것의 결과예요. 표본이 작아 결론은 보류했지만 “AI 니까 양방향을 균형 있게 본다” 는 가정은 한 번은 의심해야 해요. 2편의 규칙 봇에서 상승장 숏이 구조적으로 불리했듯이, AI 봇도 시장 구간을 타요.
무엇을 바꿨나요? 설정 4가지


# 7/9 리뷰 후 바꾼 설정 4개 : scalp_config.py (실제 코드, 전부 env 로 되돌림 가능)
# 종목 : SOL 전용으로 줄였다가 7/15 에 3종목 복원. SOL 전용 되돌림은 env SCALP_SYMBOLS=SOLUSDT
SCALP_SYMBOLS: list[str] = os.getenv("SCALP_SYMBOLS", "BTCUSDT,ETHUSDT,SOLUSDT").split(",")
# 진입 문턱 0.60 → 0.68 (빈도↓·질↑). 이 미만 확신이면 진입 안 함
MIN_CONVICTION: float = _f("SCALP_MIN_CONVICTION", 0.68)
# AI 재량 청산 끔. 보유 포지션은 하드 SL/TP·일일 손실 상한으로만 청산
ALLOW_DISCRETIONARY_EXIT: bool = _b("SCALP_ALLOW_DISCRETIONARY_EXIT", False)
# 모델이 제시한 TP 를 1.25배로 넓힌 뒤 MAX_TP_MOVE(10%) 로 캡
TP_WIDEN_MULT: float = _f("SCALP_TP_WIDEN_MULT", 1.25)
# 그대로 둔 안전장치
LEVERAGE_CAP: int = _i("SCALP_LEVERAGE_CAP", 10)
DAILY_LOSS_LIMIT: float = _f("SCALP_DAILY_LOSS_LIMIT", 0.15)
- 재량 청산 끔: 24건 평균 0 이라서. 보유 중 AI 호출도 생략해 비용이 같이 줄었어요.
- 종목을 SOL 하나로: 유일하게 순이익인 종목만 남겼어요.
- 확신 문턱 0.60 → 0.68: 승률 37% 를 올리려고 약한 진입을 거르기로 했어요.
- 익절 폭 1.25배: AI 가 제시한 익절가를 1.25배 넓혀 승자를 키우기로 했어요(10% 상한).
네 개 모두 환경변수 한 줄로 되돌릴 수 있게 넣었어요. 실험은 되돌리기 쉬워야 실험이에요.
바꾼 뒤 왜 5일간 체결이 0건이었나요?
7월 10일에 재시작한 뒤 7월 15일까지 한 건도 체결이 없었어요. 로그를 보니 AI 는 롱 진입을 여러 번 냈는데 확신도가 전부 0.55~0.58 이어서 문턱 0.68 에 걸렸어요. 거기에 종목을 SOL 하나로 줄인 것이 겹쳐 셋업 자체가 드문데 문턱까지 높아지니 봇이 개점휴업이 됐어요. 손실도 0, 데이터도 0.
그래서 7월 15일에 종목을 BTC·ETH·SOL 로 다시 넓혔고, 문턱 0.68 과 재량 청산 OFF 는 유지했어요. BTC·ETH 는 느슨한 설정에서 손실이었으니 엄격한 설정에서 재검증하는 성격이에요. “안 잃는 봇” 과 “아무것도 안 하는 봇” 은 겉으로 똑같아 보여요. 체결 0 도 봐야 할 숫자예요.
집계는 어떻게 했나요?

# 리뷰에 쓴 집계 스크립트 (trade_history.csv → 청산 종류·종목별)
import csv, collections, statistics as st
rows = [r for r in csv.DictReader(open("trade_history.csv", encoding="utf-8"))
if r["strategy"] == "opus_scalp" and r["event"] == "EXIT"]
by_reason = collections.defaultdict(list)
for r in rows:
by_reason[r["reason"].split(":")[0]].append(float(r["pnl"]))
for k, v in sorted(by_reason.items(), key=lambda x: -len(x[1])):
win = sum(1 for p in v if p > 0) / len(v) * 100
print(f"{k:12} {len(v):3}건 승률 {win:5.1f}% 평균 {st.mean(v):+.3f}")
> opus_close 24건 승률 37.5% 평균 +0.032
> hard_stop 21건 승률 0.0% 평균 -1.635
> hard_tp 12건 승률 100.0% 평균 +2.793
# 같은 방식으로 symbol, side 로 묶으면 ②③ 이 나와요. 클로드코드에 CSV 경로만 주면 이 코드를 짜줘요
봇이 남기는 거래 기록 CSV 를 청산 종류·종목·방향으로 묶어 건수, 승률, 평균을 뽑은 것이 전부예요. 스프레드시트로도 돼요. 중요한 것은 도구가 아니라 합계를 쪼개 보는 습관이에요. 합계 0 은 “정보 없음” 이 아니라 “상쇄되는 두 힘이 있음” 이었어요.
배운 것 5가지
- AI 의 재량은 진입에서 검증하고 청산은 기계에 맡겨요. 이 봇에서는 재량 청산이 효과가 없었어요.
- 승률만 보면 속아요. 승률 최고 종목이 손실이었어요. 승률과 손익비를 같이 봐야 해요.
- 바꾼 설정이 겹치면 봇이 멈출 수 있어요. 한 번에 하나씩 바꾸는 것이 맞았어요.
- 표본 57건은 결론을 내기엔 작아요. 이 글의 발견은 가설이지 증명이 아니에요. 그래서 되돌릴 수 있게 넣었어요.
- 위험을 작게 두면 실험을 계속할 수 있어요. 손실 폭을 −1.4% 안에 가두고 노출을 1배로 둔 덕에 본전으로 끝난 2주가 실패가 아니라 다음 실험의 재료가 됐어요.
자주 묻는 질문
Q. AI 판단 봇은 결국 돈을 벌었나요?
14일 기준 거래 손익은 본전 근처, 수수료 포함하면 소폭 마이너스예요. 대신 최대 손실 −1.4%, 노출 자본의 1배 안팎으로 위험을 작게 유지하면서 57건 데이터를 모았어요. 새 봇의 첫 2주로는 나쁘지 않았다고 봐요.
Q. 재량 청산을 끄면 AI 를 쓰는 의미가 있나요?
진입 판단에는 여전히 AI 를 써요. 어느 종목을, 어느 방향으로, 얼마나 확신하는지요. 청산만 기계 규칙으로 바꿨어요.
Q. 확신 문턱은 얼마가 맞나요?
아직 몰라요. 0.68 은 5일간 체결 0 을 만들었고, 0.60 은 승률 37% 였어요. 그 사이 어딘가일 텐데 표본이 더 필요해요.
Q. 리뷰는 얼마나 자주 하나요?
2주에 한 번이 맞았어요. 하루하루 보면 노이즈고 한 달은 너무 늦어요. 청산 50건 정도가 쌓이면 한 번 쪼개 봐요.
Q. 지금도 이 봇이 돌고 있나요?
7월 말부터 멈춰 있어요. 7편에서 두 봇을 멈춘 이유와 안 되는 것 3가지를 정리해요.
함께 보면 좋은 글
- 클로드코드 자동매매 봇 (3) AI 가 차트를 직접 읽는 단타 봇 구조
- 클로드코드 자동매매 봇 (4) 백테스트로 전략 고친 5단계
- 클로드코드 자동매매 봇 (5) 봇 사고 4건과 운영 원칙
출처: 제 봇의 거래 기록 CSV(2026-06-26~07-09, opus_scalp 57건)를 직접 집계한 값, 설정 파일 scalp_config.py, 7월 9일·15일 리뷰 메모, Hyperliquid 공식 문서. 투자 조언이 아니에요. 다음 편은 시리즈 마지막으로, 안 되는 것 3가지와 지금 멈춰 있는 이유예요.

Leave a Reply